Perché e come utilizzare la SPI per semplificare le connessioni tra più dispositivi
Contributo di Editori nordamericani di DigiKey
2019-02-14
I sistemi integrati utilizzano uno o più processori o microcontroller per eseguire operazioni specializzate all'interno di un sistema più complesso. Questi controller integrati devono comunicare con altri componenti di un sistema, con sensori e anche con altri controller. Anche se le interfacce e i protocolli seriali sono molto diffusi, la loro programmazione e la risoluzione dei loro problemi può rivelarsi un compito alquanto arduo, specie se il numero di dispositivi con cui comunicare è esiguo.
I progettisti hanno bisogno di microcontroller, periferiche e sensori con un'interfaccia digitale semplice tra due dispositivi, in grado di gestire dati di lunghezza arbitraria ad alta velocità. Inoltre vorrebbero eliminare le attività di programmazione più complesse relative al protocollo.
La soluzione più semplice consiste nello scegliere controller con un'interfaccia periferica seriale (SPI) per interfacciarli con dei circuiti integrati o con sensori periferici locali. Si tratta di una interfaccia sincrona semplice che utilizza l'indirizzamento hardware e opera a una velocità di clock fino a 50 MHz. La SPI non utilizza un protocollo complesso che richiede la verifica dell'indirizzamento e dello stato. È un'interfaccia di base per il trasferimento rapido dei dati senza il sovraccarico di programmazione di un bus di interfaccia più sofisticato.
Questo articolo illustrerà i principi base dell'interfaccia SPI e le numerose modalità operative. Presenterà quindi microcontroller e altri dispositivi dotati di un'interfaccia SPI e mostrerà come applicarla.
Cos'è la SPI?
La SPI è stata sviluppata da Motorola (ora parte di NXP Semiconductors) intorno al 1985. È un'interfaccia seriale sincrona studiata per comunicazioni su distanze brevi tra dispositivi. Da allora, è diventata uno standard di fatto utilizzato da molti produttori di semiconduttori, specie nei microprocessori e nei microcontroller.
La ragione della popolarità della SPI sta nei suoi numerosi vantaggi. In primo luogo è un'interfaccia hardware semplice che offre una flessibilità completa per il numero di bit trasferiti. Utilizza un modello master-slave con un solo master e può gestire più dispositivi slave utilizzando comunicazioni full-duplex che operano a velocità di clock fino a 50 MHz. Non utilizza un protocollo standard e trasferisce solo pacchetti di dati, quindi è ideale per il trasferimento di lunghi flussi di dati.
La SPI utilizza un massimo di quattro linee di segnale (Figura 1). Il dispositivo master, di solito un processore o un controller, fornisce e controlla le linee di clock (SCK) e chip-select (CS). L'operazione multiplex viene gestita dalle linee dati Master Out Slave In (MOSI) e Master In Slave Out (MISO). In una semplice configurazione a master e slave singoli, si può eliminare la linea chip-select e forzare l'ingresso CS allo slave sulla condizione logica abilitata. Se il dispositivo slave può solo inviare dati (comunicazione half-duplex), si può eliminare anche la linea MOSI, il che permette di ridurre ulteriormente il numero dei segnali. I dati sono sincronizzati dal segnale di clock in modo tale che il loro trasferimento assomigli a un registro a scorrimento con lo spostamento di un bit per ogni clock.
Figura 1: La connessione full-duplex di una SPI di base utilizza due linee dati (MOSI, MISO), una linea di clock (SCK) e una linea chip-select (CS). La MOSI su uno slave è talvolta etichettata come Slave Data In (SDI). La MISO può essere etichettata come Slave Data Out (SDO). (Immagine per gentile concessione di DigiKey)
Per la gestione di più dispositivi slave esistono due approcci (Figura 2).
Figura 2: Due configurazioni per gestire l'interfacciamento multi-slave. Il collegamento diretto richiede un chip-select per ogni slave. La connessione in serie utilizza un singolo chip-select e combina tutti i dati su un'unica riga. (Immagine per gentile concessione di DigiKey)
Il collegamento diretto utilizza una linea chip-select per ogni dispositivo slave. La maggior parte dei microprocessori ha tre o quattro linee chip-select. Questo limita il numero massimo di slave al numero di linee chip-select. Nella maggior parte dei casi la cosa non rappresenta un problema, ma se un progetto richiede più dispositivi sul bus, alcuni possono essere configurati con un collegamento in serie. In questo caso viene utilizzato un chip-select comune per più dispositivi slave e i dati vengono trasmessi in streaming su una linea dati comune. Anche qui, usando il modello dei dispositivi slave SPI come registro a scorrimento, i dati provenienti dagli slave si propagano in un flusso multiplato seriale.
Modalità di clock della SPI
Il master controlla e genera il clock. I due attributi di clock sono la polarità del clock (CPOL) e la fase del clock (CPHA). Controllano il margine di clock attivo in cui il dispositivo slave viene sincronizzato rispetto ai dati. Con CPOL = 0 il clock viene impostato sullo stato inattivo con logica 0. Con CPOL = 1 il clock si porta su inattivo con logica 1. Con CPHA = 0 i dati vengono sincronizzati sul fronte di salita, mentre con CPHA = 1 vengono sincronizzati sul fronte di discesa (Figura 3).
Figura 3: La selezione della modalità di clock della SPI stabilisce il margine di clock attivo su cui vengono campionati i dati. (Immagine per gentile concessione di DigiKey)
Le impostazioni delle linee CPOL e CPHA nel master determinano la polarità del clock e il fronte attivo per il clock dei dati. La Modalità 1 è quella più utilizzata, ma anche le altre tre sono accessibili al progettista.
Le tre componenti di segnale di un trasferimento SPI possono essere osservate su un oscilloscopio (Figura 4). In questo esempio, vengono trasferiti pacchetti di dati a otto bit. Per osservare il trasferimento viene utilizzato l'oscilloscopio HDO4104A di Teledyne LeCroy con l'opzione di decodifica seriale SPI.
Figura 4: Esempio di un interscambio SPI visto su un oscilloscopio HDO4104A di Teledyne LeCroy con un'opzione di decodifica seriale. Le forme d'onda sono le seguenti: la traccia superiore è la linea dei dati, la traccia media è il clock e la traccia inferiore è il chip-select. La sovrapposizione blu sulla traccia dei dati mostra il contenuto decodificato in esadecimale. (Immagine per gentile concessione di DigiKey)
Il clock della Modalità 1 è costituito da gruppi di otto impulsi con inattivo impostato su 0 (CPOL = 0) e i dati vengono sincronizzati sul fronte di discesa (CPHA = 1). L'oscilloscopio utilizzato in questo esempio ha un'opzione di decodifica seriale che decodifica il contenuto dei dati. Il contenuto dei dati viene letto in esadecimale nella sovrapposizione blu sulla traccia dei dati. La decodifica è associata solo ai dati prodotti mentre viene asserita la linea chip-select (livello 0). I burst di clock sono in tutto diciassette, ma solo cinque di essi corrispondono a stati chip-select attivi.
La tabella sotto le griglie di visualizzazione della forma d'onda riporta il contenuto dei dati attivi, il tempo del trigger dell'oscilloscopio per ogni pacchetto e la frequenza di clock misurata, che in questo caso è di 100 kbit/s. Il numero di cicli di clock in ciascun burst determina il numero di bit di dati sincronizzati fuori dal dispositivo slave.
Scelte delle interfacce I/O del microprocessore
ATtiny816-MNR di Microchip Technology è tipica di molti microcontroller in quanto supporta diverse interfacce I/O (Figura 5). Questo particolare controller utilizza l'architettura RISC AVR® ad alte prestazioni e basso consumo e può funzionare fino a 20 MHz. È supportato da un massimo di 4 o 8 kB di flash, 256 o 512 byte di SRAM e 128 byte di EEPROM, il tutto in un contenitore a 20 pin.
Figura 5: Un diagramma a blocchi del microcontroller ATtiny816 di Microchip Technology evidenzia le porte I/O. Questo controller include sia una porta SPI che una porta USART, quest'ultima configurabile come una seconda SPI. (Immagine per gentile concessione di Microchip Technology)
Sul lato di interfaccia, il microcontroller include un ricetrasmettitore sincrono e asincrono universale (USART), un'interfaccia a due fili (TWI) compatibile I2C e la SPI. USART può essere configurato come una seconda porta SPI.
La SPI consente la comunicazione full-duplex tra un dispositivo AVR e i dispositivi periferici o tra diversi microcontroller. La periferica SPI può essere configurata come master o slave, consentendo la comunicazione tra i microcontroller.
Sensori basati su SPI
A complemento dell'elevato numero di microprocessori e microcontroller dotati di SPI esistono moltissimi sensori che forniscono dati digitali tramite SPI. Ad esempio, TC77-3.3MCTTR di Microchip Technology è un sensore di temperatura digitale accessibile come componente di serie con fattore di forma compatto, studiato per applicazioni a basso costo. TC77 copre un intervallo di temperatura da -55 °C a +125 °C. Funziona con un'alimentazione compresa tra 2,7 e 5,5 V, assorbe 250 μA quando è in funzione e dispone di una modalità di spegnimento a basso consumo che assorbe 1 μA.
In un'applicazione tipica, il sensore di temperatura si collega al processore tramite una connessione SPI standard. I suoi dati di temperatura sono formattati come una parola digitale a 13 bit, come mostrato nella Figura 6.
Figura 6: TC77 di Microchip Technology è un sensore di temperatura facile da utilizzare, piccolo ed economico. Può essere collegato rapidamente a un controller o a un processore, trasferendo le letture della temperatura come parole digitali a 13 bit. Come mostrato nello schema di temporizzazione, la comunicazione viene avviata asserendo la linea CS su uno 0 logico. (Immagine per gentile concessione di Microchip Technology)
La figura mostra uno schema di temporizzazione di un'operazione di lettura del registro di temperatura del T77. La comunicazione viene avviata asserendo la linea CS e portandola a uno 0 logico. Il sensore trasmette il primo bit di dati. Il microcontroller legge i dati sul fronte di salita di SCK. Quindi, viene utilizzato il fronte di discesa di SCK per sincronizzare il resto dei dati dal sensore. Questo è un trasferimento in Modalità 1 come visto nell'esempio precedente, ma con una parola dati più lunga.
Estendere la portata della SPI
Oltre a includere la SPI in molti microprocessori e microcontroller, diversi produttori di circuiti integrati hanno potenziato la funzionalità del bus. Un buon esempio è rappresentato dall'interfaccia di comunicazioni isolata isoSPI LTC6820 di Analog Devices. Questo circuito integrato fornisce isolamento galvanico tra due dispositivi SPI che comunicano su una singola connessione a doppino intrecciato utilizzando la segnalazione differenziale (Figura 7). Questa modalità di segnalazione estende l'intervallo utilizzabile dell'interfaccia SPI di LTC6820 fino a 100 metri, anche se a una velocità di clock ridotta rispetto alla velocità nominale di 1 Mbit/s su una distanza di 10 m.
Figura 7: Una coppia di isolatori LTC6820 fornisce l'isolamento galvanico tra due dispositivi SPI. Il circuito integrato supporta trasferimenti di dati fino a 1 Mbit/s a distanze fino a 10 m e a frequenze di clock ridotte per distanze fino a 100 m. (Immagine per gentile concessione di Analog Devices)
L'isolamento è fornito da trasformatori di impulsi, una tecnica che viene spesso utilizzata nelle applicazioni di reti industriali e per la lettura di sensori remoti.
Conclusione
La SPI risolve la necessità di un'interfaccia semplice, economica e con pochi costi fissi nelle applicazioni in cui la sorgente può essere descritta come un flusso di dati. Evita di dover leggere e scrivere i dati nelle posizioni indirizzate ed è pertanto ideale per gestire le comunicazioni da un dispositivo all'altro tra microcontroller e sensori, digitalizzatori, dispositivi di elaborazione dei segnali digitali e altri processori.

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.