У мене є додаток, де у мене є мікроконтролер (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, але як цю проблему можна виправити?