Protocole I2C

Maîtrisez le protocole I2C (Inter-Integrated Circuit) et ses mécanismes d'adressage et d'acquittement

Qu'est-ce que I2C ?

Le protocole I2C (Inter-Integrated Circuit, prononcé "I carré C" ou "I deux C") a été développé par Philips Semiconductors (aujourd'hui NXP) en 1982. Il permet la communication entre plusieurs composants sur un bus série à seulement deux fils.

Ses caractéristiques principales :

  • 2 fils : SDA (données) et SCL (horloge)
  • Open-drain : les lignes nécessitent des résistances de pull-up externes
  • Multi-maître : arbitrage matériel possible entre plusieurs maîtres
  • Adressage : chaque esclave possède une adresse unique (7 ou 10 bits)
  • ACK/NACK : accusé de réception à chaque octet

Signaux I2C

SignalTypeDescription
SDAOpen-drain bidirectionnelSerial Data — données
SCLOpen-drain bidirectionnelSerial Clock — horloge

Les deux lignes sont tirées au niveau haut par des résistances de pull-up. Tout composant sur le bus peut abaisser une ligne (drain ouvert), mais aucun ne peut la forcer au niveau haut — seules les résistances de pull-up le font.


Conditions Start et Stop

I2C utilise deux conditions spéciales qui ne respectent pas les transitions normales (données stables pendant SCL haut) :

Diagramme de timing I2C

Condition START : SDA descend pendant que SCL est haut. Condition STOP : SDA monte pendant que SCL est haut.

Les données sur SDA ne doivent changer que lorsque SCL est bas — sauf pour les conditions START et STOP.


Trame I2C

Une transaction I2C typique (écriture) :

START | Adresse (7 bits) | R/W='0' | ACK | Data byte | ACK | STOP
  1. START : initié par le maître
  2. Adresse : 7 bits MSB en premier, identifie l'esclave cible
  3. R/W bit : 0 = écriture (maître → esclave), 1 = lecture (esclave → maître)
  4. ACK : l'esclave tire SDA bas pour acquitter
  5. Données : octets transmis, chacun suivi d'un ACK/NACK
  6. STOP : initié par le maître pour libérer le bus

ACK et NACK

Après chaque octet de 8 bits, le récepteur envoie :

  • ACK (Acknowledge) : SDA bas pendant le 9e coup d'horloge — réception correcte
  • NACK (Not Acknowledge) : SDA haut (relâché) — erreur ou fin de lecture

En lecture, le maître envoie un NACK après le dernier octet pour signaler qu'il n'en veut plus.


Implémentation VHDL — Machine à états maître I2C

library ieee;
use ieee.std_logic_1164.all;
 
entity i2c_master is
  generic (
    g_SYS_CLK_HZ : positive := 100_000_000;  -- 100 MHz
    g_I2C_CLK_HZ : positive := 400_000       -- 400 kHz (Fast mode)
  );
  port (
    i_clk     : in    std_logic;
    i_rst     : in    std_logic;
    i_start   : in    std_logic;
    i_rw      : in    std_logic;  -- '0'=write, '1'=read
    i_addr    : in    std_logic_vector(6 downto 0);
    i_data    : in    std_logic_vector(7 downto 0);
    o_data    : out   std_logic_vector(7 downto 0);
    o_busy    : out   std_logic;
    o_ack_err : out   std_logic;
    io_sda    : inout std_logic;
    io_scl    : inout std_logic
  );
end entity i2c_master;

La machine à états typique comprend les états :

  • IDLESTARTADDRACK_ADDRDATAACK_DATASTOP

L'implémentation complète est disponible dans l'exercice correspondant.


Clock Stretching

L'esclave peut "étirer" SCL en le maintenant bas pour ralentir le maître. Le maître doit surveiller SCL et attendre qu'il remonte avant de continuer.

Cette fonctionnalité nécessite que SCL soit aussi open-drain (bidirectionnel).


Arbitrage multi-maître

Si deux maîtres démarrent une transaction simultanément, l'arbitrage est résolu automatiquement :

  • Chaque maître compare la valeur qu'il émet sur SDA avec ce qu'il lit
  • Si un maître émet '1' mais lit '0', il a perdu l'arbitrage et cesse d'émettre
  • Le maître "gagnant" continue sans interruption

Vitesses standardisées

ModeVitesse max
Standard Mode100 kbps
Fast Mode400 kbps
Fast Mode Plus1 Mbps
High Speed Mode3,4 Mbps

Avantages et inconvénients

AvantagesInconvénients
Seulement 2 filsPlus lent que SPI
Multi-maître natifOpen-drain → résistances pull-up nécessaires
Adressage → pas de SS_NProtocole plus complexe
ACK/NACK pour vérificationCapacité du bus limitée (400 pF)