SPI – Interfaccia Serial Peripheral (SPI)
Oggi parliamo di SPI, una delle interfacce di comunicazione più usate nel mondo dell’elettronica per far “parlare” microcontrollori e periferiche. Se ti sei mai chiesto come un microcontrollore comunica con sensori, memorie o altri dispositivi, SPI è spesso la risposta. In questo post vedremo in dettaglio cos’è SPI, come funziona, e ti farò vedere esempi concreti per chiarire ogni dubbio.
Cos’è SPI?
SPI sta per Serial Peripheral Interface. È un protocollo di comunicazione seriale sincrona, il che significa che i dati vengono trasferiti un bit alla volta, sincronizzati da un segnale di clock. A differenza di altri protocolli come UART o I2C, SPI permette una comunicazione full-duplex, cioè puoi inviare e ricevere dati contemporaneamente.
Come funziona SPI?
SPI usa tipicamente 4 linee:
- MOSI (Master Out Slave In): dati inviati dal master allo slave
- MISO (Master In Slave Out): dati inviati dallo slave al master
- SCLK (Serial Clock): il segnale di clock generato dal master per sincronizzare la comunicazione
- SS (Slave Select): linea che il master usa per selezionare quale dispositivo slave sta comunicando
Immagina che il master sia il microcontrollore e lo slave sia un sensore di temperatura. Quando il microcontrollore vuole leggere la temperatura, attiva la linea SS del sensore (porta SS a basso), genera il clock su SCLK e manda il comando sul MOSI. Nel frattempo, il sensore risponde con i dati sul MISO sincronizzati dal clock.
Dettagli tecnici del protocollo SPI
Un punto importante è che ogni dispositivo slave ha la sua linea SS, così il master può scegliere chi parlare. Se non gestisci bene la linea SS, potresti far confusione tra i dispositivi e ricevere dati sbagliati.
Modalità SPI: polarità e fase del clock
SPI ha 4 modalità definite da due parametri: CPOL (Clock Polarity) e CPHA (Clock Phase). Questi determinano quando vengono campionati i dati rispetto al fronte del clock. Se ti sei mai trovato in difficoltà a far comunicare due dispositivi SPI, probabilmente è colpa della mancata corrispondenza tra CPOL e CPHA.
- CPOL = 0 o 1 indica se il clock è basso o alto a riposo
- CPHA = 0 o 1 indica se i dati vengono campionati sul fronte di salita o discesa del clock
Di solito il microcontrollore ti permette di configurare queste modalità. Devi solo accertarti che slave e master usino la stessa.
Esempio pratico di comunicazione SPI
Ti faccio un esempio pratico usando Arduino come master e un modulo sensore esterno come slave:
- Porta SS a basso per selezionare il sensore
- Invio del comando di lettura temperatura su MOSI
- Generazione del clock su SCLK per sincronizzare lo scambio
- Ricezione dati di temperatura su MISO
- Porta SS a alto per terminare la comunicazione
Nel codice Arduino, potresti usare la libreria SPI.h che gestisce tutto questo in modo semplice, ma dietro le quinte queste linee fisiche e protocolli fanno il lavoro vero.
Un’ultima cosa: SPI è molto veloce rispetto a I2C perché non usa indirizzi o meccanismi di arbitraggio, ma proprio per questo devi controllare le linee SS attentamente se hai più dispositivi.
Domani vedremo come SPI si confronta con altri protocolli come I2C e UART, e quando conviene usarlo. Inoltre, parleremo di come collegare più dispositivi SPI usando demultiplexer e come gestire problemi di interferenza nel bus.