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 ?

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

Toto est un petit filou. Non seulement il veut causer avec Lili, mais aussi avec Fleur. Bien entendu, il ne veut pas que ses messages arrivent aux deux composants. L’affaire se complique...
En pratique, imaginons que nous ayons un robot et que :

Il ne faudra pas confondre la vitesse et la direction, au risque de voir le robot se comporter comme s’il était en état d’ébriété.

Revenons à nos composants. Pour différencier ses deux esclaves, Toto commencera tous ses messages par une adresse, comme s’il écrivait un courrier. Pour cela, une adresse est affectée à chaque composant.

A savoir : chaque composant électronique I²C reçoit une adresse lors de sa fabrication. Cette adresse a une partie fixe et une partie paramétrable pour permettre de combiner des composants identiques. Pour plus de renseignements, se reporter à l’annexe 3 : les composants I²C courants.

Chronogramme 8

SCL
SDA
adresse esclave
r/w
ack
donnée 1
ack

Remarque : les croisillons sur la ligne SDA sont là pour signifier qu’il peut y avoir un changement d’état, suivant le bit que l’on veut envoyer.

Chaque message doit se composer d’un octet d’adressage, d’une demande d’acquittement, suivi des octets de données avec leurs acquittements (comme vu dans le point 3).
L’octet d’adressage se compose des 7 bits d’adresse de l’esclave puis d’un bit r/w (read/write). Ce bit informe l’esclave qu’il va recevoir ou émettre des données. Ce bit est mis, par le maître, à l’état actif lorsqu’il veut envoyer des données (écriture), et à l’état inactif lorsqu’il veut recevoir des données de la part de l’esclave (lecture).

Reprenons nos composants favoris. Toto veut envoyer un message à Fleur. Ce message consiste en une suite de 3 nombres : 65, 86 et 69. Imaginons que l’adresse de Fleur soit en binaire 0100 001_.

A savoir : Une adresse de composant s’écrit toujours avec 7 bits suivi d’un ‘x’ pour prévoir le bit ‘r/w’. Cette façon d’écrire permet de manipuler un octet entier (et pas 7 bits seulement). De manière logiquement abusive mais admise, lorsqu’une adresse I²C est convertie en décimal, on fait comme si le ‘_’ est un 0. Ainsi, l’adresse de Fleur s’écrira en décimal 66.

On ne s’en lasse pas.

Remarque : Que se passerait-il si Fleur n’avait pas bien reçu les données ? Elle n’aurait pas envoyé un signal d’acquittement. Toto le saurait et pourrait alors faire une nouvelle tentative ou désespérer de ne pas être correctement écouté (mais c’est plus rare). Tout dépend du programmateur qui a défini le comportement de Toto.

Pendant tout ce temps, Lili est restée coite et inactive. Elle voit seulement sur le bus I²C qu’il y a des informations qui ne la concernent pas.

Pour t’amuser, tu peux compléter la ligne SDA (SDA réel) du chronogramme 9 de la conversation que Toto entretient avec Fleur.

Chaque composant I²C a une adresse. Lorsqu’un maître envoie un message, il commence par transmettre l’adresse du composant auquel il veut s’adresser puis le sens de la transmission (écriture ou lecture).

 

Deux questions te torturent de nouveau l’esprit, n’est-ce pas ?

  1. Comment va faire Toto pour ne plus parler à Fleur mais à Lili ?
  2. Si l’adresse de Lili est 0100000x (64), sachant que la première donnée transmise par Toto à Fleur est 01000001 (65), est-ce que Lili n’aurait pas le sentiment qu’on s’adresse à elle ?

Quelle serait ta proposition ? (Tu peux en cocher plusieurs.)

Il suffit de rajouter un fil entre Toto et chaque esclave (pour l’enchaîner) qui préviendra ce dernier que c’est à lui que Toto veut causer.
Tu n’as pas d’idées, mais tu me fais confiance pour découvrir ça tout de suite après.
Il faut juste faire la différence entre l’adresse et les données, pour que Lili ne confonde pas.
Autre (pas la peine de préciser).

 

 

 

 

 

 

 

 

Bravo, tu as de toute façon raison !

Mais sachant qu’une contrainte de départ est qu’il n’y a que deux fils reliant les composants, la première proposition n’est pas retenue.

5. Les conditions de départ et de fin