Una scheda SD in modalità SPI rispetta la selezione chip / selezione slave? Sembra reimpostare nella mia domanda


9

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?


Dovrebbe onorarlo, per quanto ne so. Forse provare una scheda SD diversa?
Marko

Questa è un'ottima domanda Grazie per averlo chiesto (e risposto).
segna

Risposte:


7

Okay, l'ho capito davvero. Avrei dovuto cercare su Google un po 'più a fondo. Si scopre che le schede SD non si comportano esattamente come i dispositivi SPI quando condividono un bus in base a Come utilizzare MMC / SDC :

Nel bus SPI, ciascun dispositivo slave è selezionato con segnali CS separati e dispositivi plurali possono essere collegati a un bus SPI. Il dispositivo slave SPI generico guida / rilascia il suo segnale DO dal segnale CS in modo asincrono per condividere un bus SPI.

Tuttavia, le unità MMC / SDC / rilasciano il segnale DO durante la sincronizzazione con SCLK. Ciò significa che esiste una possibilità di conflitto bus con MMC / SDC e qualsiasi altro slave SPI collegato a un bus SPI. L'immagine a destra mostra i tempi di azionamento / rilascio dell'MMC / SDC (il segnale DO viene tirato a 1/2 V cc per vedere lo stato del bus). Pertanto, per inviare il segnale DO di rilascio MMC / SDC, il dispositivo master deve inviare un byte dopo che il segnale CS è stato riassegnato.

Probabilmente la scheda SD e l'FPGA stavano entrambi tentando di pilotare DO e la scheda SD si è persa, quindi è stata ripristinata. L'invio di un byte aggiuntivo sembra averlo corretto.


Questo ti permette di alternare tra FPGA e scheda, giusto? Hai anche scoperto che potresti interrompere il trasferimento e riprendere i dati? Da quello che dice su elm-chan, sembra che non sia possibile, ma sarei interessato a sapere se l'hai confermato o smentito.
krs013,

1
Sì, funziona come previsto per l'alternanza tra FPGA e SD, ma non è possibile interrompere il trasferimento tra chiamate a FatFS. Almeno non sono riuscito a farlo funzionare. Ciò significa che non è possibile (ad esempio) rispondere a un interrupt durante la scrittura e la lettura di un file da un sensore utilizzando il bus SPI condiviso.
Zuofu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.