Le BUS I2C - la théorie

Bon, voici un peu de théorie sur le bus I2C...

Présentation:

Le bus I2C (Inter Integrated Circuit) a été dévellopé par Philips, à l'origine pour permettre un dialogue entre un micro-processeur et les différents circuits électroniques d'un poste de télévision.
Il autorise des transmissions entre modules jusqu'à 400 Kbps (kilo-bits par seconde), en utilisant simplement 3 fils: données (SDA), horloge (SCL) et masse.
On peut relier un grand nombre de composants entre eux (mémoires, E2PROMs, LCD...), la limite étant la capacité totale de la ligne, qui ne doit pas dépasser 400pF entre SDA et SCL.

Les lignes SDA et SCL sont de type collecteur ouvert pour éviter les conflits entre les différents circuits de la ligne.

Le protocole I2C:

Quand le bus est actif, un module est le maître (c'est lui qui impose l'horloge).
Le maître peut effectuer une lecture ou écriture vers tout module esclave.

Prise de contrôle du bus:
Un module peut prendre le contrôle du bus si celui-ci est libre (SDA et SCL à 1).
Il devient alors le maître, et génère l'horloge SCL.

Pour transmettre des données sur le bus, on a alors:
Principe de la transmission I2C, image issue du site ELECTRIX

Transmission d'une donnée:
Après la condition de départ, le maître positionne les bits de donnée (poids fort en premier).
la validation se fait par une montée d'horloge (SCL passe à 1).
Le changement de la donnée suivante se fait après avoir descendu SCL à 0.
A la fin de la transmission, le maître positionne SDA à 1 (bit de ACK), et lit la ligne SDA.
L'esclave impose alors un niveau 0 pour acquitter le message.

Principe de la transmission I2C, image issue du site ELECTRIX

Adresse du destinataire
Le premier mot transmis est l'adresse du destinataire, sur 7 bits (0 à 127), le dernier bit spécifiant s'il s'agit d'une lecture ou d'une écriture.

Principe de la transmission I2C, image issue du site ELECTRIX

PS: Je ne vais pas réinventer ce qui a déjà été (bien) fait ailleurs...
Aussi, je vous conseille vivement le site suivant: Electronix

Mise à jour de la page: