I2C, SPI e UART Confronto e differenze di questi bus comuni

Zachariah Peterson
|  Creato: September 27, 2020  |  Aggiornato: October 20, 2021
I2C, SPI e UART protocolli per schermi LCD

Le differenze tra i bus I2C, SPI e UART sono semplici e qualsiasi progettista abituato all'impiego dei microcontrollori dovrebbe sapere come configurare l'instradamento e il layout per questi protocolli. Se stai costruendo una scheda di sviluppo per il tuo progetto o utilizzando un tipico microcontrollore, troverai molti protocolli per comunicare con altri componenti attivi. Per consentire il collegamento alle periferiche del computer, gli standard più comuni quali USB e Ethernet sono integrati nella maggior parte dei controllori. Tuttavia, l'interfacciamento con i microcontrollori o altri circuiti integrati a valle richiede altri protocolli, ad esempio I2C, SPI e UART.

Poiché questi protocolli rappresentano standard di comunicazione dei segnali a velocità più lenta, il loro impiego implica che molto raramente dovrai preoccuparti di aspetti quali il controllo dell'impedenza o il comportamento della linea di trasmissione. Tuttavia, per garantire che i componenti ricevitori possano leggere correttamente i segnali sulle linee dei bus, è necessario considerare alcuni importanti aspetti di progettazione. Va inoltre valutato il problema dell'indirizzamento, ma il prodotto in questione e il codice da te sviluppato possono gestire questo punto. Per ora, esaminiamo le modalità di impiego di questi tre protocolli comuni nel tuo layout PCB e riassumiamo alcuni punti importanti per mantenere l'integrità del segnale.

Differenze tra i protocolli I2C, SPI e UART

Tutti i microcontrollori da 8 a 32 bit utilizzano almeno un protocollo tra: I2C, SPI e UART, unitamente ai pin GPIO per la programmabilità e l'invio di segnali a periferiche semplici. Questi tre protocolli seriali sono protocolli di bus; I2C e UART utilizzano schemi di indirizzamento, mentre il protocollo SPI non fa uso di indirizzi. Sebbene SPI non impieghi indirizzi, è comunque un protocollo di bus utilizzabile per selezionare i dispositivi ricevitori di dati a valle.

Protocollo I2C

Il protocollo I2C (pronunciato in inglese “I-squared C” o talvolta “IIC” per “inter-integrated circuit”, ovvero circuito inter-integrato) utilizza due linee (modalità Standard, Fast e Fast-plus) per controllare altri dispositivi; una linea è quella di clock (SCL), mentre l'altra è quella dei dati (SDA). Il protocollo definisce tre modalità, riassunte nella tabella sottostante. Nota che i tempi di risalita/discesa presuppongono che siano installati i resistori in serie tipici sulle linee I/O.

Modalità

Tasso di trasferimento dati/velocità di clock

Tempo max risalita/discesa

Tempo min risalita/discesa

Direzione

Standard

100 kHz

1000 ns

-

Bidirezionale

Fast

400 kHz

300 ns

20 ns*

Bidirezionale

Fast-plus

1 MHz

300 ns

20 ns*

Bidirezionale

Alta velocità

3,4 MHz (bus con condensatori da 100 pF)

1,7 MHz (bus con condensatori da 400 pF)

120 ns**
240 ns**

15 ns**
30 ns**

Bidirezionale

Ultra-fast

5 MHz

50 ns

25 ns

Unidirezionale


*Presuppone che VDD/VCC = 5,5 V. Si riduce linearmente per valori VDD/VCC inferiori
**Dividi questi valori per 2 per la linea di clock

Nota che Ultra-fast è l'unica modalità di comunicazione utilizzata solo per le operazioni di scrittura a valle. Anche questa modalità è importante in quanto ci aiuta a vedere quando è necessario compensare l'impedenza del bus, il che in termini pratici è quasi mai. Se, come misura cautelativa, consideriamo un limite del 10 % per la lunghezza critica della linea, vediamo che la lunghezza cruciale in queste linee è 0,32 m, un valore molto maggiore rispetto alla dimensione della maggior parte delle schede I2C. Se utilizziamo la frequenza massima di riferimento per il tempo minimo di risalita/discesa con un limite del 10 % sulla lunghezza critica, otteniamo un valore molto maggiore pari a 0,92 m. Per sicurezza, è opportuno adottare il valore di 0,32 m per la modalità Ultra-fast; qualsiasi linea I2C più corta di questo valore non si comporterà come una linea di trasmissione e dobbiamo solo preoccuparci dello schema di terminazione.

Scelta dei valori corretti per i resistori

Il punto importante per la terminazione è la scelta dei valori corretti per i resistori in serie e di pull-up. I resistori pull-up e la capacità elettrica del bus di linea VDD/VCC formano un circuito RC di scarica e carica che fornisce un segnale al ricevitore al passaggio di stato del driver. I valori dei resistori pull-up (Rp) per le linee di segnale e clock devono rispettare la seguente disuguaglianza:

Valore del resistore pull-up per protocollo I2C
I2C pull-up resistor value.

 

Topologia del layout PCB per protocollo I2C
I2C layout topology.

La capacità elettrica del bus viene determinata utilizzando le formule standard per l'impedenza del bus VCC, a sua volta calcolata utilizzando le stesse equazioni impiegate per una linea di trasmissione (microstrip o stripline). È quindi possibile risolvere le equazioni in funzione della capacità del bus utilizzando l'impedenza e il ritardo di propagazione per la linea. I resistori in serie sono facoltativi secondo lo standard I2C, ma possano essere inclusi per proteggere i dispositivi dai picchi di tensione e rallentare i tempi di risalita/discesa. Per determinare il valore corretto dei resistori in serie da associare al valore dei resistori pull-up, fai riferimento alla pagina 59 dello standard I2C.

Protocollo SPI

Il protocollo SPI è simile a quello I2C. In questo bus vengono utilizzate in tutto 4 linee ed è possibile disporre i componenti in due modi. Se viene utilizzato un solo controllore per attivare un singolo dispositivo a valle, la topologia impiegata è semplicemente point-to-point. L'attivazione di più dispositivi dipende dal numero di uscite di selezione dei chip fornite dal driver (modalità standard). La seconda modalità utilizza la topologia daisy-chain, in cui una singola uscita di selezione del dispositivo attiva in sequenza tutti i dispositivi nella catena.

A differenza del protocollo I2C, i vari parametri di segnalazione SPI sono altamente configurabili. A meno che l'interfaccia in uso non sia estremamente veloce, è possibile approssimare il livello del segnale nelle interconnessioni a uno di tipo DC, dato che le lunghezze sono inferiori ai valori critici per il comportamento della linea di trasmissione. Puoi quindi utilizzare un resistore in serie per la terminazione dell'uscita a bassa impedenza del driver e garantire il massimo trasferimento di potenza. Il metodo di scarico RC con la capacità di traccia mostrato in precedenza può controllare la corrente di output e i tempi di risalita/discesa dall'interfaccia.

Protocollo UART

Il protocollo UART (Universal Asynchronous Receiver-Transmitter) è simile a I2C. Queste interfacce hanno una velocità massima di trasferimento dei dati di circa 5 Mbps. I dispositivi UART sono facili da utilizzare anche perché non viene inviato alcun segnale di clock tra i dispositivi e il funzionamento è completamente asincrono. Nota che la frequenza di clock interna (di sistema) di ciascun dispositivo UART deve avere un valore multiplo della velocità in baud (ovvero, ogni bit viene campionato N volte). La comunicazione tra un singolo controllore e un dispositivo a valle richiede solo due cavi.

Tieni presente che il formato dei dati, i livelli di segnale e la velocità in baud di un dispositivo UART sono configurabili con un circuito driver esterno. Sfortunatamente, ciò significa anche che l'instradamento e il layout dei dispositivi UART seguono poche regole definite. Segui le linee guida standard di progettazione ad alta velocità per determinare quando è necessaria una terminazione esaminando il punto di transizione al comportamento da linea di trasmissione (segui il link all'articolo citato in precedenza). Un metodo tipico per ridurre l'effetto di overshoot è una terminazione in serie. Nota che il protocollo UART prevede lo stato di inattività a livelli alti o bassi; pertanto, potrebbero essere necessari resistori pull-up per impostare il livello di inattività richiesto. Prima di aggiungere questi resistori, controlla attentamente le specifiche dei componenti.

Per maggiori informazioni sulla differenza tra la sincronizzazione nei bus sincroni e quelli asincroni, leggi questa presentazione Altium Live di Max Seeley del 2018.

Riepilogo confronto tra i protocolli SPI, I2C e UART

Se le regole SPI e UART sembrano un po' vaghe è perché puoi progettare più liberamente la tua interfaccia a livello di firmware. Alle alte velocità di trasmissione dei dati, l'impiego di questi protocolli crea problemi di crosstalk come in qualsiasi altro standard di comunicazione dei segnali ad alta velocità. Tuttavia, dato che hai molta flessibilità in fase di definizione delle specifiche, di solito puoi progettare tracce con un'induttanza minore e ridurre il relativo crosstalk. Puoi anche sfruttare alcune opzioni di instradamento di questi segnali per facilitarne l'impiego nei tuoi progetti di sistemi digitali.

Quando progetti sistemi digitali con gli standard di comunicazione dei segnali più comuni, puoi includere nel design le differenze tra I2C, SPI e UART sfruttando le regole di progettazione di Altium Designer®. Il Layer Stack Manager e il Field Solver 3D di Simberian integrato nel sistema utilizzano la geometria della scheda e delle tracce per calcolare la capacità elettrica del bus e i valori parassiti nelle linee di segnale.

La collaborazione fra Altium Designer e Altium 365 offre un valore d'integrazione senza precedenti nel settore dell'elettronica, finora relegato solamente al mondo dello sviluppo dei software, consentendo ai progettisti di lavorare da remoto e raggiungere straordinari livelli di efficienza.

Questo è solo un piccolo esempio di ciò che è possibile realizzare con Altium Designer tramite Altium 365. Consulta la pagina del prodotto per una descrizione più approfondita delle funzionalità o per seguire uno dei webinar on-demand.

Sull'Autore

Sull'Autore

Zachariah Peterson ha una vasta esperienza tecnica nel mondo accademico e industriale. Prima di lavorare nel settore dei PCB, ha insegnato alla Portland State University. Ha condotto la sua Fisica M.S. ricerche sui sensori di gas chemisorptivi e il suo dottorato di ricerca in fisica applicata, ricerca sulla teoria e stabilità del laser casuale. Il suo background nella ricerca scientifica abbraccia temi quali laser a nanoparticelle, dispositivi semiconduttori elettronici e optoelettronici, sistemi ambientali e analisi finanziaria. Il suo lavoro è stato pubblicato in diverse riviste specializzate e atti di conferenze e ha scritto centinaia di blog tecnici sulla progettazione di PCB per numerose aziende. Zachariah lavora con altre società del settore PCB fornendo servizi di progettazione e ricerca. È membro della IEEE Photonics Society e dell'American Physical Society.

Articoli Più Recenti

Tornare alla Pagina Iniziale