Cos'è i2c?

I2C (Inter-Integrated Circuit)

L'I2C (Inter-Integrated Circuit), pronunciato "I-quadro-C", è un protocollo di comunicazione seriale a due fili ampiamente utilizzato per connettere dispositivi a bassa velocità su brevi distanze. E' particolarmente popolare per comunicare tra microcontroller e sensori, memorie, display LCD e altre periferiche. E' un bus multi-master, il che significa che più dispositivi possono controllare il bus, e supporta la comunicazione multi-slave.

Caratteristiche Principali:

  • Due Fili: Richiede solo due fili per la comunicazione:

    • SDA (Serial Data): Linea dati per trasmettere e ricevere dati.
    • SCL (Serial Clock): Linea di clock per sincronizzare il trasferimento dei dati. Il clock è generato dal master.
  • Open Drain/Open Collector: Sia SDA che SCL sono linee "open drain" (o "open collector", a seconda della tecnologia dei transistor). Questo significa che i dispositivi possono solo abbassare la linea a terra. Una resistenza di pull-up esterna è necessaria su entrambe le linee per tirarle verso l'alto allo stato alto quando nessun dispositivo le sta abbassando. Questo permette a più dispositivi di condividere le linee.

  • Indirizzamento: Ogni dispositivo I2C sul bus ha un indirizzo univoco. Il master utilizza questo indirizzo per selezionare lo slave con cui comunicare. Gli indirizzi sono tipicamente a 7 bit o 10 bit.

  • Velocità: L'I2C supporta diverse velocità di trasferimento dati, tra cui:

    • Standard mode: Fino a 100 kHz
    • Fast mode: Fino a 400 kHz
    • Fast mode Plus: Fino a 1 MHz
    • High-speed mode: Fino a 3.4 MHz
    • Ultra-fast mode: Fino a 5 MHz (solo per applicazioni point-to-point)
  • Master/Slave: La comunicazione avviene sempre tra un master e uno o più slave. Il master inizia la comunicazione selezionando uno slave specifico usando il suo indirizzo. Il master può sia scrivere dati allo slave che leggere dati dallo slave.

Funzionamento Base:

  1. Start Condition: Il master inizia la comunicazione tirando la linea SDA a basso mentre la linea SCL è alta.

  2. Address Frame: Il master invia l'indirizzo a 7 o 10 bit del dispositivo slave a cui vuole comunicare, seguito da un bit di lettura/scrittura (R/W). Se il bit R/W è impostato, il master sta leggendo dallo slave; altrimenti, il master sta scrivendo allo slave.

  3. ACK/NACK: Lo slave risponde all'indirizzo inviando un bit di acknowledgement (ACK) tirando SDA a basso durante il nono ciclo di clock. Se lo slave non è presente o non è in grado di rispondere, lascia SDA alta, che è interpretata come un not-acknowledgement (NACK).

  4. Data Transfer: I dati vengono trasferiti un byte alla volta. Ogni byte è seguito da un bit di ACK/NACK dallo slave.

  5. Stop Condition: Il master termina la comunicazione tirando la linea SDA ad alta mentre la linea SCL è alta.

Vantaggi:

  • Semplice da implementare, richiede poche risorse hardware.
  • Utilizza solo due fili, riducendo la complessità del cablaggio.
  • Supporta più dispositivi su un singolo bus.

Svantaggi:

  • Velocità relativamente bassa rispetto ad altri protocolli seriali come SPI.
  • Suscettibile a problemi di capacità e impedenza sul bus, che possono limitare la lunghezza del bus e il numero di dispositivi.
  • Il protocollo Open Drain richiede resistenze di pull-up.

Applicazioni Comuni:

  • Sensori (temperatura, pressione, accelerometri, ecc.)
  • Memorie EEPROM
  • Orologi Real-Time (RTC)
  • Display LCD
  • Convertitori Analogico-Digitale (ADC) e Digitale-Analogico (DAC)
  • Driver per LED