I2C – Inter Integrated Circuit
Oggi ti porto nel mondo di I2C, acronimo di Inter Integrated Circuit, un protocollo di comunicazione seriale che trovi praticamente in ogni progetto elettronico dove più dispositivi devono scambiarsi dati senza troppi fili. In questo articolo scopriremo insieme come funziona, perché è così diffuso e qualche esempio pratico per capire bene come usarlo nei tuoi circuiti. In particolare, ti spiegherò i dettagli tecnici e i vantaggi di questa interfaccia, così sarai pronto a progettare con sicurezza.
Cos’è l’I2C?
L’I2C è un protocollo di comunicazione seriale sincrona sviluppato da Philips negli anni ’80, usato per collegare microcontrollori, sensori, EEPROM, convertitori ADC/DAC e tanti altri dispositivi elettronici. La caratteristica principale è che serve solo un bus a due fili per far comunicare più dispositivi: uno per il clock (SCL) e uno per i dati (SDA).
Quindi, immagina di avere tanti dispositivi su una scheda: con I2C, non serve un filo dedicato per ogni dispositivo, ma tutti condividono lo stesso bus, semplificando il cablaggio e riducendo i costi.
Come funziona il protocollo I2C?
I2C funziona in modalità master-slave, dove il master genera il segnale di clock e gestisce la comunicazione, mentre gli slave rispondono solo quando sono indirizzati. Ogni dispositivo ha un indirizzo univoco a 7 o 10 bit che identifica chi deve parlare o ascoltare.
- SCL (Serial Clock Line): linea che porta il clock, generato dal master per sincronizzare lo scambio dati.
 - SDA (Serial Data Line): linea sulla quale viaggia il flusso di dati, in entrambe le direzioni.
 
La comunicazione avviene con sequenze precise di bit che indicano start, indirizzo, dati e stop, garantendo così che più dispositivi possano coesistere senza conflitti.
Sequenza base della comunicazione I2C
- Start Condition: il master abbassa SDA mentre SCL è alto per segnalare l’inizio della comunicazione.
 - Invio Indirizzo: il master invia l’indirizzo dello slave a cui vuole parlare, seguito da un bit che indica se vuole leggere o scrivere.
 - Acknowledgment (ACK): lo slave risponde con un bit di conferma (ACK) per dire che ha ricevuto correttamente l’indirizzo.
 - Trasferimento dati: si inviano byte di dati uno dopo l’altro, ognuno seguito da un ACK.
 - Stop Condition: il master alza SDA mentre SCL è alto per indicare la fine della comunicazione.
 
Esempio tecnico: lettura di un sensore temperatura tramite I2C
Immagina di voler leggere la temperatura da un sensore come il TMP102 collegato via I2C al tuo microcontrollore.
- Il microcontrollore (master) manda la start condition.
 - Invia l’indirizzo del sensore con il bit di scrittura.
 - Invia il comando per selezionare il registro temperatura.
 - Manda una nuova start condition, questa volta con il bit di lettura.
 - Legge i byte dati che rappresentano la temperatura.
 - Invia la stop condition per terminare la comunicazione.
 
Questo semplice scambio dati permette di ottenere valori precisi con solo due fili e poca complessità hardware.
Vantaggi e limiti dell’I2C

Dettagli tecnici: livelli di tensione e pull-up
Un aspetto che spesso ti può confondere è che le linee SDA e SCL sono open-drain/open-collector, cioè nessun dispositivo tira attivamente la linea verso l’alto, ma la lasciano “libera”. Per questo servono resistori di pull-up collegati a una tensione positiva (es. 3.3V o 5V). Senza i pull-up, il bus non funziona correttamente.
Quindi, quando nessun dispositivo sta tirando la linea verso il basso, i resistori la mantengono alta. Quando un dispositivo vuole trasmettere uno zero logico, tira la linea a massa.
È importante dimensionare bene questi resistori pull-up: se sono troppo grandi, la linea risponde lentamente; se sono troppo piccoli, si spreca energia e si possono danneggiare i dispositivi.
Nel progettare il bus I2C, devi anche considerare la capacità del bus (lunghezza dei fili, numero di dispositivi) perché influenza la qualità del segnale e la velocità massima raggiungibile.
Ora che hai capito i dettagli di I2C, puoi pensare a tutte le applicazioni in cui serve una comunicazione semplice e affidabile tra sensori, memorie, microcontrollori e altro ancora. Ti prometto che una volta che avrai configurato un bus I2C, non vorrai più tornare ai cablaggi complicati e alle comunicazioni seriali con troppi fili.
Domani vedremo un altro protocollo seriale molto usato: il SPI (Serial Peripheral Interface), che differisce dall’I2C per velocità, complessità e modalità di collegamento. Sarà interessante capire quando scegliere uno o l’altro!