Retour à la première page
1. Où est le problème ?
2. Communication en série : je vous en mets combien ?

3. L’accusé de réception : Tu m’entends ?

On sait comment Toto va s’y prendre pour transmettre tout plein d’informations en série à Lili. Mais comment Toto fait-il pour savoir si Lili a bien reçu les informations ? D’autant que les deux lignes sont occupées par Toto. Mais Toto est poli et accorde à Lili la permission de parler lorsqu’il le veut bien.
Le seul rôle de Lili est d’indiquer si oui ou non, elle a reçu le dernier octet en entier. On dit dans ce cas que Lili est esclave et Toto est maître.

Nous allons compliquer un peu notre chronogramme. Il va falloir différencier ce que fait Toto, ce que fait Lili et ce qui en résulte sur la ligne SDA. Dans ce cas simplifié, la ligne SCL est toujours contrôlée par Toto.
Toto veut toujours envoyer l’octet 65. A la fin de son envoi, il va laisser la parole à Lili.

Chronogramme 6

SCL

 

SDA Toto

SDA Lili

SDA réel

La transmission de l’octet est sans différence avec le chronogramme 3.
La nouveauté, c’est le signal ‘ack’, signifiant acknowledgement ou signal d’acquittement.
Une fois transmis le huitième bit de l’octet, Toto laisse SDA inactif. De son côté, Lili sait que c’est à elle de jouer et impose SDA à l’état bas (actif). Toto rend SCL inactif et regarde sur SDA réel si Lili l’a mis en activité. Dans le chronogramme 6, Lili a bien reçu les 8 bits, elle transmet le signal d’acquittement. Toto est rassuré, il abaisse SCL et pourra continuer à transmettre ses données.

Lorsque Lili n’a pas reçu les informations correctement, elle ne produit pas le signal d’acquittement. Cela produit le chronogramme suivant :

Chronogramme 7

SCL

 

SDA Toto

SDA Lili

SDA réel

Le signal ‘nack’, signifiant no-acknowledgement, est une absence de signal d’acquittement. Dans ce cas, Toto sait que Lili n’a pas reçu correctement les 8 derniers bits transmis. Il y a donc une demande d’acquittement après chaque octet transmis.

 

Je suis sûr qu’une question te dévore l’esprit : comment Lili et Toto peuvent-ils contrôler tous les deux la ligne SDA ?

Là, c’est la super astuce du protocole I²C.

Imagine que Toto et Lili soient des personnages dans une pièce sombre. Ils ont tous les deux une lampe de poche. S’ils ne font rien, la pièce n’est pas éclairée (SDA inactif ou état haut). Si Lili allume sa lampe (SDA Lili actif ou à état bas), la pièce est éclairée (SDA réel actif ou à l’état bas), quelle que soit l’action de Toto. C’est comme cela que fonctionne chacune des deux lignes I²C.

Cette astuce permet aux deux composants (Toto et Lili) de transmettre des informations tous les deux sur les mêmes lignes.

Lorsqu’un composant contrôle le bus I²C, il est maître. Il observe, après l’envoi de chaque octet, la présence d’un signal d’acquittement. Ce signal est produit par un esclave qui confirme par là qu’il a bien reçu l’octet en entier.
Un esclave ne prend jamais d’initiative. Il répond seulement à des demandes d’un maître.

4. Un réseau, des adresses : Qui cause à qui ?