SPI Debug con l’oscilloscopio digitale

Il bus SPI (Serial Peripheral Interface) fu originariamente sviluppato da Motorola verso la fine del 1980 per la sua serie 68000 di microcontrollori. Grazie alla semplicità e popolarità del bus, molti altri produttori hanno adottato lo standard nel corso degli anni. SPI è principalmente utilizzato tra i microcontrollori e i loro diretti dispostivi periferici. Infatti si trova comunemente nei telefoni cellulari, nei PDA, e in altri dispositivi mobili per comunicare i dati tra la CPU, la tastiera, il display e i chip di memoria.

SPI: come funziona

Il bus SPI è un bus di comunicazione seriale a quattro fili master/slave. I quattro segnali sono clock (SCLK), output master/input slave (MOSI), input master/output slave (MISO) e select slave (SS). Ogni volta che due dispositivi comunicano, uno si identifica come master e l’altro come slave. Il master guida il clock seriale. I dati vengono simultaneamente trasmessi e ricevuti, rendendolo un protocollo full-duplex.

Piuttosto che avere indirizzi unici per ogni dispositivo sul bus, SPI usa la linea SS per specificare quale dato viene trasferito verso o dal dispositivo. Quindi, ogni dispositivo sul bus necessita il suo proprio segnale SS dal master. Se ci sono tre dispositivi slave, allora esistono tre guide SS provenienti dal master, una per ogni slave, come mostrato in figura.

Ogni slave comunica solo con il master. Tuttavia, SPI può essere collegato con i dispositivi slave daisy-chained (connessi in catena), con ognuno che svolge un’operazione a turno e poi invia i risultati al master, come mostrato in figura.

Quindi, come si può vedere, non c’è uno standard per l’implementazione SPI. In alcuni casi, quando la comunicazione dallo slave al master non è richiesta, il segnale MISO può essere escluso totalmente.

Quando si verifica un trasferimento di dati SPI, un dato a 8 bit viene spostato su MOSI, mentre un differente dato a 8 bit viene spostato su MISO. Questo può essere visto come un registro di scorrimento (shift register) circolare a 16 bit. Quando si verifica un trasferimento, il registro a 16 bit viene spostato di otto posizioni, così da scambiare il dato a 8 bit tra il dispositivo master e lo slave. Una coppia di registri, CPOL (clock polarity) e CPHA (clock phase) determina i limiti del clock sul quale viene portato il dato. Ogni registro ha due stati possibili che permettono quattro combinazioni, ognuna delle quali è compatibile con l’altra.

Quindi, una coppia master/slave deve usare gli stessi valori di parametro per comunicare. Se vengono utilizzati slave multipli che sono fissi in differenti configurazioni, il master dovrà riconfigurarsi ogni volta che necessita di comunicare con un differente slave.

Debuggare l'SPI utilizzando l'Oscilloscopio Digitale

Il modulo applicativo DPOxEMBD Serial Triggering and Analysis o l’applicazione SR-EMBD attiva la decodifica e il triggering del bus SPI. Utilizzando i tasti del pannello frontale del bus, è possibile definire un bus SPI semplicemente inserendo i parametri base del bus, includendo quali canali SCLK, SS, MOSI e MISO sono attivi, le thresholds (soglie) e le polarità. Vedi figura.

Come esempio, si può prendere in considerazione il sistema embedded in figura.

Un bus SPI è connesso al sintetizzatore, un DAC, e a qualche I/O. Il sintetizzatore è collegato ad un VCO che fornisce un clock da 2.5 GHz al resto del sistema.

Il sintetizzatore dovrebbe essere programmato dalla CPU all’avvio. Tuttavia, qualcosa sembra non funzionare correttamente perché il VCO è bloccato sul suo rail e genera 3 GHz. Il primo passo per risolvere il problema consiste nell’ispezionare i segnali tra la CPU e il sintetizzatore per assicurarsi che i segnali siano presenti e che non ci siano problemi di connessione fisica.

Se non viene trovato alcunché di anomalo, il passo successivo è quello di dare un’occhiata alle informazioni che vengono trasmesse attraverso il bus SPI per programmare il sintetizzatore. Per ottenere l’informazione, bisogna configurare l’oscilloscopio per fare in modo che il segnale SS del sintetizzatore si attivi e alimenti il DUT per acquisire i comandi di programmazione dell’avvio.

L’acquisizione viene mostrata in figura

Channel 1 (giallo) è SCLK, Channel 2 (ciano) è MOSI e Channel 3 (magenta) è SS. Per cercare di determinare se si sta programmando correttamente il dispositivo, è opprotuno dare un’occhiata al foglio di dati per il sintetizzatore. I primi tre messaggi sul bus dovrebbero inizializzare il sintetizzatore, caricare il divider ratio e prendere i dati. Secondo la specifiche, l’ultima parte (un singolo carattere esadecimale) nei primi tre transfer dovrebbe essere, rispettivamente, 3, 0 e 1, ma si vedono invece 0, 0 e 0. In questo esempio è stato utilizzato un semplice trigger SS Active; la piena capacità di triggering di SPI nella serie MSO/DPO include i seguenti tipi:

- SS Active: si attiva quando la linea SS diventa valida per un dispositivo slave

- MOSI: innesca fino a 16 byte di dati specificati dell’utente dal master allo slave

- MISO: innesca fino a 16 byte di dati specificati dell’utente dallo slave al master

- MOSI/MISO: innesca fino a 16 byte di dati specificati dell’utente dallo slave al master e viceversa

Questi triggers servono quindi per vedere istantaneamente il contenuto di ogni messaggio trasmesso attraverso il bus in un’acquisizione. Dopo aver visto tutti gli 0 alla fine dei messaggi, si capisce come l’errore sia dovuto alla programmazione dei bit, in ogni parola da 24 bit, in ordine inverso nel software. Una rapida modifica nel software comporta la seguente acquisizione e così il VCO viene correttamente bloccato a 2.5 GHz, come mostrato in figura.


L'articolo è tratto da Debugging Serial Buses in Embedded System Designs di Gina Bonini Technical Marketing Manager @Tektronix.

Oscilloscopio digitale Tektronix MSO2024

L'oscilloscopio Tektronix (4 canali, display TFT color, 200Mhz di banda e campionamento a 1Gsps) è disponibile subito qui nello store.

 

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend