Cours 243-648 Communications Numériques Le bus I2C en mode multi-maître Claude Barbaud A-08 5 septembre 2008 1. Mode multi-maître De plus en plus de circuits comprennent plusieurs processeurs capables d’accéder, par le bus I2C, aux mêmes interfaces. Le protocole I2C est capable de travailler en mode multi-maître : écoute de la ligne pour savoir si elle est occupée. synchronisation assurée par le maître qui à le contrôle. Notons que le mode multi-maître n’est possibles qu’avec des processeurs qui possèdent tous le mode multi-maître. Si un processeur ne possède pas ce mode, il ne respecte pas la procédure et risque de prendre contrôle inopinément du bus. 2. Synchronisation Tous les maîtres génèrent leur propre horloge sur la broche SCL pour transmettre des messages sur le bus I2C. Les données sont transférées pendant la partie haute de l’horloge. Le fait que les broches de tous les circuits I2C (SCL et SDA) soient en collecteur ouvert ou en drain ouvert, avec des résistances de Pull-Up détermine un branchement en ET câblé : dès qu’un circuit place sa sortie à 0, toutes sont à 0. I2C multi-maître Page 1 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 (1 er 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. I2C multi-maître Page 2 Évidemment, les deux(ou plus) maîtres peuvent adresser le même périphérique. L’arbitrage continue alors sur le byte suivant, selon le même principe. Si le gagnant est en train d’adresser le perdant, celui-ci doit se mettre immédiatement en mode esclave. Il n’y a donc pas de « super-maître » dans ce bus, ni de procédure de gestion des priorités. 4. Utilisation du mécanisme de synchronisation pour créer un « hand-shake » Un périphérique lent peut profiter du Et-câblé et du mécanisme de synchronisation pour éviter de se faire inonder de données. Il lui suffit de garder son SCL au niveau 0 après réception et acquittement. Le maître est alors obligé d’attendre que l’esclave remette son SCL à 1 pour reprendre le transfert de données. I2C multi-maître Page 3