nullo
Interfaccia di comunicazione I2C

Interfaccia di comunicazione I2C

20 ottobre 2023

Nel mondo dei sistemi integrati e dell'elettronica, una comunicazione efficiente tra i componenti è essenziale. Tra i numerosi protocolli di comunicazione disponibili oggi, I2C (Inter-Integrated Circuit) si distingue come una scelta popolare per molti ingegneri e sviluppatori grazie alla sua semplicità, flessibilità e basso consumo energetico.



Che cos'è I2C?

Inter-Integrated Circuit, abbreviato in I²C (pronunciato "I-squared-C" o "I-two-C"), è un protocollo di comunicazione seriale ampiamente adottato, caratterizzato da un design bus seriale single-ended multi-master e multi-slave, adatto alla comunicazione su brevi distanze. La caratteristica unica dell'I2C è l'utilizzo di soli due fili per la comunicazione, SDA (Serial Data) e SCL (Serial Clock), che semplificano le connessioni e consentono di risparmiare spazio.

Sebbene la notazione ufficiale sia "I²C", pronunciata "eye-squared-see", per semplicità ci riferiremo ad essa come "I2C". Il simbolo ² è un apice 2, che significa che la I è moltiplicata per se stessa due volte. Questo è un riferimento ai due fili utilizzati per la comunicazione.

Caratteristiche I2C:

  • I2C è un protocollo di comunicazione dati seriale sincrono.
  • Utilizza solo due fili per la comunicazione: dati seriali e clock seriale.
  • Supporta più dispositivi master e slave sullo stesso bus.
  • Trasmissione half-duplex - La comunicazione tra il dispositivo master e slave può avvenire in entrambe le direzioni, ma non simultaneamente.
  • Clock Stretching - Un dispositivo slave può mantenere attiva la linea di clock per concedere più tempo all'elaborazione dei dati.
  • Arbitrato - Nel caso in cui due master inizino la trasmissione contemporaneamente, I2C dispone di un metodo integrato per decidere quale master continua e quale rimane in attesa, garantendo l'integrità dei dati.
  • Sistema di indirizzamento a 7 bit, ma può supportare anche indirizzi a 10 bit.
  • Supporta diverse velocità - La specifica standard I2C definisce quattro livelli di velocità: modalità standard (100 kbps), modalità veloce (400 kbps), modalità veloce Plus (1 Mbps) e modalità ad alta velocità (3,4 Mbps).

Per saperne di più:Comunicazione seriale vs comunicazione parallela


Come funziona I2C?

I2C è un bus seriale a due fili che utilizza due linee bidirezionali open-drain, SDA e SCL, entrambe tirate in alto.

  1. SDA (Serial Data Line): questa linea trasporta i dati.
  2. SCL (Serial Clock Line): questa linea fornisce la sincronizzazione.
Schema di comunicazione seriale I2C
Schema di comunicazione seriale I2C. I2C utilizza due linee open-drain, SDA e SCL. Queste linee sono tirate su con resistori, il che significa che normalmente sono ad alta tensione.

I dispositivi sul bus I2C possono essere master o slave:

  • Master (controller): avvia e controlla il trasferimento dei dati sul bus.
  • Slave (periferica): risponde al master.

I termini "master" e "slave" sono stati storicamente utilizzati per descrivere i ruoli dei dispositivi sul bus I2C, ma in molti contesti sono stati sostituiti principalmente da "controller" e "periferica".

Processo di comunicazione dati I2C

  1. Condizione di inattività del bus (bus libero):
    • Prima dell'inizio di qualsiasi comunicazione, sia la SDA (Serial Data Line) che la SCL (Serial Clock Line) rimangono alte, indicando che il bus è inattivo.
  2. Condizione di avvio:
    • Avviata dal master, una condizione di avvio si verifica quando la linea SDA passa da alta a bassa mentre la linea SCL è alta. Questo segnala a tutti i dispositivi slave che la comunicazione sta per iniziare.
  3. Invio dell'indirizzo:
    • Il dispositivo master invia un indirizzo a 7 bit allo slave con cui desidera comunicare. Questo è seguito da un ottavo bit, il bit di lettura/scrittura (R/W), che indica la direzione dell'operazione: 0 per scrivere e 1 per la lettura.
    • Questa sequenza combinata a 8 bit è chiamata frame di indirizzo.
    • Nel caso particolare degli indirizzi a 10 bit, il master invia 2 byte. Il primo byte inizia con 11110, seguito dai bit 9 e 8 dell'indirizzo a 10 bit, seguiti dal bit R/W. Il secondo byte conterrà i bit 7-0 dell'indirizzo a 10 bit.
  4. Bit di riconoscimento (ACK):
    • Dopo aver inviato l'indirizzo e i bit R/W, il master rilascia la linea SDA. Il dispositivo slave indirizzato abbassa la linea SDA (bit di riconoscimento) per confermare di aver ricevuto correttamente il proprio indirizzo e di essere pronto per la comunicazione.
  5. Trasferimento dei dati:
    • Per un'operazione di scrittura, il master invia un byte di dati allo slave. Lo slave conferma la ricezione abbassando la linea SDA per un impulso di clock.
    • Per un'operazione di lettura, lo slave invia un byte di dati al master. Il master conferma la ricezione ma rilascia la linea SDA (un NACK o nessun riconoscimento) dopo l'ultimo byte durante un'operazione di lettura, segnalando allo slave di interrompere l'invio dei dati.
  6. Condizione di arresto:
    • Per terminare una sessione di comunicazione, il master genera una condizione di arresto facendo passare la linea SDA da bassa ad alta mentre la linea SCL è alta. Dopo la condizione di arresto, il bus ritorna allo stato di inattività.
    • Il master può anche generare una condizione di avvio ripetuto per mantenere il controllo del bus per un'altra operazione di lettura o scrittura. Ciò viene spesso utilizzato in operazioni più complesse, come la modifica della direzione dei dati senza rilasciare il bus.
Processo di comunicazione dati seriale I2C
Processo di comunicazione dati seriale I2C.

Per saperne di più:Che cos'è la velocità di trasmissione?

Indirizzamento di più slave

Se sono presenti più dispositivi slave, il master comunica con ciascuno di essi utilizzando i loro indirizzi univoci. Solo lo slave con l'indirizzo corrispondente risponde e comunica, mentre gli altri ignorano i messaggi.

Allungamento dell'orologio

Uno slave può mantenere premuta la linea SCL (un processo noto come clock stretching) se necessita di più tempo per elaborare un'istruzione o recuperare dati. Il master deve attendere che la linea SCL venga rilasciata prima di poter procedere.

Arbitraggio bus (per multi-master)

L'arbitraggio è il processo che determina quale dispositivo master ottiene il controllo del bus quando più master tentano di avviare la comunicazione contemporaneamente o in un intervallo di tempo ravvicinato. I2C supporta più master, il che significa che più di un master può tentare di controllare il bus in un dato momento senza danneggiare il messaggio.

Procedura di arbitrato I2C:
  • Quando un master avvia una trasmissione, presume di avere il controllo del bus.
  • Mentre invia i bit di indirizzo e dati, controlla la linea SDA dopo aver scritto ogni bit. Se scrive un 0 e rilesse un 1, sa che un altro padrone ha il controllo e si ritira, perdendo così l'arbitrato.
  • Il master che ha perso l'arbitraggio interrompe immediatamente la trasmissione e attende che la linea SCL (Serial Clock) diventi HIGH, indicando la fine del trasferimento corrente, prima di riprovare.

Grazie all'efficiente trasferimento dei dati utilizzando solo due fili, I2C è diventata un'interfaccia di comunicazione seriale molto diffusa per i sistemi che richiedono una comunicazione affidabile ed economica.

Per saperne di più:Codice di esempio per l'implementazione di I2C su un LCD COG 16x2


Vantaggi dell'I2C:

  • Semplicità: richiede solo due cavi, indipendentemente dal numero di dispositivi collegati.
  • Flessibilità: supporta più master e slave.
  • Efficienza energetica: le periferiche I2C possono essere spente quando non sono in uso senza influire sul bus.
  • Indirizzamento integrato: ogni dispositivo sul bus ha un indirizzo univoco.
  • Ampio supporto: molti microcontrollori e dispositivi periferici sono dotati di interfacce hardware I2C integrate, che facilitano l'integrazione.
  • Modalità di velocità flessibili: I2C supporta diverse modalità di velocità.

Svantaggi dell'I2C:

  • Limiti di velocità: in genere più lento rispetto ad altri protocolli come SPI.
  • Limiti di distanza: I2C è progettato per brevi distanze. Per distanze maggiori, l'integrità del segnale e il rumore possono diventare problematici.
  • Complessità con reti di grandi dimensioni: con l'aggiunta di nuovi dispositivi, l'indirizzamento può diventare complicato.
  • Nessun controllo degli errori: manca un meccanismo integrato di controllo degli errori.
  • Single-ended: nessun segnale differenziale, il che potrebbe migliorare l'immunità al rumore.

I2C rispetto ad altri protocolli di comunicazione seriale

Quando si sceglie un protocollo di comunicazione seriale per il proprio progetto, è importante considerare le esigenze specifiche della propria applicazione. Sebbene I2C sia una scelta popolare, esistono altri protocolli disponibili, come SPI, RS-232, CAN e UART. Ogni protocollo presenta vantaggi e svantaggi, quindi è importante valutare i pro e i contro prima di prendere una decisione.

I2C vs. SPI (Serial Peripheral Interface):

  • Cavi: SPI richiede più cavi: SCLK (Serial Clock), MOSI (Master Out Slave In), MISO (Master In Slave Out) e un SS (Slave Select) unico per ogni dispositivo. Al contrario, I2C richiede solo SDA e SCL.
  • Velocità: SPI può essere più veloce di I2C poiché non è presente una fase di indirizzamento nella trasmissione dei dati.
  • Flessibilità: mentre I2C supporta nativamente la configurazione multi-master, SPI non lo fa.

I2C vs. UART (Universal Asynchronous Receiver-Transmitter):

  • Complessità del protocollo: UART è più semplice poiché coinvolge solo due dispositivi che comunicano tra loro, utilizzando due linee (TX e RX). I2C può collegare più dispositivi utilizzando solo due linee.
  • Sincronizzazione: UART è asincrono (senza linea di clock), mentre I2C è sincrono (richiede una linea di clock).

I2C vs. CAN (Controller Area Network):

  • Caso d'uso: CAN è progettato per veicoli e sistemi industriali in cui l'affidabilità in condizioni di rumore è fondamentale. I2C è più indicato per la comunicazione a breve distanza tra circuiti integrati a bordo.
  • Affidabilità: CAN dispone di meccanismi integrati di controllo e correzione degli errori, mentre I2C no.

I2C contro RS232:

  • RS232 utilizza 3 fili e supporta solo due dispositivi (un trasmettitore e un ricevitore), mentre I2C supporta diversi dispositivi con solo 2 fili.
  • RS-232 è adatto per comunicazioni a lunga distanza.
Protocollo Numero di fili Velocità Complessità Consumo energetico Applicazioni comuni
I2C 2 Lento Medio Basso Sistemi integrati, sensori, display, attuatori, periferiche.
SPI 4 Veloce Medio Medio Comunicazione ad alta velocità, chip di memoria.
UART 2 Lento Basso Basso Comunicazione asincrona, comunicazione seriale su lunghe distanze.
CAN 2 Veloce Medio Medio Applicazioni automobilistiche e industriali.
RS-232 3 Lento Medio Medio Computer, stampanti, modem.

Conclusione

I2C è un protocollo di comunicazione indispensabile con decenni di comprovata efficacia nel mondo dell'elettronica. La sua semplicità, unita alla capacità di collegare più dispositivi utilizzando solo due linee, lo rende una scelta popolare per molte applicazioni. Tuttavia, come ogni protocollo, ha i suoi limiti e non è ideale per tutti gli scenari. Quando si progetta un sistema, è necessario valutare le esigenze specifiche dell'applicazione e scegliere il protocollo di comunicazione più adatto a tali esigenze.