I2C – Bus de communication série synchrone

I2C – Bus de communication série synchrone

Aujourd’hui on va voir en détail le bus I2C, un protocole de communication série très répandu dans les systèmes embarqués et l’électronique industrielle. I2C signifie « Inter-Integrated Circuit » et permet à plusieurs composants électroniques de dialoguer facilement via seulement deux fils.

Principes fondamentaux du bus I2C

Le bus I2C fonctionne sur un modèle maître-esclave où un seul maître contrôle la communication et plusieurs esclaves peuvent être connectés sur les mêmes lignes. Ce protocole utilise deux lignes principales :

  • SDA (Serial Data) : ligne de données bidirectionnelle
  • SCL (Serial Clock) : ligne d’horloge générée par le maître

Ces deux lignes sont en « open-drain » ou « open-collector », ce qui signifie que les dispositifs ne peuvent que tirer la ligne vers le bas (niveau bas) et nécessitent des résistances de tirage (« pull-up ») vers la tension d’alimentation pour revenir à l’état haut.

Fonctionnement du protocole I2C

Le maître génère un signal d’horloge sur SCL et envoie des données bit par bit sur SDA. La communication suit une séquence stricte :

  1. Start condition : passage de SDA de haut à bas alors que SCL est haut, indiquant le début d’une transmission.
  2. Adresse du périphérique : le maître envoie l’adresse 7 bits du périphérique ciblé plus un bit de lecture/écriture.
  3. Acknowledge (ACK) : l’esclave répond par un bit d’accusé de réception.
  4. Transmission des données : octets envoyés dans une direction ou l’autre selon le bit R/W.
  5. Stop condition : passage de SDA de bas à haut alors que SCL est haut, marquant la fin de la communication.

Ce protocole garantit un échange synchronisé et simple à implémenter matériellement.

Caractéristiques techniques et limitations

Paramètre Description Valeurs typiques
Nombre de lignes Deux lignes partagées (SDA, SCL) 2
Vitesse Différents modes selon la vitesse de communication Standard (100 kHz), Fast (400 kHz), Fast Plus (1 MHz), High-Speed (3.4 MHz)
Adresses Adresse 7 bits ou 10 bits 128 adresses (7 bits), 1024 (10 bits)
Topologie Bus multi-maîtres possible Oui, avec arbitration

Applications courantes du bus I2C

Le bus I2C est utilisé pour connecter des capteurs, des mémoires EEPROM, des convertisseurs analogique-numérique, des afficheurs LCD, et bien d’autres périphériques à des microcontrôleurs. Sa simplicité matérielle en fait un choix idéal pour les applications nécessitant un grand nombre de périphériques sur un seul bus.

Par exemple, dans un microcontrôleur embarqué, un capteur de température peut envoyer ses mesures via I2C au processeur central, qui commande aussi un écran LCD via le même bus, en économisant les broches d’E/S.

Conseils pour une utilisation efficace

  • Utiliser des résistances de pull-up adaptées à la longueur et capacité du bus (en général entre 2.2 kΩ et 10 kΩ).
  • Éviter les câbles trop longs pour limiter les effets parasites et les pertes de signal.
  • Respecter la séquence start/stop pour garantir la bonne synchronisation des échanges.
  • Gérer l’arbitrage et la détection de collision en cas de multi-maîtres.

Pour aller plus loin, vous pourrez découvrir comment fonctionne le protocole SPI, une autre méthode de communication série souvent comparée à I2C pour sa rapidité et sa simplicité de conception.