i2c, SPI e UART a confronto

Spread the love

i2c vs SPI vs UART comparison speed distance complexity
i2c vs SPI vs UART comparison speed distance complexity

I2C, SPI e UART sono protocolli che incontriamo continuamente in questo mondo, ma perché abbiamo bisogno di tutti questi protocolli per interconnettere periferiche esterne? Bene! La risposta è semplice perché ci sono molte esigenze da soddisfare e ogni protocollo ha un ambito ben definito.
In questo articolo faremo un confronto riassuntivo per poter sempre selezionare il protocollo corretto.

UART

L’universal asynchronous receiver transmitter (UART) è un dispositivo hardware per computer per la comunicazione seriale asincrona in cui il formato dei dati e le velocità di trasmissione sono configurabili. Invia i bit di dati uno per uno, dal meno significativo al più significativo, incapsulati dai bit di avvio e di arresto in modo che il canale di comunicazione gestisca una tempistica precisa. Un circuito di pilotaggio esterno all’UART gestisce i livelli dei segnali elettrici.

Velocità

La velocità di trasmissione dati di un’interfaccia UART è simile a quella di un’interfaccia I2C.  Le interfacce UART hanno una velocità dati massima di circa 5 Mbps. C’è anche un overhead del protocollo sotto forma di bit di avvio, arresto e parità.

Interfaccia

  • TxD: trasmissione dati
  • RxD: ricezione dati

La  polarità  dei segnali è +5V per mark o high e 0 V per space o low. Tuttavia, la trasmissione di dati seriali lungo il cavo in un’interfaccia di trasmissione RS232 richiede da −15 a −12V per il mark e da +12 a +15 V per lo space. I line driver vengono utilizzati per convertire i livelli logici richiesti dall’UART in quelli necessari per i pin dell’interfaccia RS232 TD e RD.

TTL  – Transistor-Transistor Logic non è un protocollo. È una tecnologia più vecchia per la logica digitale, ma il nome è spesso usato per riferirsi alla tensione di alimentazione a 5V, di solito riferendosi erroneamente a ciò che dovrebbe essere chiamato UART.

UART wiring one master one slave
UART wiring one master, one slave

Può operare tra dispositivi in ​​3 modi:

  • Simplex = trasmissione dati in una direzione
  • Half-duplex = trasmissione dati in entrambe le direzioni ma non simultaneamente
  • Full-duplex = trasmissione dati in entrambe le direzioni contemporaneamente

Distanza

Un UART può lavorare su lunghe distanze con driver di linea appropriati: da 15 metri (m) per il bus dati seriale RS-232 a 1000m per le interfacce RS-485 o RS-422. La distanza è influenzata anche dalla qualità del cavo e dal baud rate.

Comunicazione

UART communication example
UART communication example
  • La trasmissione UART converte i dati paralleli dal dispositivo principale (ad es. CPU) in forma seriale e li trasmette all’UART ricevente. Quindi riconvertirà i dati seriali in dati paralleli per il dispositivo ricevente.
  • Poiché l’UART non ha orologi, l’UART aggiunge bit di inizio e fine che vengono trasferiti.
  • Questo aiuta l’UART ricevente a sapere quando iniziare a leggere i bit poiché i bit rappresentano l’inizio e la fine del pacchetto di dati. Quando l’UART ricevente rileva un bit di avvio, leggerà i bit alla velocità BAUD.
  • La velocità di trasmissione dei dati UART è chiamata BAUD Rate ed è impostata su 115.200 per impostazione predefinita (la velocità BAUD si basa sulla velocità di trasmissione dei simboli ma è simile alla velocità in bit).

Pacchetto

UART data packet
UART data packet
  • Bit di avvio: la linea di trasmissione dati UART viene generalmente mantenuta a un livello di alta tensione quando non sta trasmettendo dati. L’UART trasmittente tira la linea di trasmissione da alto a basso per un ciclo di clock per avviare il trasferimento dei dati. 
  • Data Frame: contiene i dati effettivi da trasferire. Se viene utilizzato un bit di parità, può essere lungo da 5 bit fino a 8 bit. Il frame di dati può essere lungo 9 bit se non viene utilizzato alcun bit di parità. Nella maggior parte dei casi, i dati vengono prima inviati con il bit meno significativo.
  • Parità: descrive l’uguaglianza o disparità di un numero. Il bit di parità consente all’UART ricevente di dire se dei dati sono cambiati durante la trasmissione. Conta il numero di bit con valore 1 e controlla se il totale è un numero pari o dispari. 
  • Stop Bits: per segnalare la fine del pacchetto dati, l’UART di invio guida la linea di trasmissione dati da una bassa tensione ad un’alta tensione per una durata da 1 a due 2 bit.

Conclusioni

Vantaggi

  • È semplice da usare, ha molti protocolli standard (RS-232, RS-485 o RS-422) e può essere gestito interamente dall’hardware;
  • È ampiamente supportato (tutti i dispositivi con connettore a nove pin possono usarlo);
  • Non è necessario alcun orologio;
  • Lunga distanza;
  • Bit di parità per consentire il controllo degli errori.

Svantaggi

  • Comunicazione con solo due dispositivi;
  • La dimensione del frame di dati è limitata a soli 9 bit;
  • Solo velocità dati fissa (specificata all’inizio).

I2C

2 C  (Inter-Integrated Circuit,  eye-squared-C ) è in alternativa noto come I2C o IIC. È un bus di comunicazione seriale sincrono, multi-master, multi-slave, a commutazione di pacchetto, single-ended. Inventato nel 1982 da Philips Semiconductors. È ampiamente utilizzato per collegare circuiti integrati periferici a bassa velocità a processori e microcontrollori nelle comunicazioni a breve distanza all’interno della scheda. (cit. WiKi)

Velocità

I2C supporta 100 kbps, 400 kbps e 3,4 Mbps. Alcune varianti supportano anche 10 Kbps e 1 Mbps.

ModalitàVelocità
massima
Capacità 
massima
DriveDirezione
Modalità standard (Sm)100 kbit/s400 pFOpen drainBidirezionale
Modalità veloce (Fm)400 kbit/s400 pFOpen drainBidirezionale
Modalità veloce Plus (Fm+)1 Mbit/s550 pFOpen drainBidirezionale
Modalità ad alta velocità (Hs)1.7 Mbit/s400 pFOpen drainBidirezionale
Modalità ad alta velocità (Hs)3.4 Mbit/s100 pFOpen drainBidirezionale
Modalità ultra veloce (UFm)5 Mbit/sPush-pullUnidirezionale

Interfaccia

Come la comunicazione UART, I2C utilizza solo due fili per trasmettere dati tra dispositivi:

  • SDA (Serial Data)  – La linea per il master e lo slave per inviare e ricevere dati.
  • SCL (Serial Clock)  – La linea che trasporta il segnale di clock (segnale di clock comune tra più master e più slave).

I2C è un protocollo di comunicazione seriale, quindi i dati vengono trasferiti bit per bit lungo un unico filo (la linea SDA).

Come SPI, I2C è sincrono, quindi l’uscita dei bit è sincronizzata con il campionamento dei bit da un segnale di clock condiviso tra il master e lo slave. Il master controlla sempre il segnale di clock.

Ci saranno più slave e più master e tutti i master potranno comunicare con tutti gli slave.

i2c data packet
i2c data packet
  • Start:  La linea SDA passa da un livello di alta tensione a un livello di bassa tensione  prima che  la linea SCL passi da un livello alto a basso.
  • Stop:  la linea SDA passa da un livello di bassa tensione a un livello di alta tensione  dopo  che la linea SCL è passata da un livello basso ad alto.
  • Address frame:  una sequenza di 7 o 10 bit univoca per ogni slave identifica lo slave quando il master vuole parlargli.
  • Bit Read/Write:  un singolo bit che specifica se il master sta inviando dati allo slave (livello di bassa tensione) o richiedendo dati da esso (livello di alta tensione).
  • Bit ACK/NACK:  ogni frame in un messaggio è seguito da un bit di acknowledge/no-acknowledge. Se un frame di indirizzo o un frame di dati è stato ricevuto correttamente, un bit ACK viene restituito al mittente dal dispositivo ricevente.

Connessioni dei dispositivi

i2c wiring one master one slave
i2c wiring one master one slave

Poiché I2C utilizza l’indirizzamento, più slave possono essere controllati da un unico master. È possibile collegare/indirizzare fino a 27 dispositivi slave nel circuito di interfaccia I2C. Con un indirizzo a 7 bit sono disponibili 128 (27) indirizzi univoci. L’utilizzo di indirizzi a 10 bit è raro ma fornisce 1.024 (210) indirizzi univoci.

i2c wiring one master multiple slave
i2c wiring one master multiple slaves

È possibile collegare più master a uno o più slave. Il problema con più master nello stesso sistema si verifica quando due master tentano di inviare o ricevere dati contemporaneamente sulla linea SDA. Ogni master deve rilevare se la linea SDA è bassa o alta prima di trasmettere un messaggio per risolvere questo problema. Se la linea SDA è bassa, significa che un altro master ha il controllo del bus e il master deve attendere per inviare il messaggio. Se la linea SDA è alta, è possibile trasmettere il messaggio. Per collegare più master a più slave

i2c wiring multiple master multiple slave
i2c wiring multiple masters multiple slaves

Distanza

La stragrande maggioranza delle applicazioni utilizza I2C nel modo in cui è stato progettato inizialmente: circuiti integrati periferici collegati direttamente a un processore sulla stessa scheda a circuito stampato e quindi su distanze relativamente brevi inferiori a 30 cm (1 piede) senza connettore. Tuttavia, utilizzando un driver diverso, una versione alternativa di I2C può comunicare fino a 20 metri (anche oltre 100 metri) su CAT5 o altri cavi.

Conclusioni

Vantaggi

  • Supporta più master e slave;
  • Pochi fili per più dispositivi .

Svantaggi

  • L’interfaccia I2C è semiduplex;
  • Velocità più lenta in quanto richiede resistori pull-up anziché resistori push-pull utilizzati dallo SPI. Ha anche un design a open-drain = velocità limitata;
  • Più logica sullo stack software per l’indirizzamento.

SPI

La Serial Peripheral Interface (SPI) è una specifica di interfaccia di comunicazione seriale sincrona utilizzata per la comunicazione a breve distanza, principalmente nei sistemi embedded. I dispositivi SPI comunicano in modalità full duplex utilizzando un’architettura master-slave con un unico master. Il dispositivo master origina il frame per la lettura e la scrittura. Più dispositivi slave sono supportati attraverso la selezione con singole linee di selezione slave (SS), a volte chiamate chip select (CS).

Velocità

Il limite massimo di velocità dati non è specificato nell’interfaccia SPI. Solitamente supporta circa da 10Mbps a 20Mbps.

Non esiste un insieme standard di velocità definito per il protocollo SPI. Le velocità tipiche del bus sono nella gamma di 50MHz. Poiché non vi è alcun overhead aggiunto dal protocollo, come l’indirizzamento e il controllo del flusso, il throughput che può essere ottenuto utilizzando SPI rispecchia la frequenza di clock. Per una linea SPI a 50MHz, il throughput è di 50Mbps. Un’altra cosa da ricordare è che la comunicazione è full-duplex. Quindi, il throughput effettivo nel caso menzionato può arrivare fino a 100 Mbps (se sia il master che lo slave possono scambiarsi dati significativi).

Interfaccia

Il bus SPI specifica quattro segnali logici:

  • SCLK: Orologio seriale (uscita dal master)
  • MOSI: Master Out Slave In (uscita dati dal master)
  • MISO: Master In Slave Out (uscita dati da slave)
  • SS: Slave Select (spesso attivo basso, uscita dal master)

Slave Select ha la stessa funzionalità di chip select e viene utilizzato al posto di un concetto di indirizzamento. MOSI su un master si collega a MOSI su uno slave. MISO su un master si collega a MISO su uno slave.

Nota: su un dispositivo solo slave, MOSI può essere etichettato come SDI (Serial Data In) e MISO può essere etichettato come SDO (Serial Data Out)

I nomi dei segnali sopra riportati possono essere utilizzati per etichettare in modo inequivocabile sia i pin del dispositivo master e slave, sia le linee di segnale tra di essi e sono i più comuni nei prodotti moderni. I nomi dei pin sono sempre in maiuscolo, ad esempio “Slave Select”, non “slave select”.

I prodotti più vecchi possono avere nomi di pin SPI non standard:

  • Orologio seriale:
    • SCK
  • Uscita Master → Ingresso Slave (MOSI):
    • SIMO, MTSR – corrispondono a MOSI su entrambi i dispositivi master e slave, si connettono tra loro
    • SDI, DI, DIN, SI – su dispositivi slave; si collega a MOSI sul master o alle connessioni inferiori
    • SDO, DO, DOUT, SO – su dispositivi master; si collega a MOSI su connessioni slave o superiori
  • Ingresso Master ← Uscita Slave (MISO):
    • SOMI, MRST – corrispondono a MISO su entrambi i dispositivi master e slave, si connettono tra loro
    • SDO, DO, DOUT, SO – su dispositivi slave; si collega a MISO sul master o alle connessioni inferiori
    • SDI, DI, DIN, SI – su dispositivi master; connettersi a MISO su connessioni slave o superiori
  • Slave Seleziona:
    • SS, SS, SSEL, nSS, /SS, SS# (selezione slave)
    • CS, CS (selezione chip)
    • CSN (seleziona/abilita chip)
    • CE (abilitazione chip)

Ogni azienda o produttore ha i propri protocolli specifici per comunicare con le periferiche. Quindi è necessario leggere il datasheet per conoscere il protocollo di lettura/scrittura per la comunicazione SPI da stabilire. Ad esempio, se vogliamo comunicare con SPI tra il microcontrollore e la EPROM. Qui è necessario esaminare il diagramma operativo di lettura/scrittura nel foglio dati EPROM.

Comunicazione

SPI wiring one master one slave
SPI wiring one master, one slave

Ogni slave richiede un segnale di abilitazione separato in un sistema multi-slave, che è leggermente più complicato sull’hardware rispetto al sistema I2C.

SPI wiring one master multiple slave
SPI wiring one master multiple slaves

L’interfaccia SPI è in realtà costituita da due semplici shift registers nell’hardware interno. Viene trasmesso bit per bit sotto il segnale di abilitazione slave e lo shift pulse generato dal dispositivo master. I dati trasmessi sono 8 bit. Il bit alto è nella parte anteriore e il bit basso è nella parte posteriore.

L’interfaccia SPI è una trasmissione seriale sincrona di dati tra la CPU e il dispositivo periferico a bassa velocità. Sotto lo shift pulse del dispositivo master, i dati vengono trasmessi bit per bit. Il bit alto è nella parte anteriore e il bit basso è nella parte posteriore. È una comunicazione full-duplex e la velocità di trasmissione dei dati è complessivamente più veloce del bus I2C che può raggiungere velocità di pochi Mbps.

Distanza

Sebbene il metodo di comunicazione SPI sia generalmente adatto a distanze fino a circa 10m può coprire distanze maggiori, spesso è necessario un ripetitore a causa dell’attenuazione dovuta alla maggiore resistenza di linea dei cavi lunghi.

Conclusioni

Vantaggi

  • È semplice da gestire senza uno stack software complesso per l’indirizzamento;
  • No, bit di avvio e di arresto, a differenza di UART, il che significa che i dati possono essere trasmessi continuamente senza interruzioni
  • Comunicazione full duplex, più veloce;
  • SPI utilizza push-pull e quindi sono possibili velocità di trasmissione dati più elevate e intervalli più lunghi;
  • SPI utilizza meno energia rispetto a I2C .

Svantaggi

  • All’aumentare del numero di slave, aumenta il numero di linee CS, ciò si traduce in una complessità hardware poiché aumenterà il numero di pin richiesti;
  • Molti slave significano molti cavi;
  • Non è specificato alcun controllo del flusso e nessun meccanismo di acknowledgment se i dati sono stati ricevuti, a differenza di I2C;
  • Nessuna forma di controllo degli errori, a differenza dell’UART (usando il bit di parità);
  • Breve distanza.

Tavola di comparazione

UARTI2CSPI
Nome completoUniversal Asynchronous Receiver-TransmitterInter-Integrated CircuitSerial Peripheral Interface
ComplessitàMolto bassaBassa anche con molti dispositiviCablaggio e gestione complessi con molti dispositivi
Num. min. di cavi224
DuplexFull-duplexHalf-duplexFull-Duplex
Tipo di comunicazioneAsincronaSincronaSincrona
Numero di slave1128 con indirizzo predefinito a 7 bit. 
Per impostazione predefinita, è possibile collegare/indirizzare fino a 27 dispositivi slave nel circuito di interfaccia I2C.
Limitato dai pin SS disponibili
Numero di masterNon applicabileUno o più1
Distanza da 15 a 1000mda 20 a 100mpiù di 10m
Velocitàvelocità dati massima di circa 5Mbpsvelocità dati massima da 3,4Mbps a 5Mbpsvelocità dati massima predefinita di circa 50Mbps ma con condizioni particolari 100Mbps

Conclusione

Per me, non c’è un vincitore e tutti i protocolli hanno la loro utilità. UART può essere utilizzato per lunghe distanze e quando si desidera una semplice implementazione del protocollo. i2c può essere utilizzato per collegare molti dispositivi a bassa velocità con semplici connessioni hardware. SPI può essere utilizzato con alcuni dispositivi ad alta velocità.

Grazie


Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *