I2C multi-maître Page 2
Si les maîtres ont des horloges différentes, le timing ressemble à celui de la
figure 8.
D’abord, une horloge (CLK1 ou CLK2) place son SCL à 0. Ce changement,
vu par les autres, les oblige à changer aussi.
Ensuite, le circuit ayant l’horloge plus lente(CLK2 dans notre cas) maintient la
ligne SCL à 0. Le plus rapide(CLK1 dans notre cas) doit attendre.
Enfin, le plus rapide place son horloge à 0, obligeant les plus lents à le suivre.
C’est donc le circuit qui possède l’horloge plus rapide qui synchronise le bus.
3. Arbitrage
Normalement, un maître ne décide de parler sur le bus que si le celui-ci est
libre(il « écoute » la ligne et ne parle que si les SDA et SCL sont à 1).
Cependant, deux ou plusieurs maîtres peuvent décider de communiquer en
même temps (à l’intérieur du temps « accepté » par la norme). Plusieurs cas
peuvent arriver :
Si les deux maitres n’adressent pas le même périphérique (1er byte de
donnée = adresse), le gagnant est désigné comme celui qui est le plus
rapide à placer un niveau bas sur la ligne SDA pendant que le perdant
place un niveau haut sur cette ligne. Dans l’exemple de la figure 9, DATA
2 gagne en ayant deux 0 consécutifs pendant que DATA 1 revient à 1.(le
premier front descendant a servi à la synchronisation.
On doit noter que le gagnant peut continuer son transfert comme s’il ne
s’était rien passé : il n’y a pas de perte de données.