Ich habe eine Anwendung, in der ich einen Mikrocontroller (NXP LPC1343 ) habe, der über 16-Bit-SPI mit einem FPGA verbunden ist. Es gibt auch eine SD-Karte mit demselben SPI-Port (MISO / MOSI), jedoch mit einem anderen CS / SS-Pin (beide sind gemäß SPI-Spezifikation aktiv niedrig). Eines der Dinge, die ich tun muss, ist, Daten vom FPGA mit FAT32 in eine Datei auf der SD-Karte zu schreiben , und dies ist die Aufgabe des Mikrocontrollers. Auf dem Mikrocontroller läuft FatFS , das ich selbstständig zuverlässig arbeiten lassen kann.
Da der Mikrocontroller nur wenig RAM hat, kann nur wenig Daten gleichzeitig gepuffert werden. Daher muss das Mikro einen Puffer aus dem FPGA lesen, den SPI-Modus auf 8-Bit ändern und diese Daten dann in das FATFS schreiben. Denken Sie daran, dass zum Konfigurieren der SD-Karte für den SPI-Modus ein Befehl gesendet werden muss, während der SPI-Bus mit 400 kHz ausgeführt wird, und dass eine gewisse Wartezeit erforderlich ist. Daher möchte ich die Initialisierung nur einmal durchführen müssen.
Das Ausführen von Transaktionen auf dem FPGA, selbst wenn CS auf der SD-Karte hoch gehalten wird, scheint die SD-Karte in einen seltsamen Zustand zu versetzen, sodass sie erneut initialisiert werden muss. Dies ist natürlich unerwünscht, da die Initialisierung mehrere Millisekunden dauern kann, um nur etwa 4 kB Daten zu schreiben (wiederum begrenzt durch die geringe RAM-Kapazität meines Mikros). Da ich so schnell wie möglich mehrere Megabyte schreiben muss, reduziert dies die Leistung von etwa 500 kB / s auf weniger als 100 kB / s.
Ich bin mir bewusst, dass SD-Karten technisch nicht vollständig SPI-kompatibel sind, aber wie kann dieses Problem behoben werden?