Aller au contenu

I2C

Si l’UART permet de communiquer sur de longues distances, l’I2C à été conçu pour les courtes distances. Il permet par exemple à un ordinateur de mesurer des températures à plusieurs endroits à l’intérieur du boîtier.

UThermomètre I2C dans un iMacART

Thermomètre I2C dans un iMac

Le bus I2C (Inter-Integrated Circuit) a été inventé par Philips en 1982 et reste très utilisé de nos jours par les microcontrôleurs. L’I2C est un bus qui n’a besoin que de deux fils (en plus d’une masse commune) pour relier un grand nombre de périphériques:

UART

I2C

Les deux fils (ou les deux signaux) sont SDA et SCL. le signal SDA (Serial Data Line) est le signal de données et le signal SCL (Serial Clock Line) est le signal d’horloge. Une horloge indique que nous avons à faire à une communication synchrone et comme il n’y a qu’un seul fil pour les données entrantes et sortantes, la communication est en simplex.

Le bus I2C n’est pas particulièrement rapide. Dans la pratique, l’horloge a une fréquence de 100 ou 400 kHz ce qui donne une vitesse de 100 ou 400 kbit/s.1

Sur un bus, il y a un seul contrôleur (à la fois) qui gère toutes les transactions vers les périphériques. Chaque périphérique est représenté par une adresse (ou un identifiant) unique sur le bus. Il existe un mode où les adresses sont sur 10 bits, mais la plupart de périphériques utilisent des adresses sur 7 bits.

Dans la pratique, les constructeurs de périphériques fixent plusieurs bits de l’adresse et en laissent quelques-uns configurables. On peut illustrer cette pratique avec un l’exemple du “24LC256”. Il s’agit d’une mémoire EEPROM (Electrically Erasable Programmable Read-Only Memory) de 256 Kibit souvent utilisés pour stocker des données dans des systèmes embarqués.

24LC256 Serial EEPROM

24LC256 Serial EEPROM

La figure ci-dessous illustre le boîtier et les broches du périphérique. On y retrouve les deux signaux (SDA et SCL) et on voit aussi 3 broches (A0, A1 et A2) qui permettent de définir les derniers bits de l’adresse I2C de la mémoire.

Broches du 24LC256

Broches du 24LC256

Plus loin dans la documentation du périphérique, on trouve un schéma qui explique la structure de l’adresse :

Adresses du 24LC256

Adresses du 24LC256

Les quatre premiers bits sont donc fixes (1010) et on peut configurer les 3 derniers bits en connectant les broches à Vcc (3.3V) ou à Vss (0V). On peut donc avoir 8 de ces mémoires sur un bus avec des adresses I2C entre 0x50 (80 en décimal) et 0x57 (87 en décimal).

Note

Dans l’API de Mbed OS, l’adresse inclut le bit de lecture/écriture et est donc sur 8 bits et non 7. Lisez bien la documentation pour les détails

Les signaux SDA et SCL permettent de signaler un début de transmission (\(S\)), d’envoyer ou de reçevoir des bits (\(B_i\)) et de signaler la fin de la trame (\(P\)) :

Diagramme temporel

Diagramme temporel du protocole I2C (source : Wikipedia)

Pour plus d’information, consultez la page Wikipedia.

Pour utiliser l’I2C avec Mbed OS consultez la documentation de l’API correspondante.

Exercice

Exercice I2C/1

Cherchez sur Internet d’autres périphériques qui utilisent l’I2C

Solution

En plus des thermomètres et des mémoires EEPROM, on trouve encore


  1. Le STM32F412 permet des vitesses de 1Mbps, mais cette vitesse est rarement utilisée en pratique.