Ho un'applicazione in cui ho un microcontrollore (NXP LPC1343 ) che è collegato a un FPGA tramite SPI a 16 bit. Esiste anche una scheda SD che utilizza la stessa porta SPI (MISO / MOSI) ma con un pin CS / SS diverso (entrambi sono attivi bassi, come da specifica SPI). Una delle cose che devo fare è scrivere i dati dall'FPGA su un file sulla scheda SD usando FAT32 , e questo è il lavoro del microcontrollore. Il microcontrollore esegue FatFS , che devo far funzionare in modo affidabile da solo.
Poiché il microcontrollore ha solo una piccola quantità di RAM, è possibile bufferizzare solo una piccola quantità di dati alla volta. Quindi, il micro deve leggere un buffer dall'FPGA, cambiare la modalità SPI a 8 bit e quindi scrivere quei dati nel FATFS. Ricordiamo che per configurare la scheda SD per la modalità SPI, è necessario inviare un comando mentre il bus SPI è in esecuzione a 400 kHz e deve verificarsi una certa quantità di attesa. Pertanto, vorrei eseguire l'inizializzazione solo una volta.
Tuttavia, eseguire transazioni sull'FPGA anche se si tiene alto il CS sulla scheda SD sembra mettere la scheda SD in uno stato strano tale che deve passare di nuovo attraverso l'inizializzazione. Questo ovviamente non è desiderabile, poiché l'inizializzazione può richiedere diversi millisecondi, per poter scrivere solo 4 kB di dati (ancora una volta limitata dalla piccola capacità RAM del mio micro). Poiché devo scrivere diversi megabyte il più rapidamente possibile, ciò riduce le prestazioni da circa 500 kB / sa meno di 100 kB / s.
Sono consapevole che le schede SD non sono tecnicamente completamente conformi SPI, ma come si può risolvere questo problema?