У меня есть приложение, где у меня есть микроконтроллер (NXP LPC1343 ), который подключен к FPGA через 16-битный SPI. Существует также SD-карта, использующая тот же порт SPI (MISO / MOSI), но с другим выводом CS / SS (оба активны на низком уровне согласно спецификации SPI). Одна из вещей, которые мне нужно сделать, это записать данные из FPGA в файл на SD-карте с помощью FAT32 , и это задача микроконтроллера. Микроконтроллер работает под управлением FatFS , и я сам получил надежную работу.
Поскольку микроконтроллер имеет только небольшой объем оперативной памяти, только небольшой объем данных может быть буферизован за один раз. Следовательно, micro должен прочитать буфер из FPGA, изменить режим SPI на 8-битный, а затем записать эти данные в FATFS. Напомним, что для настройки SD-карты на режим SPI необходимо отправить команду, когда шина SPI работает на частоте 400 кГц, и должно произойти определенное время ожидания. Поэтому я хотел бы выполнить инициализацию только один раз.
Однако выполнение транзакций на FPGA даже при высоком уровне CS на SD-карте, кажется, переводит SD-карту в странное состояние, так что она должна снова пройти инициализацию. Это, конечно, нежелательно, так как инициализация может занять несколько миллисекунд, чтобы записать всего 4 КБ или около того данных (опять же, ограничено малым объемом оперативной памяти моего микро). Поскольку мне нужно как можно быстрее записать несколько мегабайт, это снижает производительность примерно с 500 кБ / с до менее 100 кБ / с.
Я знаю, что SD-карты технически не полностью совместимы с SPI, но как решить эту проблему?
Ответы:
Хорошо, я понял это на самом деле. Я должен был погуглить немного глубже. Оказывается, что SD-карты не работают точно так же, как устройства SPI при совместном использовании шины в соответствии с разделом Как использовать MMC / SDC :
SD-карта и FPGA, вероятно, оба пытались управлять DO, и SD-карта потеряла, поэтому она перезагружалась. Отправка дополнительного байта, кажется, исправила это.
источник