I2C

I2C (Inter Integrated Circuit) è un protocollo digitale di comunicazioni tra circuiti integrati sviluppato inizialmente da Philips/NXP e successivamente sviluppato col nome di SMBUS (System Management Bus) da Intel alla fine del secolo scorso. I2C e SMBUS sono formalmente diversi anche per ragioni di copyright, ma praticamente tutti i dispositivi moderni sono compatibili con entrambi gli standard.

A volte questo standard è indicato come Two-wire Serial Interface in relazione al fatto che utilizza due sole linee (nota 1).

Malgrado non sia uno standard recente è oggi usato in un'ampia gamma di applicazioni:

I2C utilizza due linee elettriche: SDA e SCL. Esse collegano un Master (nota 2) ad uno o più Slave. Ciascuno Slave è individuato da un indirizzo normalmente di sette bit. Le uniche comunicazioni ammesse sono tra Master e singolo Slave.

Schema di collegamento I2C

Devono essere presenti due resistori di pull-up in quanto le uscite di tutti i dispositivi sono open drain:

Il clock (Serial CLock) è generato dal master. Gli standard attuali prevedono una frequenza massima di 100 kHz (Standard mode), 400 kHz (Fast mode) e 3.4 MHz (High Speed mode) ed altre, ma in pratica solo la prima è utilizzata; praticamente tutti i dispositivi sono compatibili almeno con Fast mode.

Gli Slave possono bloccare il clock al termine di un byte trasmesso per indicare che non sono pronti a ricevere ulteriori dati (clock stretching). Lo standard I2C non prevede una frequenza minima di clock (nota 3).

La linea dati (Serial DAta) è bidirezionale: i dati possono essere generati dal master oppure da uno solo degli slave, ovviamente non contemporaneamente.

I bit 0 e 1 trasmessi utilizzando SDA possono cambiare solo mentre SCL è basso e devono rimanere costanti mentre SCL è alto:

Bit I2C

Le uniche due eccezioni, entrambe generate dal master, sono i due simboli di Start e Stop che identificano l'inizio e la fine di un frame:

Start e Stop

Il frame scambiato tra master e slave ha lunghezza variabile, inizia sempre con uno Start e termina con uno Stop oppure con un altro Start (re-start).

La struttura tipica di un frame contiene:

Ciascun byte trasmesso o ricevuto deve essere riscontrato con un ACK da chi lo riceve, tenendo bassa la linea SDA. Tale bit, a differenza di altri protocolli, non ha il significato di "ricezione senza errori", ma solo di "ricezione".

Di seguito sono mostrati due semplici esempi; il significato di lettere e simboli è il seguente:

Il colore utilizzato indica se la linea SDA è pilotata dal Master (blu) o dallo Slave (giallo).

Il primo esempio mostra una semplice richiesta di lettura di un byte fatta dal master al dispositivo:

Frame semplice

Il seguente diagramma temporale mostra i segnali reali. Dall'alto:

Frame semplice: diagramma temporale

Un altro esempio, più complesso: 

Frame "doppio"

Frame doppio: diagramma temporale

Esempi

Note

  1. Arduino la indica semplicemente come Wire
  2. SMBUS prevede anche l'opzione multimaster
  3. SMBUS ha introdotto una frequenza minima di clock, limitando la durata del clock stretching
  4. Lo standard prevede anche l'opzione di indirizzi a 10 bit, praticamente mai utilizzato


Pagina creata nel marzo 2022
Ultima modifica: 27 marzo 2023


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima