Gestion des conflits

La gestion des conflits

Mise en situation

La structure même du bus I2C a été conçu pour pouvoir y accueillir plusieurs maîtres. Se pose alors le problème commun à tout les réseaux utilisant un canal de communication unique : la prise de parole. En effet, chaque maître pouvant prendre possession du bus dès que celui-ci est libre, il existe la possibilité de que deux maîtres prennent la parole en même temps. Si cela ne pose pas de problème sur le plan électrique grâce l'utilisation de collecteurs ouverts, il faut pouvoir détecter cet état de fait pour éviter la corruption des données transmises.


Principe

Comme nous l'avons vu précédemment, pour prendre le contrôle du bus, un maître potentiel doit d'abord vérifier que celui-ci soit libre, et qu'une condition d’arrêt ait bien été envoyée depuis au moins 4,7μs. Mais il reste la possibilité que plusieurs maîtres prennent le contrôle du bus simultanément.


Chaque circuit vérifie en permanence l'état des lignes SDA et SCL, y compris lorsqu'ils sont eux même en train d'envoyer des données. On distingue alors plusieurs cas :

    1. Les différents maîtres envoient les mêmes données au même moment :

Les données ne sont pas corrompues, la transmission s'effectue normalement, comme si un seul maître avait parlé. Ce cas est rare.

    2. Un maître impose un '0' sur le bus :

Il relira forcément '0' et continuera à transmettre. Il ne peut pas alors détecter un éventuel conflit.

    3. Un maître cherche à appliquer un '1' sur le bus :

Si il ne relit pas un niveau '1', c'est qu'un autre maître a pris la parole en même temps. Le premier perd alors immédiatement le contrôle du bus, pour ne pas perturber la transmission du second. Il continue néanmoins à lire les données au cas celles-ci lui auraient été destinées.


Exemple

Soit le chronogramme suivant :

Dans cet exemple :

  • SCLR : Horloge résultante.
  • SDA1 : Niveaux de SDA imposés par le maître n°1.
  • SDA2 : Niveaux de SDA imposés par le maître n°2.
  • SDAR : Niveaux de SDA réels résultants lus par les deux maîtres.


Analyse :

  • Le premier octet est transmis normalement car les deux maîtres imposent les même données. (Cas n°1). Le bit ACK est mis à '0' par l'esclave.
  • Lors du deuxième octet, le maître n°2 cherche à imposer un '1' (SDA2) , mais relit un '0' (SDAR), il perd alors le contrôle du bus et devient esclave (Cas n°3) . Il reprendra le contrôle du bus, lorsque celui-ci sera de nouveau libre.
  • Le maître n°1 ne voit pas le conflit et continue à transmettre normalement. (Cas n°2)
  • Au total, l'esclave à reçu les données du maître n°1 sans erreurs et le conflit est passé inaperçu.


Créé avec HelpNDoc Personal Edition: Créer de la documentation iPhone facilement