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.
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
- 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
- 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
I 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 | Drive | Direzione |
---|---|---|---|---|
Modalità standard (Sm) | 100 kbit/s | 400 pF | Open drain | Bidirezionale |
Modalità veloce (Fm) | 400 kbit/s | 400 pF | Open drain | Bidirezionale |
Modalità veloce Plus (Fm+) | 1 Mbit/s | 550 pF | Open drain | Bidirezionale |
Modalità ad alta velocità (Hs) | 1.7 Mbit/s | 400 pF | Open drain | Bidirezionale |
Modalità ad alta velocità (Hs) | 3.4 Mbit/s | 100 pF | Open drain | Bidirezionale |
Modalità ultra veloce (UFm) | 5 Mbit/s | Push-pull | Unidirezionale |
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.
- 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
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.
È 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
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
Ogni slave richiede un segnale di abilitazione separato in un sistema multi-slave, che è leggermente più complicato sull’hardware rispetto al sistema I2C.
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
UART | I2C | SPI | |
---|---|---|---|
Nome completo | Universal Asynchronous Receiver-Transmitter | Inter-Integrated Circuit | Serial Peripheral Interface |
Complessità | Molto bassa | Bassa anche con molti dispositivi | Cablaggio e gestione complessi con molti dispositivi |
Num. min. di cavi | 2 | 2 | 4 |
Duplex | Full-duplex | Half-duplex | Full-Duplex |
Tipo di comunicazione | Asincrona | Sincrona | Sincrona |
Numero di slave | 1 | 128 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 master | Non applicabile | Uno o più | 1 |
Distanza | da 15 a 1000m | da 20 a 100m | più di 10m |
Velocità | velocità dati massima di circa 5Mbps | velocità dati massima da 3,4Mbps a 5Mbps | velocità 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à.