Protocolli di comunicazione su SBC: UART, I2C, SPI

protocollo uart i2c spi

Nell’articolo di oggi spiegheremo quali siano e come funzionino i protocolli di comunicazione seriale UART, I2C e SPI per Arduino e Raspberry PI.

Quando si comunica con una scheda microcontrollore come un Arduino UNO, i pin digitali e analogici non saranno sempre sufficienti per tutti i progetti. Per utilizzare le periferiche di bordo per molti altri progetti avanzati saranno necessari protocolli e collegamenti specializzati. I protocolli di comunicazione più comuni su un Arduino sono UART, I2C e SPI: si tratta in tutti e tre i casi di protocolli di comunicazione seriale.

La comunicazione seriale è un metodo di comunicazione utilizzato nelle telecomunicazioni. In questo protocollo i dati vengono trasmessi un bit alla volta in ordine sequenziale su di un canale di comunicazione. La comunicazione parallela, al contrario, rappresenta un protocollo di comunicazione in cui più bit di dati vengono trasmessi contemporaneamente (“in parallelo”) su di un canale di comunicazione (bus).

La trasamissione con protocollo seriale è di solito più semplice da implementare e da gestire rispetto alla parallela, meno suscettibile alle interferenze e più economica da realizzare.

UART

UART è l’acronimo di Universal Asynchronous Receiver / Transmitter. Supporta la trasmissione seriale di dati bidirezionale, ed è asincrona.

La comunicazione si dice asincrona quando non dipende da un segnale di clock sincronizzato tra i due dispositivi che comunicano insieme. Il sistema UART funziona in full-duplex: ciò significa che i dati possono essere trasmessi e ricevuti contemporaneamente da entrambi i lati della comunicazione. Utilizza 2 linee dati chiamate TX (per la trasmissione) ed RX (per la ricezione) e una linea di terra per discriminare il segnale digitale e consentire la comunicazione.

Lo schema di collegamento hardware è rappresentato di seguito.

Protoicollo uart i2c spi

I2C

I2C (o I2C, i IIC) sta per Inter Integrated Circuit. È un bus seriale bidirezionale semplice a due fili, in cui le connessioni vengono utilizzate per trasmettere informazioni tra dispositivi collegati al bus. Il classico bus I²C è composto da almeno un master ed uno slave, ma la situazione più frequente vede un singolo master e più slave. I2C consente di collegare fino a 128 dispositivi su di una sola scheda madre.

Il protocollo hardware dell’I2C richiede due linee seriali di comunicazione:

  • SDA (Serial DAta) per i dati
  • SCL (Serial CLock) per il clock (per la presenza di questo segnale l’I2C è un bus sincrono)

Va aggiunta una connessione di riferimento detta, talvolta impropriamente, GND e una linea di alimentazione Vdd a cui sono connessi i resistori di pull-up.

Lo schema di collegamento hardware è il seguente.

Protocollo uart i2c spi
Connessione master/slave con resistori di pull-up

SPI

Anche il Serial Peripheral Interface o SPI presenta un sistema di comunicazione seriale, sincrono e full-duplex tra un microcontrollore e altri circuiti integrati o tra più microcontrollori.

Rispetto a UART e I2C, esso è il protocollo di comunicazione più veloce con 8 Mb o più dati velocità di trasmissione. In genere è più veloce grazie al suo protocollo semplice.

Le linee di dati / clock sono condivise tra i dispositivi e ogni dispositivo richiederà un indirizzo univoco.

Il protocollo si basa su 4 segnali (si riportano i nomi dei segnali che possono variare a seconda del costruttore. Consultare il datasheet del componente che si intende utilizzare in caso di dubbi):

  • SCLK – SCK: Serial Clock (emesso dal master)
  • SDI – MISO – SOMI – DI – SO: Serial Data Input, Master Input Slave Output (ingresso per il master ed uscita per lo slave)
  • SDO – MOSI – SIMO – DO – SI: Serial Data Output, Master Output Slave Input (uscita dal master)
  • CS – SS – nCS – nSS – STE: Chip Select, Slave Select, emesso dal master per scegliere con quale dispositivo slave vuole comunicare

Di questi il Chip Select (CS o SS) non è indispensabile in tutte le applicazioni.

La trasmissione dei dati sul bus SPI si basa sul funzionamento dei registri a scorrimento (shift register). Ogni dispositivo, sia master che slave, è dotato di un registro a scorrimento interno i cui bit vengono emessi e, contemporaneamente, immessi, rispettivamente, tramite l’uscita SDO/MOSI e l’ingresso SDI/MISO. Il registro usualmente ha la dimensione di 8 bit.

Il registro a scorrimento è un’interfaccia completa mediante la quale vengono impartiti comandi e trasmessi dati che arrivano in modo seriale ma che internamente sono prelevati, a fine trasmissione, in modo parallelo.

Lo schema di collegamento hardware è il seguente.

protocollo uart i2c spi
Connessione 1 Master – 3 Slaves

UART vs I2C vs SPI

Ora che abbiamo capito con cosa abbiamo a che fare, mettiamo a confronto i diversi metodi:

UARTI2CSPI
ComplessitàSempliceSemplice per connettere molti devicesComplessità crescente con il numero di devices collegati
VelocitàMinimaMaggiore rispetto a UARTMassima
Numero di devices2sino a 128Molti
Numero minimo di connettori224
Funzionalità DuplexFull-duplexHalf-duplexFull-Duplex
Distanza supportataMassimaMinore rispetto a UARTMinore rispetto a I2C

Appare evidente come la scelta di un protocollo rispetto ad un altro si basa principalmente sull’effetto desiderato: velocità di trasmissione, quanità di dati, complessità del circuito. Per fare un esempio, una connessione I2C consente di pilotare agevolmente un display OLED, Ma se desideriamo implementare un videogame a bassa latenza su un monitor TFT da 2.8″ ci converrà utilizzare un collegamento SPI.

Nei prossimi giorni presenteremo un articolo relativo ad entrambe le possibilità.

Link utili

Seguici per non perdere le prossime novità!

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.