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.
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:
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:
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:
Il seguente diagramma temporale mostra i segnali reali. Dall'alto:
Un altro esempio, più complesso:
Pagina creata nel marzo 2022
Ultima modifica: 27 marzo 2023
Appunti scolastici - Versione 0.1028 - Novembre 2024
Copyright 2012-2024, Vincenzo Villa (https://www.vincenzov.net)
Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)