Sviluppato da Philips negli anni '80, I2C è diventato uno dei protocolli di comunicazione seriale più comuni nell'elettronica. I2C consente la comunicazione tra componenti elettronici o IC to IC, indipendentemente dal fatto che i componenti si trovino sullo stesso PCB o collegati tramite un cavo. La caratteristica fondamentale di I2C è la possibilità di avere un vasto numero di componenti su un singolo bus di comunicazione con solo due fili che rende I2C perfetto per le applicazioni che richiedono semplicità e basso costo rispetto alla velocità.
Il protocollo I2C
I2C è un protocollo di comunicazione seriale che richiede solo due linee di segnale. È stato progettato per la comunicazione tra chip su un PCB. I2C è stato originariamente progettato per la comunicazione a 100 kbps ma sono state sviluppate modalità di trasmissione dati più veloci nel corso degli anni per raggiungere velocità fino a 3,4 Mbit. Il protocollo I2C è stato stabilito come standard ufficiale, che fornisce una buona compatibilità tra le implementazioni I2C e una buona compatibilità con le versioni precedenti.
Segnali I2C
Il protocollo I2C utilizza solo due linee di segnale bidirezionali per comunicare con tutti i dispositivi sul bus I2C. I due segnali utilizzati sono:
- Serial Data Line (SDL)
- Serial Data Clock (SDC)
La ragione per cui I2C può utilizzare solo due segnali per comunicare con un certo numero di periferiche riguarda il modo in cui viene gestita la comunicazione lungo il bus. Ogni comunicazione I2C inizia con un indirizzo a 7 bit (o 10 bit) che richiama l'indirizzo della periferica mentre il resto della comunicazione è destinato a ricevere la comunicazione. Ciò consente a più dispositivi sul bus I2C di svolgere il ruolo del dispositivo master in base alle esigenze del sistema. Per prevenire le collisioni di comunicazione, il protocollo I2C include funzionalità di rilevamento di collisione e arbitraggio che consentono una comunicazione fluida lungo il bus.
Vantaggi e limiti
Come protocollo di comunicazione, I2C ha molti vantaggi che rendono una buona scelta per molte applicazioni di progettazione embedded. I2C offre i seguenti vantaggi:
- I2C richiede solo due linee di segnale
- Tassi di trasmissione dati flessibili
- Ogni dispositivo sul bus è indirizzabile indipendentemente
- I dispositivi hanno una semplice relazione Master / Slave
- I2C è in grado di gestire più comunicazioni master fornendo il rilevamento dell'arbitrato e della collisione di comunicazione
- Comunicazione a distanza maggiore rispetto a SPI
Con tutti questi vantaggi, I2C ha anche alcune limitazioni che potrebbero dover essere progettate in giro. I limiti I2C più importanti includono:
- Poiché sono disponibili solo 7 bit (o 10 bit) per l'indirizzamento del dispositivo, i dispositivi sullo stesso bus possono condividere lo stesso indirizzo. Alcuni dispositivi sono in grado di configurare gli ultimi bit dell'indirizzo, ma questo impone ancora una limitazione di dispositivi sullo stesso bus.
- Sono disponibili solo poche velocità di comunicazione limitate e molti dispositivi non supportano la trasmissione a velocità più elevate. È necessario un supporto parziale per ogni velocità sul bus per impedire ai dispositivi più lenti di intercettare trasmissioni parziali che si tradurranno in anomalie operative.
- La natura condivisa del bus I2C può causare l'interruzione dell'intero bus quando un singolo dispositivo sul bus smette di funzionare. Ciclando l'alimentazione al bus può essere utilizzato per riavviare il bus e ripristinare il corretto funzionamento.
- Poiché i dispositivi possono impostare la velocità di comunicazione, i dispositivi operativi più lenti possono ritardare il funzionamento di dispositivi a velocità più elevata.
- I2C assorbe più energia rispetto ad altri bus di comunicazione seriali a causa della topologia open-drain delle linee di comunicazione.
- Le limitazioni del bus I2C in genere limitano il numero di dispositivi su un bus a circa una dozzina di dispositivi.
applicazioni
Il bus I2C è una grande opzione per le applicazioni che richiedono un costo basso e un'implementazione semplice piuttosto che un'alta velocità. Ad esempio, la lettura di determinati circuiti integrati di memoria, l'accesso a DAC e ADC, la lettura di sensori, la trasmissione e il controllo di azioni guidate dall'utente, la lettura di sensori hardware e la comunicazione con più microcontrollori sono usi comuni del protocollo di comunicazione I2C.