SPI – Interfaccia Serial Peripheral (SPI)

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

SPI – Interfaccia Serial Peripheral (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:

  1. Porta SS a basso per selezionare il sensore
  2. Invio del comando di lettura temperatura su MOSI
  3. Generazione del clock su SCLK per sincronizzare lo scambio
  4. Ricezione dati di temperatura su MISO
  5. 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.