Чи поважає SD-карта в режимі SPI вибір чіпа / підлеглого? Здається, у моїй заяві відбувається скидання


9

У мене є додаток, де у мене є мікроконтролер (NXP LPC1343 ), який підключений до FPGA за допомогою 16-бітного SPI. Існує також карта SD, що використовує той самий порт SPI (MISO / MOSI), але з іншим штифтом CS / SS (обидва активні на низькому рівні, відповідно до специфікації SPI). Одне з речей, що мені потрібно зробити - це записати дані з FPGA на файл на SD-картці за допомогою FAT32 , і це завдання мікроконтролера. Мікроконтролер працює під управлінням FatFS , який я змусив надійно працювати сам.

Оскільки мікроконтролер має лише невелику кількість оперативної пам’яті, одразу може бути завантажений лише невеликий обсяг даних. Отже, мікросередовище має зчитувати буфер з FPGA, змінити режим SPI на 8-бітний, а потім записати ці дані у FATFS. Нагадаємо, щоб налаштувати SD-карту для режиму SPI, команда повинна бути надіслана, коли шина SPI працює на частоті 400 кГц, і має відбутися певна кількість очікування. Тому я хотів би виконати ініціалізацію лише один раз.

Однак виконання транзакцій на FPGA навіть утримуючи CS на SD-картці, здається, переводить SD-карту в дивний стан, таким чином, що їй потрібно знову пройти ініціалізацію. Це, звичайно, небажано, оскільки ініціалізація може зайняти кілька мілісекунд, щоб записати лише 4 кБ або близько того даних (знову ж таки обмежена невеликою здатністю оперативної пам'яті мого мікро). Оскільки мені потрібно записати кілька мегабайт якомога швидше, це знижує продуктивність приблизно від 500 кБ / с до менш ніж 100 кБ / с.

Я знаю, що SD-карти технічно не відповідають стандартам SPI, але як цю проблему можна виправити?


На це я повинен це шанувати, наскільки я знаю. Можливо, спробуйте іншу SD-карту?
Марко

Це чудове питання. Дякуємо за запитання (і відповіді).
маррагери

Відповіді:


7

Гаразд, я зрозумів це насправді. Я повинен був би поглянути вглиб трохи глибше. Виявляється, що SD-карти не діють точно так, як пристрої SPI при спільному використанні шини відповідно до способу використання MMC / SDC :

У шині SPI кожен підлеглий пристрій вибирається з відокремленими CS-сигналами, а множинні пристрої можуть бути приєднані до шини SPI. Загальний підлеглий пристрій SPI приводить / випускає свій сигнал DO по сигналу CS асинхронно для спільного використання шини SPI.

Однак MMC / SDC приводить / випускає сигнал DO в синхронізації з SCLK. Це означає, що існує можливість конфлікту шини з MMC / SDC та будь-якими іншими веденими SPI, приєднаними до шини SPI. На правому зображенні показано час приводу / вивільнення MMC / SDC (сигнал DO перетягується на 1/2 V куб. См, щоб побачити стан шини). Таким чином, щоб MMC / SDC випустив сигнал DO, головний пристрій повинен відправити байт після знесилення сигналу CS.

SD-карта та FPGA, ймовірно, намагалися вигнати DO і SD-карту втратили, тому вона скинулася. Надіслати додатковий байт, схоже, це виправлено.


Це дозволяє чергувати FPGA і карту, правда? Ви також виявили, що ви можете перерватись під час передачі даних та відновлення? З того, що йдеться про в'яз-чан, виглядає, що це неможливо, але мені було б цікаво дізнатися, чи підтвердили ви це чи не спростували.
krs013

1
Так, це працює, як очікувалося, для чергування між FPGA і SD, але ви не можете перервати передачу між дзвінками на FatFS. Принаймні, я не міг так працювати. Це означає, що ви не можете (наприклад) відповісти на переривання під час запису та читання файлу з датчика за допомогою спільної шини SPI.
Зуофу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.