I2C - Il bus del circuito integrato

Tutto su I2C Titolo immagine

Il bus I2C è molto usato nel regno embedded. Spieghiamo come funziona e come impostarlo sul Raspberry Pi con un esempio.

Caratteristiche I2C

L'Inter-Integrated Circuit Bus è un bus di comunicazione seriale sincrono. Philips Semiconductors fu responsabile dell'invenzione nel 1982, ma l'interfaccia guadagnò rapidamente popolarità.

Caratteristiche I2C
Caratteristiche I2C

I sinonimi comunemente usati sono I2C, I2C o IIC. L'interfaccia utilizza un'architettura Controller-Target e permette al controller di comunicare con fino a 112 dispositivi con solo due fili.

Il controller può adattare il bitrate per adattarsi alle esigenze specifiche del target. Quindi I2C è compatibile con un sacco di dispositivi come sensori, dispositivi EEPROM, orologi, driver per motori e altro.

Cablaggio

Il cablaggio del bus I2C non potrebbe essere più semplice, poiché sono necessari solo due fili. Collegare il pin di clock seriale (SCL) del controllore ai pin di clock seriale dei target e collegare anche i loro pin di dati seriali (SDA). Il software I2C farà il resto.

Cablaggio I2C
Cablaggio

Se hai bisogno di fornire alimentazione al tuo dispositivo I2C puoi usare i pin 3V3, 5V e GROUND del tuo Raspberry Pi.

Alcuni dispositivi come il nostro Scheda di breakout BME688 hanno un header I2C in modo da non aver bisogno di fili per collegarli.

Comunicazione I2C

Il Bus a Circuito Intergrato può collegare 128 dispositivi con solo due fili. Questo è possibile grazie all'ingegnoso principio di comunicazione.

I fili (SDA e SCL) non sono mai attivamente pilotati alti. Se un dispositivo vuole inviare un 1 logico, lascia il filo fluttuante. Per inviare uno zero logico, tira il filo a terra.

Il controllore avvia la comunicazione. Qualsiasi dispositivo sulla rete può agire come controllore e come bersaglio.

Il grafico qui sotto mostra i bit indivduali.

Comunicazione I2C
Comunicazione I2C

Per iniziare la comunicazione il controllore invia uno Start-bit seguito dall'indirizzo I2C del target e dalla modalità di funzionamento desiderata (R - Read o W - Write).

Nella comunicazione I2C il target deve restituire un ACK-bit ogni 8 bit (dopo ogni byte). Poiché lo spazio d'indirizzo è di solito di 7 bit, ci sono 128 (da 0 a 127) indirizzi. 16 di essi sono riservati. Questo lascia 112 possibili indirizzi per i dispositivi.

L'indirizzo del target e la modalità di funzionamento sono un byte, quindi il target deve restituire un ACK-bit. Poi il controllore invia l'indirizzo del registro (8 bit), che il target conferma di nuovo. Da lì in poi, la comunicazione di lettura e scrittura è diversa.

Per la scrittura il controllore invia semplicemente i dati in blocchi da 8 bit. Il target conferma ogni blocco. Una volta che il controllore ha finito di scrivere, invia il bit di stop.

Per la lettura il controllore invia nuovamente lo Start-bit, seguito dall'indirizzo del target. Il target conferma e inizia a inviare i dati in blocchi da 8 bit. Questa volta il controllore deve confermare ogni byte. Per fermare la lettura il controllore invia il NACK-bit e infine lo Stop-bit.

Vantaggi, svantaggi e applicazioni

Vantaggi

I vantaggi del bus I2C sono abbastanza chiari. Si possono collegare 128 dispositivi con solo due fili e due pin ciascuno. Questo è davvero potente. Inoltre si hanno velocità flessibili. L'impostazione dell'hardware potrebbe a malapena essere più semplice. A differenza di SPI, il controller sa se il target ha ricevuto i dati correttamente.

Vantaggi
Vantaggi

Svantaggi

Il bus del circuito interintegrato richiede più spazio e potenza perché utilizza resistenze di pull-up. È più lento in confronto a SPI. Si può incorrere in problemi se due dispositivi usano lo stesso indirizzo I2C. L'indirizzo è memorizzato direttamente sul dispositivo. Alcuni dispositivi ti permettono di scegliere tra due indirizzi possibili saldando un ponticello in un punto specifico del dispositivo.

Svantaggi
Svantaggi

Applicazioni

Se si cerca Sensore nel nostro negozio noterete che quasi tutti i sensori che non sono analogici usano l'interfaccia I2C. È molto comune nello spazio embedded. Ci sono cose come la memoria I2C. Spesso i microcontrollori usano il bus per la comunicazione. Oltre a questo, molti DAC (Digitale Analog Converter) e ADC (Analog Digitale Converter) sono compatibili con l'interfaccia.

I2C su Raspberry Pi

Il nostro video mostra come impostare il bus del circuito integrato sul Raspberry Pi.

4 commenti

  1. [...] Inoltre, se siete interessati a saperne di più su I2C, date un'occhiata a questo articolo. [...]

  2. [...] Volete saperne di più su I2C? Consultate il nostro articolo al riguardo. [...]

Lascia un commento