Présentation


Nous allons voir dans cet article la forme des signaux du protocole I²C et expliquer les 2 principes de fonctionnement, avec un mode écriture, et un mode lecture. nous verrons ensuite comment les échanges se font entre le maitre et l’esclave par intermédiaire de bit d’acquittement.

Protocole I2C



(Clique pour agrandir)

Nous avons 2 fils qui sont SDA (Serial Data ou Donnée en série) et SCL (serial clock ou horloge série qui synchronise les données).
Ces données seront cadencées par l’horloge maitre, et c’est donc le maitre qui va cadencer la vitesse de transmission (100Khz en standard) à tous les esclaves (grand maximum 128 peuvent être connectés car donné de 7 bits et le 8èmùe bit permet de savoir si lecture ou écriture).

Les 8 premier bits (ou le 1er octets) correspondent à l’adresse avec de couleur verte le 8ème bit (R/W) qui correspond soit à une lecture soit à une écriture, et le 9ème bits l’acquittement.
Si le 8ème bit est à l’état logique « 1 » il s’agit d’une lecture (R), et si celui-ci est à l’état logique « 0 » il s’agit dans ce cas d’une écriture (W).
Ainsi, lorsque l’adresse est envoyée sur le bus avec le 8ème bit significatif (soit à « 0 » soit à « 1 ») l’esclave possédant l’adresse indiqué par le maitre doit répondre par l’intermédiaire d’un bit d’acquittement qui celui-ci est représenté par la couleur bleu. A cet instant lorsque le maitre a reçu le bit d’acquittement de la part de l’esclave, le maitre va soit écrire des donnée (si et seulement si le 8ème bit est à l’état logique « 0 »), ou soit il demande à ce que l’esclave lui envoie ses données (si et seulement si le 8ème bit est à l’état logique « 1 ».
Vous allez me demander mais pourquoi le 9ème bit a 2 couleurs rouge/bleu sur le schéma précédent ?
Tout l’importance est là, si le maitre est en mode écriture, dans ce cas c’est l’esclave qui va générer les bits d’acquittement (couleur bleu). Et à l’inverse si le maitre est en mode lecture, c’est le maitre qui va générer les bits d’acquittement (couleur rouge) un petit exemple va suivre afin de bien assimiler le principe de fonctionnement en mode écriture ou en mode lecture.

Mode écriture



(Clique pour agrandir)

START + adresse

Comme vous pouvez le constater le maitre démarre par un bit de START, la ligne SDA tombe de l’état logique « 1 » à l’état logique « 0 », et ensuite le maitre envoi une adresse (ex: 0xA8h) qui correspond en hexadécimal à 10101000 en binaire.
Le 8ème bit est bien à l’état logique « 0 » ce qui veut dire que le maitre écrit sur le bus et s’adresse à l’esclave qui lui a une adresse 0xA8 (Attention l’adresse doit être unique par esclave interdiction d’avoir des adresse identiques pour chaque esclaves). A cet instant, l’esclave qui à cette adresse va se reconnaitre et donc envoyer un bit d’acquittement en signalant au maitre qu’il a bien reçu l’adresse en mode écriture.

1ère donnée

Une fois le maitre ayant reçu le bit d’acquittement (le 9ème bit pour être précis) qui émane de l’esclave, le maitre va écrire la 1er donnée soit 0x02h qu’il va transférer à l’esclave.
Cette 2ème donnée va donc être reçue par l’esclave et ce dernier va renvoyer un bit d’acquittement en signalant qu’il a bien reçu cette 1er donnée.

2ème donnée

Rebelote !! le maitre ayant reçu le bit d’acquittement qui émane de l’esclave va renvoyer une 2ème donnée 0x03h, et ainsi de suite l’esclave va renvoyer un bit d’acquittement en signalant qu’il a bien reçu cette 2ème donnée.

3ème donnée

Et pour finir le maitre va renvoyer une 3ème donnée 0x05h et ainsi de suite l’esclave va renvoyer un bit d’acquittement en signalant qu’il a bien reçu cette 3ème donnée…

STOP

Le maitre a bien reçu le bit d’acquittement de l’esclave mais il n’enverrait rien d’autre et la ligne passera à l’état logique « 1 » en envoyant un bit de STOP pour dire à l’esclave qu’il a terminé la transmission de données.
Ce qu’il faut comprendre d’une manière général c’est qu’à chaque fois qu’un bit d’acquittement est généré derrière par l’esclave, c’est le maitre qui doit envoyer les données.
J’aurais pu continuer bien entendu avec une 4ème donnée….

Mode lecture



(Clique pour agrandir)


START + adresse

En mode lecture, le principe reste le même on retrouve le bit de START ainsi que l’envoi de l’adresse en mode lecture puisque le 8ème bit est à l’état logique « 1 » (couleur verte), ce qui donne 0xA9h en hexadécimal qui correspond à 10101001. Le maitre réclame donc une lecture sur le bus à l’esclave afin que ce dernier puisse lui envoyer les données.

1ère donnée

Lorsque l’esclave à bien reçu son adresse (0xA8) avec le 8ème bit à l’état logique « 1 » ce qui donne (0xA9), il sait que c’est le maitre qui s’adresse à lui en mode lecture, et doit générer un bit d’acquittement afin de donner une réponse au maitre du type : « oui c’’est bien moi !! Je t’envoie les données comme demandé !! » . Ainsi la 1er donnée 0x07h est envoyé par l’esclave au maitre.

2ème donnée

Lorsque le maitre aura reçu la 1er donnée qui émane de l’esclave, c’est le maitre à son tour qui va répondre à l’esclave par un bit d’acquittement (couleur rouge) en signalant à l’esclave qu’il a bien reçu la 1er donnée mais maintenant qu’il attend maintenant la 2ème donnée !!
Ainsi, l’esclave va renvoyer la 2ème donnée qui est 0x02h au maitre.

3ème donnée

Lorsque le maitre aura reçu la 2er donnée qui émane de l’esclave, il va renvoyer un bit d’acquittement (couleur rouge), pour recevoir cette fois-ci la 3ème donnée, et rebelotte !! L’esclave enverra la 3ème donnée qui correspond à 0x00h cette fois-ci.

STOP

Lorsque le maitre aura reçu la 3ème donné, il n’enverra pas de bit d’acquittement, car et ce ceci est IMPORTANT, chaque fois que le maitre envoi un bit d’acquittement (couleur rouge) c’est qu’il réclame un retour de l’esclave et l’esclave doit répondre en transmettant ses données.
Afin d’arrête cette transmission, le maitre va émettre un bit de STOP pour dire à l’esclave que la transmission est terminé et qu’il n’attend plus rien de l’esclave.
C’est un peu comme nous dans la vraie vie, lorsque nous posons une question, c’est que nous attendons un retour de réponse. Et bien ici, c’est la même chose, si vous voulez faire une analogie avec ce que je viens de dire, la question correspondrais à un bit d’acquittement du maitre (le maitre pose la question) et l’esclave y répond.
Il en résulte donc que chaque fois qu’il y’a une question de posé l’esclave doit y répondre.
Prenons maintenant le problème à l’envers du genre – l’esclave peut répondre uniquement qu’à 2 questions….
Comme le maitre à déjà envoyé une première « question » qui correspond à une lecture de l’esclave (le 8ème bit est à l’état logique »1 » = lecture) cela veut bien dire que la maitre demande dès le départ à ce que l’esclave envoie une 1ère donnée (une réponse). Il ne reste donc plus qu’une seul question à poser par le maitre lorsqu’il aura reçu la 1er donnée
Ce qu’il faut comprendre d’une manière général c’est qu’à chaque fois qu’un bit d’acquittement est généré par le maitre, l’esclave doit envoyer les données.

  • Côté maitre avec 1 bit d’acquittement = 2 données à transmettre de la part de l’esclave ;
  • Côté maitre avec 2 bits d’acquittements = 3 données à transmettre de la part de l’esclave ;
  • Côté maitre avec 3 bits d’acquittements = 4 données à transmettre de la part de l’esclave ;