SD только частично работает.

Rogerclark
SAT 06 июня 2015 г. 6:06 утра
Я не знаю, если это только я, но SD кажется действительно Flakey

Демонстрация Cardinfo кажется действительно надежной, но другие демонстрации, которые читают и записывают файлы, кажутся довольно хитом и пропусканием.

Я не уверен, что это потому, что скорость по умолчанию для SD LIB - это полгосна. Но на STM32, что половина скорости на SPI может быть слишком быстрым для некоторых SD -карт, особенно дешевые.

Есть ли у кого -нибудь еще проблемы с чтением и написанием файлов в SD ?

Мадиас
Сб, 06 июня 2015 г. 18:58
Как я помню, SD Lib работает очень хорошо для меня. Но(!!) не со всеми адаптерами! Некоторая сборка TFT в SD-адаптерах не работала должным образом. Я также обнаружил, что некоторые адаптеры SD-карты работают лучше с конкретными MCU (PIC32, TIVA-TM4C123, STM32), а некоторые нет. Звучит немного эзотерическим, но у меня не было времени, почему. Так что, возможно, сначала используйте ту же конфигурацию с другим адаптером?

Rogerclark
Сб, 06 июня 2015 г., 21:11
Спасибо, Матиас

Я думаю, что теперь я могу заставить его работать с одной из моих карт Micro SD, но я не могу заставить ее работать с полноразмерной SD -картой (хотя и другой адаптер)

Кажется, это не работает с большими картами микро -SD. У меня есть карта HC с фирменной 4 ГБ, которая не работает.

Я еще не исследовал это, но у меня есть чувство, что карты HC могут не сработать.
Я думал, что жир в порядке до 4 ГБ, так что должен работать, но, возможно, это неправильно.

Две мои доски (F103VET и F103ZET) имеют адаптер SD на задней части доски, но я не знаю, с чем он связан.
Я подозреваю, что, поскольку оба процессора поддерживают SDIO, что он связан таким образом, а не для SPI, но мне нужно будет использовать тестер непрерывности, чтобы попытаться понять, как он подключен.

Martinayotte
Сб, 06 июня 2015 г., 21:44
На моей стороне я все еще стараюсь сделать SDFAT/SPI работать над моим NetDuino2plus F405.
Это прерывает практически в начале. Вот некоторые следы, которые я включил или добавил: before sd.cardBegin ! SdSpiCard::begin / spiBegin() ! SPI configure_gpios / (nss=16, sck=42, miso=43, mosi=44) spi_master_enable(48,0,768) SdSpiCard::begin / spiInit() ! Bit order set to 1 SPI configure_gpios / (nss=16, sck=42, miso=43, mosi=44) spi_master_enable(48,0,768) Data mode set to 0 SPI configure_gpios / (nss=16, sck=42, miso=43, mosi=44) spi_master_enable(48,0,768) Clock divider set to 48 SPI configure_gpios / (nss=16, sck=42, miso=43, mosi=44) spi_master_enable(48,0,768) SdSpiCard::begin / 74clock spiSend() ! SdSpiCard::begin / cardCommand(CMD0) ! SdSpiCard::begin SD_CARD_ERROR_CMD0 ! SdSpiCard::begin FAIL ! SDCard initialization failed !

Rogerclark
Сб, 06 июня 2015 г., 21:54
Мартин

Вы имеете в виду, что SD Lib звонит начинать все остальное место ?

Я предполагаю, что вы используете SD Lib, который является частью IDE, как я ?

Я знаю, что у Виктора есть пересмотренный / улучшенный SDFAT LIB на своей учетной записи GitHub, но я не уверен, заменяет ли он SD или является утилитой, которую использует SD

Пса. Интересно, насколько хорошо SD на самом деле работает на AVR, я подозреваю

Martinayotte
Солнце 07 июня 2015 12:14
Привет, Роджер,
Rogerclark написал:Вы имеете в виду, что SD Lib звонит начинать все остальное место ?

Rogerclark
Солнце 07 июня 2015 3:28
Мартин

Я подозреваю, что начинается, потому что аппаратное обеспечение не позволяет изменять некоторые вещи, такие как Bitorder или The Clock Divider, при включении порта SPI (я помню включено)

Вероятно, это был я, который вложил звонки в Begin () в код, но альтернатива может быть просто для вызова

spi_master_enable (spi_d, (spi_baud_rate) clockdivider, (spi_mode) dataMode, flags);

Плюс другой код, но если вы не можете вырезать часть кода, почти кажется логичным вызовом () каждый раз, когда вы меняете настройки

Хотя, возможно, вам не нужно звонить настройку gpio

Поэтому я подозреваю, что лучшим подходом будет написать функцию, называемую SetSpisettings (), которая называется после того, как вы измените бит -заказ и т. Д., А также вызовут из Begin ()

пико
Солнце 07 июня 2015 г., 6:17
Rogerclark написал: Я знаю, что у Виктора есть пересмотренный / улучшенный SDFAT LIB на своей учетной записи GitHub, но я не уверен, заменяет ли он SD или является утилитой, которую использует SD

Rogerclark
Солнце 07 июня 2015 12:04
Я пробовал обновленную версию SDFAT победителей, но, похоже, это не работает для меня :-(

Карта не инициализируется.

Итак, я вернулся к использованию стандартного SD, который является частью установки IDE.

Однако его ультра :-( :-(

Я знаю, что это старые новости... Но SD Lib, похоже, не прочитал без видимой причины, E.глин. Я называю DataFile.Читать (Бафф, Лен); И он просто возвращает -1 случайным.глин. 10 мс он просто продолжает возвращать -1 :-(

В любом случае, с точки зрения того, что я пытался сделать, у меня есть что -то, что работает, но недостаточно надежно, чтобы их можно было использовать.

Он открывает и читает файл из SD и воспроизводит его как mp3, хотя VS1003

Я сделаю репост кода в LIB -ветку VS1003 на случай, если кто -либо с тем же оборудованием хочет играть с ним

#include #include #include VS1003 player(PC14, PB10, PA8, PA9, SPIClass(2)); // cs_pin, dcs_pin, dreq_pin, reset_pin /* * VS1003 development board connected by it's header pins the following way: * * GND - GND - * XDCS - D6 - PB10 * DREQ - D7 - PA8 * XRES - D8 - PA9 * XCS - D9 - PC14 * SCLK - D13 - PA5 * SI - D11 - PA7 * SO - D12 - PA6 * GND - GND - * 5V - 5V - */ void setup () { Serial.begin(115200); // while (!Serial.available());/// Wait for key entry.. For debugging // see if the card is present and can be initialized: while (!SD.begin(PA4)) { Serial.println("Card failed, or not present");// don't do anything more: delay(100); } Serial.println("card initialized."); player.begin(); player.modeSwitch(); //Change mode from MIDI to MP3 decoding (Vassilis Serasidis). player.setVolume(64); } int currentFileNum = 0; // Hack because SD only allows one file handle open at a time :-( void loop() { playFile("music.mp3");// Lets just play the music ;-) delay(1000); return; } #define BUFF_LEN 128 void playFile(char *fileName) { uint8_t buff[BUFF_LEN]; File dataFile; int bytesRead; int fileSize; int totalBytesRead = 0; dataFile = SD.open(fileName); if (!dataFile) { Serial.println("Error opening file"); return; } Serial.print("Playing "); Serial.println(fileName); fileSize = dataFile.size(); // need to know the size of the file // loop until end of file while (totalBytesRead != fileSize) { do { bytesRead = dataFile.read(buff, BUFF_LEN);// try to read a buffers worth if (bytesRead == -1) // Oops. SD didnt manage to read anything .... { delay(10);// Workaround for problem in SD lib. } } while (bytesRead == -1);// loop around if last read failed player.playChunk(buff, bytesRead); totalBytesRead += bytesRead;// keep track of how much of the file we've played } dataFile.close(); }

пико
Солнце 07 июня 2015 13:32
Rogerclark написал:Я пробовал обновленную версию SDFAT победителей, но, похоже, это не работает для меня :-(

Карта не инициализируется.

Martinayotte
Солнце 07 июня 2015 13:48
В моем случае я попробовал версию Виктора, и сегодня утром Билл Грейман, а также по умолчанию Arduino One.
Все они терпят неудачу во время команд CMD0, поэтому я подозреваю, что мой порт SPI от F1 до F4 не работает, хотя не так много различий.

Mrburnette
Солнце 07 июня 2015 13:51
Пико написал: <...>
Я на самом деле весьма удивлен этим - не столько код не работает (даже в старые времена, у парней -либмапл, чертовски время, чтобы заставить базу кода SD работать над кленом по какой -то причине), Но тот факт, что это не работает, и Билл Грейман принял запрос на притяжение! По моему опыту, он обычно довольно консервативен в отношении паранойи...

Однако, учитывая, как далеко заходило с Sdfatlib с тех пор, я буду смотреть на Teensy 3.x Code как место для начала для свежего порта STM32 - аналогичные определенные процессоры, и я знаю, что Билл уделил много времени, чтобы заставить его запустить прямо на этой платформе.

пико
Sun 07, 2015, 14:26
Mrburnette написал: Я не могу говорить за Виктора, но в прошлом я использовал подростковый код Павла, иногда он поучительно ... Иногда просто не что -то, кроме #ifdef's.

Mrburnette
Солнце 07 июня 2015 14:55
Изменения для Sdfatlib для Teensy 3.X были из -за Билла, а не Пола - как я уже сказал, Билл имеет тенденцию держать его довольно близко к его груди, когда дело доходит до изменения источника SDFATLIB. Ну, мне не волнует, как они попали в подростковую экосистему, только в том, что они сделали! (Я подростка3.1 владелец) Билл проделал большую работу на протяжении многих лет, и Пол предоставил Arduino Compatables, которые являются отличной ценностью.

Но по мере того, как знаменитые компании меняют аппаратное обеспечение Arduino, SD будет выглядеть все более и более абстрактным - как флеш -карта на ПК.

Лично я не подписываюсь на использование основного микропроцессора для SD. Второй специальный микроконтроллер - более разумный данных Datalogger. https: // www.хакерс.io/rayburne/sd-card-serial-logger Если дизайн требует чтения, анализа, написания и тому подобного: перейти к RPI. На 328 AVR для чтения требуются 512 байт. IMO: Просто глупо, чтобы попытаться смешать это требование с логикой программы.

Поскольку итог STM32 составляет 20K SRAM, усилия по интеграции SD в основную логику программы являются более заманчивыми.

Луча

Rogerclark
Sun 07, 2015, 21:07
Ребята

У меня еще не было времени, чтобы проверить это, но похоже, что причина, по которой SDFAT (последняя версия SD) не работала для меня, заключается в том, что вы не можете использовать PA4 в качестве CS, и случайно я использовал этот PIN Это рядом с другими булавками SPI на моей доске, что облегчило проводку.

Если это сработает, я добавлю SDFAT в качестве библиотеки, потому что используя старый, поставляемый с IDE

Это может быть просто моя конкретная настройка аппаратного обеспечения, которая не очень хорошо работает со старой SD Lib, трудно сказать.

КСТАТИ. Загадочно моя карта Sandisk 4GB Micro SD начинает работать со старым SD Lib, когда я пытался заставить мой MP3 -плеер работал вчера, и мой хитрый 2 ГБ SD прекратил работать.

В любом случае, я снова попробую SDFAT и расскажу о своей стабильности для меня с различными картами.

Mrburnette
Солнце 07 июня 2015 21:14
В любом случае, я снова попробую SDFAT и расскажу о своей стабильности для меня с различными картами. Билл однажды сделал это и опубликовал его результаты, но я не могу найти ссылку в настоящее время. И его работа была для 8-битной AVR, поэтому я не знаю, повлияет ли 32-разрядное оборудование на результаты.

Это будет интересно, в любом случае.

Луча

Rogerclark
Солнце 07 июня 2015 21:35
Привет, Рэй

Я сообщу ;-)

Разочаровывающая вещь, заключается в том, что SD - это всего лишь одна часть того, что из тестового проекта (MP3 -плеер), это не должно было быть проблемной областью, то VS1003 должен был быть устройством, с которым я справлялся с ;-)

С воспроизведением MP3, получение данных в VS1003 во времени имеет решающее значение, поскольку он имеет только 5 -K внутренний буфер и не передает так быстро (Div 16, я думаю)

GIT SPI для VS1003, работающего над SPI2, но, поскольку ни SD, ни VS1003 не используют DMA, он не дает мне никакого преимущества в производительности.

Я буду смотреть на использование DMA для VS1003, но я думаю, что мне также нужно использовать прерывание на своем входе DREQ (необходимы Немного более многозадачно в природе

Mrburnette
Солнце 07 июня 2015 21:39
С воспроизведением MP3, получение данных в VS1003 во времени имеет решающее значение, поскольку он имеет только 5 -K внутренний буфер и не передает так быстро (Div 16, я думаю) Может быть, RTOS? Не то, что это такое...

Луча

Rogerclark
Солнце 07 июня 2015 11:07
Просто быстрое обновление, так как я думаю, что я собираюсь приостановить это, так как у меня есть другие вещи STM32, которые мне нужно посмотреть...

Я попытался изменить булавку CS, я даже пытался просто вытащить PIN -код CS в GND, и я все еще не могу заставить новую либера

Я начинаю задаваться вопросом, является ли это оборудование E.глин. Уровни напряжения

Я использую этот Micro SD -адаптер и запускал его от 3.3В

Изображение

Однако, глядя на это, я вижу, что у него есть регулятор.

Итак, на моей красной плате таблеток я меняю входное напряжение с 3.От 3 до 5 В, и это, кажется, делает мою дешевую / клонированную SD -карту более надежной на моей красной таблетке - но все же не позволяет мне использовать SDFAT.

Я пытался загрузить репо Билля, но он не компилируется, поскольку он получает ошибки из -за отсутствующих определений в SPI_DMAC_TX_CH

Я не получаю эти ошибки при использовании версии победителей. Таким образом, похоже, что есть что -то вне синхронизации Betweeen Победителей Последний запрос на притяжение в репо Билле, и что Victor обновил в SPI в отношении DMA :-(

Я не уверен, что Виктор читает эту ветку, поэтому я буду в личку об этом.

Rogerclark
Пн июня 08, 2015 2:03
Просто быстрое обновление.

Похоже, проблема с обычной SD LIB, такая же, как и для новой либера

Вы не можете использовать PA4 в качестве выбора чипа на SPI, потому что это PIN -код NSS (Adwardware SPI Chip Select).

Случайно я попытался просто подключить CS к GND, и я заметил, что это казалось намного более надежным, поэтому я попробовал PA2 вместо PA4 в качестве CS, и это кажется одинаково надежным,
Я больше не получаю -1 возврата из файла.Читать (бафф, длина), также карта, кажется, сразу же инициирует.


Так что я думаю, что статус SD Lib, он работает, Но только если вы не используете PA4 для CS

Мадиас
Пн июня 08, 2015 8:32
Хороший найденный Роджер!
У меня никогда не было такой проблемы, потому что я всегда использую отдельный PIN -код CS (а не PIN -код HW NSS) с «старых дней Arduino», за исключением того, что я полностью занимаюсь SPI «на руку». Но приятно знать, что эта «проблема» все еще существует, даже на STM32-Duino.
Когда у меня будет время, я открою ветку в глобальном разделе и опубликую свои результаты все мои адаптеры SD-карты + в каждой комбинации. Все, что я могу сказать, это то, что ваш адаптер на фото (с 5V до 3.3V разговор) работает почти на каждом MCU (даже на 3.3v) для меня - недостаток: только мини -SD -карты:/

пико
Пн, 08 июня 2015 г. 8:45 утра
Rogerclark написал:Так что я думаю, что статус SD Lib, он работает, Но только если вы не используете PA4 для CS

пико
Пн июня 08, 2015 8:56 утра
Теперь, немного гуглирования предполагает, что в кремнеоне F103 может быть какая -то странность.

Вот цитата из сообщения на форуме на STM в 2012 году:
Подтверждено здесь (на плате STM3240G-Eval), также с установкой NSS на PB9 вместо PB12. PIN -код NSS остается низким. При установке в режим Ti, он начинает переключаться, поэтому GPIO- и AF-сеттинг правильный.В режиме «стандартный» он остается низким, даже если включенный бит (CR1.6) очищено.

Я бы сказал, что это просто недостаток дизайна, частично покрытый следующим предложением в руководстве:

«Примечание: когда мастер общается со стабами SPI, которые необходимо отобрать между передачами, PIN NSS должен быть настроен как GPIO или другой GPIO, который должен использоваться и переключаться с помощью программного обеспечения."

Было бы неплохо услышать некоторые комментарии от ST.

JW


Вот ссылка на страницу форума на моем.ул.com с этим постом:

https: // my.ул.com/public/ste2ecommuniti ... Просмотры = 1705

Таким образом, похоже, что даже одно руководство ST говорит, что CSN нуждается в ручном управлении от GPIO. Другой PIN -код, кроме аппаратных портов, обозначенных CSN!

Обратите внимание, что даже это не отвергает странное поведение:
pinMode(BOARD_SPI2_NSS_PIN, OUTPUT); : : digitalWrite(BOARD_SPI2_NSS_PIN, LOW); SPI_2.transfer(b); digitalWrite(BOARD_SPI2_NSS_PIN, HIGH);

Мадиас
Пн, 08 июня 2015 г. 8:57 утра
....И если раб не полностью ошеломлен, то здесь подойдет «взрыв»:
Изображение
РЕДАКТИРОВАТЬ: Таким образом, лучшим обходным путем было бы отменить выбору штифта NSS в библиотеке SPI (и используя его в качестве обычного GPIO) и повернуть его на руку или в пределах мудрой библиотеки

пико
Пн июня 08, 2015, 9:43
Мадиас написал:РЕДАКТИРОВАТЬ: Таким образом, лучшим обходным путем было бы отменить выбору штифта NSS в библиотеке SPI (и используя его в качестве обычного GPIO) и повернуть его на руку или в пределах мудрой библиотеки

Rogerclark
Пн июня 08, 2015, 10:00 утра
Ммм

На странице 694 ручного руководства есть кое -что
Управление PIN -код Slave Select (NSS)
Управление аппаратным или программным рабом может быть установлено, используя бит SSM в
SPI_CR1 Регистр.
• Программное обеспечение NSS Management (SSM = 1)
Информация о выборе подчинений проникает внутри по цене бита SSI в
SPI_CR1 Регистр. Внешний штифт NSS остается бесплатным для других приложений.

пико
Пн июня 08, 2015 10:11
Rogerclark написал:Ммм

На странице 694 ручного руководства есть кое -что
Управление PIN -код Slave Select (NSS)
Управление аппаратным или программным рабом может быть установлено, используя бит SSM в
SPI_CR1 Регистр.
• Программное обеспечение NSS Management (SSM = 1)
Информация о выборе подчинений проникает внутри по цене бита SSI в
SPI_CR1 Регистр. Внешний штифт NSS остается бесплатным для других приложений.

Вассилис
Пн, 08 июня 2015 г., 10:17 утра
Сегодня я нашел некоторое время, чтобы проверить библиотеку Arduino SD по умолчанию (SD) с моим STM32F103CT8.
В первую очередь это не сработало (по крайней мере для меня). Но после нескольких дополнительных строк в стандартной библиотеке это сработало.

Отредактируйте файл SD2Pinmap.час (Arduino-1.6.4 \ Библиотеки \ sd \ src \ Утилита) и добавить следующие строки:
//------------------------------------------------------------------------------ #elif defined(__STM32F1__) uint8_t const SS_PIN = PA4; uint8_t const MOSI_PIN = PA7; uint8_t const MISO_PIN = PA6; uint8_t const SCK_PIN = PA5; //------------------------------------------------------------------------------

Rogerclark
Пн июня 08, 2015 10:23
Я только что попытался изменить флаги

добавив spi_cr1_ssm_bit

uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE | SPI_SOFT_SS | SPI_CR1_SSM_BIT);

Rogerclark
Пн июня 08, 2015 10:25 утра
Василлис

У нас есть определения (заполнители)
#warning these are just here to get SPI to compile they need to be changed and moved! #define SS (1) #define MOSI 2 #define MISO 3 #define SCK 4

Rogerclark
Пн июня 08, 2015 10:36 утра
Нам нужен gpio_get_mode (), который делает обратное
void gpio_set_mode(gpio_dev *dev, uint8 pin, gpio_pin_mode mode) { gpio_reg_map *regs = dev->regs; __io uint32 *cr = ®s->CRL + (pin >> 3); uint32 shift = (pin & 0x7) * 4; uint32 tmp = *cr; tmp &= ~(0xF << shift); tmp |= (mode == GPIO_INPUT_PU ? GPIO_INPUT_PD : mode) << shift; *cr = tmp; if (mode == GPIO_INPUT_PD) { regs->ODR &= ~(1U << pin); } else if (mode == GPIO_INPUT_PU) { regs->ODR |= (1U << pin); } }

Вассилис
Пн июня 08, 2015 10:47 утра
Я думаю, что есть ошибка PINMAP. Кажется, что когда вы определяете булавку с простым числом (2, 3, 4 и т. Д.) Определение не будет работать.
Вот почему я всегда использую синтаксис PXX или PXXX, когда я определяю вывод.

пико
Пн июня 08, 2015 11:14
Rogerclark написал: Управление PIN -код Slave Select (NSS)
Управление аппаратным или программным рабом может быть установлено, используя бит SSM в
SPI_CR1 Регистр.
• Программное обеспечение NSS Management (SSM = 1)
Информация о выборе подчинений проникает внутри по цене бита SSI в
SPI_CR1 Регистр. Внешний штифт NSS остается бесплатным для других приложений.

Rogerclark
Пн, 08 июня 2015 г., 11:21
Руководство RM00008, похоже, подразумевает, что MSS должен быть установлен
Управление программным обеспечением NSS (SSM = 1)
Информация о выборе подчинений проникает внутри по цене бита SSI в
SPI_CR1 Регистр. Внешний штифт NSS остается бесплатным для других приложений.
Но стоит попробовать другие комбинации, так как иногда руководство неверно

пико
Пн июня 08, 2015 12:05
Пико написал:Я буду экспериментировать.

пико
Пн, 08 июня 2015 г., 15:41
Пико написал:[...] Но, похоже, есть надежда, что булавки CSN должны быть в состоянии переключаться вручную в режиме GPIO, что, хотя и не идеально, было бы лучше, чем ничего.

Sheepdoll
Пн июня 08, 2015, 21:18
Я на самом деле столкнулся с этой же проблемой на AVR, используя PIN -код NSS. На AVR штифт NSS используется для установки Master/Slave. Поэтому, когда когда -либо штифт NSS был написан низким, он помещал SPI в режим рабов. Теперь, когда я кодирую SPI, я думаю о том, что NSS PIN -код является вход к MPU.

Что касается библиотеки SD, я использую Fatfs Chan и Petitefatfs. Я думаю, что код "промежуточного программного обеспечения" STM32Cubemx включает в себя та же самая библиотека, что и ссылка, приведет к сайту Elmchan. Этот код даже будет работать на топ -игре Avrtiny45 *.WAV -файлы. (Пришлось взломать некоторые из них, чтобы сделать это.) Довольно хорошо пробегает на Avrtiny85 с запасным местом. Я сделал проект, который был игрушечным пианино, где мы сделали 333 единицы, используя Avrtiny85. Самая маленькая карта, которую я мог получить, была как 4 гигабайта.

Мне нравится идея использования второго процессора журнала данных для обработки чтения/записи SPI на карту. Особенно жир пишет для динамически распределенных файлов. Чтение не так уж и проблем. Запись на аудио/видео -тарифах может быть проблемой, когда жир начинает наполняться, или диск сильно фрагментирован, и есть долгие поиски, необходимые для поиска бесплатных блоков распределения.

Я был обеспокоен записью органа труб на более быстром STM32 и более медленных SD -картах. Возможность использовать второй процессор для обработки динамического распределения жира и обновлений каталогов асинхронно, может быть ответом.

Роджер: Если вы этого не сделали, посмотрите, как Elm Chan (кто действительно кошка) сделал 8 -то Pin Wave Player с Avrtiny85. Задуманные проходы находятся в AVR ASM, но он показывает, как настроить буферы для прямого воспроизведения. Своего рода псудо DMA.

Rogerclark
Пн июня 08, 2015, 21:46
Пико

Я пришел к тому же выводу.

Если вы установите Pinmode после начала, это нормально. я.e spi, похоже, не сталкивается с использованием PIN -кода в качестве GPIO.

Однако begin () также называется в setDivider () и SetBitorOder, так как все функции THSE в основном должны настроить регулятор SPI.

Таким образом, быстрое и грязное исправление состоит в том, чтобы установить PA4 для вывода в конце функции begin ().

Нам нужно обрабатывать SPI2, а на некоторых досках также SPI3. Но мы можем положить в переключатель (), чтобы справиться с этим.

Но, я немного обеспокоен тем, что код помещает выводы в выводы, в случае по какой -то странной причине кто -то, например, решил использовать PA4 в качестве ввода для управления потоком, например, строка REQ Data на VS1003. Как и в этом случае, это потенциально повредит некоторое оборудование.

Так..
Я думаю, что лучший вариант - написать какой -то код, чтобы получить PinMode соответствующего вывода NSS, прежде чем установить регулятор SPI, а затем установить PinMode обратно в сохраненное состояние после настройки регулятора SPI.

Я знаю, что это будет незначительно замедлить вещи, но SPI BEGIN () обычно не называется во времени критических мест в коде.

@sheepdoll

Спасибо за информацию о другом коде файловой системы.

Использование SD - это боль, так как он позволяет только одну ручку файла открываться за раз :-(
Так что я могу даже получить список каталогов, а затем воспроизвести файлы один за другим, потому что список каталогов нуждается в ручке файлов.

Я пытался написать обходную работу для материалов списка каталогов (поскольку мне не нужно было повторно в каталогах, я только что сохранил, сколько файлов в каталоге, которые играл в MP3 -плеер, затем начал каждый список каталогов и пропущенный через N Файлы, чтобы добраться до следующего, чтобы воспроизводиться; эта идея.


Я думаю, что в долгосрочной перспективе мы сможем получить последнюю версию SDFAT, так как он каким -то образом работает для Victor.

Sheepdoll
Пн, 08 июня 2015 11:08
Rogerclark написал:
Использование SD - это боль, так как он позволяет только одну ручку файла открываться за раз :-(
Так что я могу даже получить список каталогов, а затем воспроизвести файлы один за другим, потому что список каталогов нуждается в ручке файлов.

Rogerclark
Пн, 08 июня 2015 11:44
@sheepdoll

Я попытался использовать демонстрацию списков, а затем для каждого файла его итерации я называл свою функцию PlayFile (char *FilenAme)

Но Playfile должен открыть файл в Plat, а в цикле Listfiles по -прежнему есть открытый файл «DIR».

Так что, кажется, происходит, так это то, что он воспроизводит первый файл, но когда функция PlayFile вернулась, дескриптор файла DIR, казалось, был поврежден, потому что PlayFile открыл файл для игры

Я думал, что в SD LIB что -то есть, что использует глобальную для открытого файла файла.

Но, возможно, на самом деле происходило то, что код чтения SD становился изумленным из -за проблем с чипсом Select на PA4, на самом деле не работает.

Мне нужно будет еще раз использовать код из примера файла списков

Я мог бы просто выделить большой массив для имен файлов, но это казалось хакерским способом сделать это.

Sheepdoll
Втюргал 09 июня 2015 12:32 утра
Rogerclark написал:Я мог бы просто выделить большой массив для имен файлов, но это казалось хакерским способом сделать это.

Rogerclark
Вт, 09 июня 2015 г., 12:39
Я планировал воспроизводить все файлы только в одном директоре и не беспокоиться о спусках в суб -дир, поэтому у меня был номер, который эффективно индексировал n файлов в каталог

Начальный n = 0

Таким образом, он открывает DIR, пропускает N -файлы, а затем считывает имя файла, хранит его, закрывает рукоятку DIR, приращения n и вызывает PlayFile
Обратитесь назад, если не > файлы в текущей папке

т.е. мне нужно только хранить int для n, а также путь папки

Я согласен написать общее назначение, воспроизводить все файлы во всех папках гораздо сложнее. Я просто полагался на функции высокого уровня в SD LIB и только собирался воспроизводить файлы в выбранной папке

Sheepdoll
Вт. 09 июня 2015 1:12
Rogerclark написал:Я просто полагался на функции высокого уровня в SD LIB и только собирался воспроизводить файлы в выбранной папке

Rogerclark
Вт, 09 июня 2015 г., 2:19
@sheepdoll

Я бы действительно не думал о плейлистах, но я знаю, что вы имеете в виду

Первоначально моим основным направлением было просто получить материал SD и VS1003, и мне было интересно посмотреть, смогу ли я DMA на VS1003 (хотя у меня в настоящее время возникают проблемы с этим) и начать передачи DMA (из 32 байтовые блоки), от прерывания, сгенерированного VS1003 с его линейкой TRQ Data Data

Так что система станет полностью прерыванием для SD и VS1003, оставляя основной цикл для обработки пользовательского интерфейса

Но это долгий путь вниз по трассе ;-)

Martinayotte
Вт. 09 июня 2015 г. 2:54 утра
С тех пор, как я был разблокирован этой проблемой NSS, я сделал еще несколько тестов...
Есть новая проблема, с которой я сталкиваюсь с SD Lib:
Я устанавливаю SD.begin (), я делаю список printDirectory (), приведенный в примере, это нормально ! Я делаю это снова, все работает нормально !
Я делаю FileRead (), FileRead () работает нормально, но выполнение printDirectory () дайте мне лишь несколько файлов из реального списка ... :(
(Я обращаю внимание на то, что сказал Роджер, я закрываю ручку в printDirectory (), но все еще есть новая ошибка ...)

Rogerclark
Втюр. 09 июня 2015 г. 3:32
Мартин

Я подозреваю, что это ошибки в SD Lib и, возможно, присутствуют на AVR (как мы используем тот же код)

Из того, что я понимаю, SD был заменен SDFAT, но проблема с этим, по -видимому, заключается в том, что Виктор отправил запрос на тягу в SDFAT Repo, который был принят, но SDFAT NO не компилируется на STM32

Victor_PV имеет обновленный SDFAT в его учетной записи GitHub, но он не сработал для меня (независимо от того, какой CS PIN-код я использовал), и я подозреваю, что он может не составить для F4 из-за материала F1 DMA, который в этой версии ;-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(

Так что это оставило нас...

Возможно, возвращение к версии SD FAT до того, как победители вытягивают запрос, может работать принятие запроса..

пико
Вт, 09 июня 2015 г., 8:58 утра
Я думал, что мы, вероятно, должны создать отдельную ветку для проблем SPI LIB, так как это более общее, чем SD Stuff, и может потребоваться немного размышлений и обсуждения, как лучше всего продолжить.

Что касается Sdfatlib, то у меня есть некоторый опыт переноса этого в проект Mighty-1284p, поэтому я достаточно хорошо знаю, и могу взглянуть на перенос для простого случая SPI не-DMA, поскольку у нас есть обходной путь для этого сейчас.

Кстати, ошибка CSN для F103 также влияет на устройства F2 и F4, но предположительно не влияет на устройства F0 и F3 (от чтения на моем.Ул.com форумы.)

Rogerclark
Вт, 09 июня 2015 г., 9:30 утра
@pico

Спасибо за головы о F0 и F3

Я на самом деле смотрю на это сегодня вечером (сейчас)

Я пишу новую функцию низкого уровня
gpio_pin_mode gpio_get_mode(gpio_dev *dev, uint8 pin);

пико
Вт. 09 июня 2015 г. 9:36 утра
Мне неясно, что ты на самом деле исправляешь с этим. Вы можете объяснить свои рассуждения?

В любом случае, запустите новую ветку для выпуска SPI LIB?

Rogerclark
Вт. 09 июня 2015 г. 10:23
Я начну новую ветку

Тема продолжалась здесь

http: // www.STM32duino.com/viewtopic.PHP?f = 14&t = 300

Нагисса
Пт 12 июня 2015 г., 5:09
Привет,

Я работаю с SD для чтения/записи на клоне Maple Mini и использования стандартного класса Arduino SD.

Я обнаружил, что использование этой библиотеки с древним 32 МБ (да, MB, а не GB), я должен добавить какую -либо отладку (сериал.println) или задержка (1) между каждым файлом.Read (), потому что, если я этого не сделаю.

Что рекомендуется библиотека для этой доски? Чтение потока, которое я полагаю, Maple Mini поддерживается новой библиотекой, не так ли?

Rogerclark
Пт 12 июня 2015 г., 5:23
Нагисса

Я также заметил, что мне нужно добавить задержки. Это может быть проблемой с скоростью вашей SD -карты, но я думаю, что в старой библиотеке SD есть некоторые «проблемы»
КСТАТИ. Вы пробовали последнюю версию репо с изменением на spi_f1.C, как часть моей проблемы (требуя задержек), казалось, была проблемой с использованием PA4 в качестве PIN -кода SS.
Но если вы используете другой PIN -код, это определенно SD Lib или ваша карта, это проблема.


Я знаю, что Victor_pv работает с автором книги

https: // github.com/greiman/sdfat

Которая является заменой для SD на All Arduino's

Однако в настоящее время это не работает. На самом деле, что репо вообще не компилируется.

Victor_pv имеет обновление SDFAT на его учетной записи GitHub, но это не сработало для меня, поэтому я вернулся к старой SD Lib, который работает 95% случаев

Нагисса
Пт 12 июня 2015 г., 7:11 утра
Rogerclark написал:Нагисса

Я также заметил, что мне нужно добавить задержки. Это может быть проблемой с скоростью вашей SD -карты, но я думаю, что в старой библиотеке SD есть некоторые «проблемы»
КСТАТИ. Вы пробовали последнюю версию репо с изменением на spi_f1.C, как часть моей проблемы (требуя задержек), казалось, была проблемой с использованием PA4 в качестве PIN -кода SS.
Но если вы используете другой PIN -код, это определенно SD Lib или ваша карта, это проблема.


Я знаю, что Victor_pv работает с автором книги

https: // github.com/greiman/sdfat

Которая является заменой для SD на All Arduino's

Однако в настоящее время это не работает. На самом деле, что репо вообще не компилируется.

Victor_pv имеет обновление SDFAT на его учетной записи GitHub, но это не сработало для меня, поэтому я вернулся к старой SD Lib, который работает 95% случаев

Rogerclark
Пт 12 июня 2015 г. 9:33
Я думаю, что SDFAT - это замена для SD на All Arduinos, но команда Arduino не медленно развертывает подобные изменения
Я заметил, что команда IDE не очень часто обновляет либера.

Стивестронг
Пт 06 ноября 2015 12:42
Просто короткая информация:
SDFAT LIB в настоящее время работает, см
http: // www.STM32duino.com/viewtopic.PHP?f = 13&t = 20