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.
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 ?
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.