PROTOCOLLO I2C

Il protocollo I2C (chiamato anche IIC) è uno standard di trasmissione seriale a tre fili.
Il protocollo fu inventato dalla Philips nel 1982 poi divenuto di uso comune.
Il protocolo permette la comunicazione tra più dispositivi, tutti collegati ad un solo bus (due cavi più massa).
La situazione più frequente è composta da un mastrer e più slave, ma è possibile usare più master con più slave.
Ogni slave ha un idirizzo con cui viene identificato, settato dalla casa madre o selezionabile, via software o hardware, portando a massa dei piedini.

I tre cavi utulizzati sono:
SCL
SDA
GND
SCL rappresenta il segnale di clock che permertte la sincronizzazione tra i dispositivi ed è trasmesso soltanto dal master.
SDA rappresenta il segnale per la trasmisisone dei dati, in input ed output, il canale è usato sia dal master che dallo slave.
GND rappresenta la massa che deve essere in comune con tutti i dispositivi.


I primi dispositivi erano a 7 bit, con la possibilità di usare 128 indirizzi, a questi indirizzi vanno sottratti 16 indirizzi riservati, quindi in totale 112.
Successivamente il protocollo è stato ampliato a 10 bit, portando gli indirizzi a 144 (meno i soliti 16 indirizzi riservati).

Il protocollo prevede un bit di start (fronte di discesa) ed un bit di stop (fronte di salita), mentre la linea SCL mantiene il livello alto.
Questa operazione è eseguita dal master.


Successivo al bit di star segue l'indirizzo a 7 bit (o a 10 bit) che identifica lo slave con cui il master vuole collegarsi. Successivo al 7 bit viene inviato un bit di lettura/scrittura (1/0) per comunicare allo slave le intensioni del master.
Finito l'invio di tutti i dati, il master si posiziona come ricevitore aspettando che qualche slave risponda.
Nel caso l'indirizzo sia a 10 bit, il master lo invia nei primi 2 byte.


Alla ricezione del bit di start, lo slave si prepara a ricevere l'indirizzo ed a paragonarlo con il proprio memorizzato.
Se l'indizizzo non è compatibile scarta la comunicazione riportando il piedini SDA a bassa impedenza, altrimenti rimane in ricezione (con il piedino ad alta impedenza).

Per segnalare la ricezione dell'indirizzo e la possibilità di ricevere ed inviare informazioni allo slave, lo stesso pone la linea SDA a livello logico basso.
In questo modo il master capisce che è presente uno slave ed inizia la trasmissione/ricezione dei dati.
Per convenzione i bit si trasmettono dal più significativo al meno significativo.

Nel caso ci siano più master ad impegnare la linea SDA, il master (prima di trasmettere) controlla lo stato della linea SDA che deve coincidere con il suo clock.
Se questo non avviene è perchè un altro master ha impegnato la linea e quindi rilascia il canale.
Nel caso un master generi un segnale alto, in concomitanza con un segnale basso di un altro master, prevale il segnale basso e quindi il master che ha generato il segnale alto lascia la linea sino a quando il secondo master non genera il segnale di STOP.

Molti microcontrollori o integrati hanno implementato il protocollo I2C con la possibilità di cambiare l'indirizzo cambiando lo stato logico di alcuni piedini.
In commercio esistono molteplici integrati o schede intere, che utilizzano il protocollo I2C, questo ci permette di collegare più dispositivi usando solo tre cavi.

Lo standard prevete una velocità di 100kbit/s ma esiste una velocità a 10kbit/s chiamata low-speed mode.
Si possono trovare in commercio dispositivi con una velocit&abrave di 400 kbit/s (fast mode) e 3,4 Mbit/s(high speed mode)

Si possono usare differenti livelli di tensione, ma ultimamente sono utilizzati i 5Volt ed i 3,3Volt per compatibilità con i vari microcontrollori presenti in commercio.