Le protocole de ce bus va être décrit dans sa version 2.1, même s'il n’a pas subi de changement significatif depuis sa version initiale (mode high-speed uniquement).
Ce protocole est défini par la succession des états que peuvent prendre les signaux SDA et SCL. Ce protocole est relativement simple et puissant à la fois.
Il peut être décomposé en plusieurs parties distinctes :
Exemple d’une trame sur le bus I²C
En fait, il est possible de décomposer cette trame en deux parties, les bits de A6 à ACK peuvent être vus comme la première partie et ceux de D7 à ACK comme la seconde.
Ces deux parties n’étant que la mise en place de l’adresse destinataire et de la donnée transmise ou reçue.
La prise de parole
Avant d’initier un dialogue sur le bus, chaque composant doit s’assurer que le bus est libre.
Pour ce faire, le composant maître vérifie que les lignes SDA et SCL sont au repos (état haut) et ce pendant une durée de 4,7µs, temps constructeur désigné par THD ;STA
Condition de départ
Toujours présente, la condition de "Start" est définit par un changement de la ligne de donnée alors même qu’elle n’a pas été validée par l’horloge.
La condition pour initier ce départ étant l’état ‘1’ sur les lignes SDA et SCL.
La condition de "Start" a lieu lors du passage de la ligne de donnée à ‘0’ alors même que l’horloge reste à ‘1’.
Condition de Start
Adresse du destinataire
Il s’agit ici du morceau de trame qui comporte les plus grandes traces de l’histoire du bus I²C.
Dans sa forme primitive, le CBUS, ancêtre de ce bus, imposait une adresse sur 7 bits.
Afin de garantir cette compatibilité CBUS, il a fallu adapter l’adresse 10 bits des nouvelles versions du Bus I²C avec son histoire.
Adressage sur 7 bits
On peut voir sur le schéma ci-dessus que l’adressage se fait du bit le plus fort vers le bit le plus faible, le huitième bit sera décrit dans la section suivante.
L'établissement d'une adresse sur 10 bits s’effectue en deux temps :
Dans un premier temps, on envoie un octet comprenant les 2 bits de poids fort de l’adresse.
Le quartet premier ne doit comporter que des 1 et le second quartet commence par un 0 les deux bits représentant les deux bits de poids fort de l’adressage sur 10 bits, le dernier étant celui de Lecture/Ecriture.
Le maître doit maintenant attendre le bit de validation (Acknowledgement), il peut être donné par plusieurs composants à la fois, tous ceux commençant par cette adresse.
La seconde partie de l’adresse sera donc transmise une fois l’accusé reçu.
Adressage sur 10 bits
Il existe plusieurs variantes de cette méthode d’adressage car, notamment sur les mémoires, il faut effectuer un adressage interne du composant, cette seconde adresse étant transmise après l’accusé de la première adresse.
Afin de répondre à certaines fonctions du bus, il est nécessaire d’avoir des adresses spécifiques permettant des opérations particulières.
Si l’adresse est à 0 et le bit de Lecture/Ecriture à 0, il s’agit d’un appel général ou plus communément appelé BroadCast.
Si l’adresse est à 0 et le bit de lecture écriture à 1, il s’agit d’un "octet de départ", il peut être envoyé avant le transfert réel afin de palier aux problèmes des composants les plus lents, notamment ceux simulant le protocole de manière logiciel.
Liste de différents modules :
ADRESSE ESCLAVE | Bit R/W | Description | Donnée | Description |
0000 000 |
0 |
Appel Général |
|
|
|
|
|
0000 0110 |
RESET, remet tout les registres dans leurs états initiaux (mise sous tension), les circuits qui le permettent rechargent leur adresse esclave |
|
|
|
0000 0010 |
Les composants qui le permettent rechargent leur adresse esclave |
|
|
|
0000 0100 |
Les composants, définissant leur adresse esclave de manière matériel, réinitialisent leur adresse. |
|
|
|
0000 0000 |
Interdit |
|
|
|
xxxx xxx1 |
Cette commande joue le rôle d’interruption, x peut être l’adresse du composant qui a généré l’interruption. |
0000 000 |
1 |
Octet de départ |
0000 001 |
X |
Adresse CBUS |
0000 010 |
X |
Format de bus différents |
0000 011 |
X |
Réservé pour utilisation future |
0000 1XX |
X |
Réservé pour utilisation future |
1111 1XX |
X |
Réservé pour utilisation future |
1111 0XX |
1 |
Adresses d’esclave à dix bits |
Mode Lecture/Ecriture
Plus communément appelé R/W, il s’agit du huitième bit du premier octet.
Il sera toujours mis en bit de poids le plus faible de l’octet de l’adresse.
Son utilité réside dans le faite d’indiquer à l’esclave appelé, s'il s’agit d’une lecture ou d’une écriture qui sera effectuée.
Acquittement
Effectué par l’esclave, ce bit permet de signaler au maître qu’il existe bien un composant à l’adresse indiquée.
Son utilisation est un peu spéciale et est possible que par la technologie électronique mise en œuvre dans le concept du bus I²C.
Le maître doit maintenir la ligne SDA à l’état haut, l’esclave mettra à bas la ligne SDA, il ne reste donc plus qu’au maître de lire l’état de la ligne SDA.
Il n’existe pas de normalisation du délai après lequel l’esclave sera considéré comme inexistant.
Exemple d'acquittement
Légende |
SCL |
Horloge du bus |
SDAM |
Niveauximposés par le maître |
SDAE |
Niveaux imposés par l’esclave |
SDAR |
Niveaux résultant sur le bus |
Donnée en Lecture/Ecriture
Il s’agit de la deuxième partie de la trame ; elle contient les données circulant sur le bus.
S’il s’agit d’une lecture, le maître met à ‘1’ le niveau du SDA et l’esclave se charge de descendre à ‘0’ ce niveau pour former l’octet résultant d’une lecture, chaque bits étant bien entendu délimité par l’horloge SCL.
Exemple d’une lecture
Légende |
SCL |
Horloge du bus |
SDAM |
Niveauximposés par le maître |
SDAE |
Niveaux imposés par l’esclave |
SDAR |
Niveaux résultant sur le bus |
S’il s’agit d’une écriture, le niveau du SDA va être contrôlé par le maître, l’esclave écoutant en appliquant un niveau haut sur le bus.
Exemple d’une écriture
Légende |
SCL |
Horloge du bus |
SDAM |
Niveauximposés par le maître |
SDAE |
Niveaux imposés par l’esclave |
SDAR |
Niveaux résultant sur le bus |
Dans le cas où les données seraient plus importantes en lecture ou en écriture, la seconde partie de la trame (Donnée + Ack) est répétée autant de fois que nécessaire.
Exemple d’écriture de plusieurs octets
Acquittement
Il s’agit de nouveau d’un accusé de réception, mais de la donnée cette fois-ci.
Cependant, selon s’il s’agit d’une écriture ou d’une lecture, le niveau de ce bit varie.
En effet, lors d’une lecture, ce bit est à ‘1’ car l’esclave n’a pas à accuser le fait qu’il ait fini d’envoyer ces données.
Lors d’une écriture, l’esclave met à ‘0’ le niveau du bus, donnant ainsi un accusé de réception de la donnée.
Ceci est une notion importante faisant la spécificité de cet acquittement par rapport à celui de l’adresse.
Condition d’arrêt
La condition de "Stop" est à l’inverse de la condition de "Start".
La réalisation de cette condition sous-entend au préalable que les lignes SDA et SCL soient au niveau ‘0’.
Cette condition remplie, la ligne SDA passe au niveau ‘1’, puis c’est au tour de la ligne SCL de passer au niveau ‘1’.
Un fois ce signal donné, tous les composants sont dans un état de veille et ne réagiront qu’à la prochaine condition de "Start".
Condition de Stop
Retourner en haut de la page