Protocole

Protocole

Le protocole I2C définit la succession des états logiques possibles sur SDA et SCL, et la façon dont doivent réagir les circuits en cas de conflits.


La prise contrôle du bus

Pour prendre le contrôle du bus, il faut que celui-ci soit au repos ( SDA et SCL à '1').

Pour transmettre des données sur le bus, il faut donc surveiller deux conditions particulières :

    • La condition de départ  (START: SDA passe à '0' alors que SCL reste à '1' )

    • La condition d’arrêt. ( STOP: SDA passe à '1' alors que SCL reste à '1' )





Lorsqu'un circuit, après avoir vérifié que le bus est libre, prend le contrôle de celui-ci, il en devient le maître . C'est lui qui génère le signal d'horloge.


La transmission d'un octet

Après avoir imposé la condition de départ, le maître applique sur SDA le bit de poids fort D7. Il valide ensuite la donnée en appliquant pendant un instant un niveau '1' sur la ligne SCL. Lorsque SCL revient à '0', il recommence l'opération jusqu'à ce que l'octet complet soit transmis. Il envoie alors un bit ACK à '1' tout en scrutant l'état réel de SDA. L’esclave doit alors imposer un niveau '0' pour signaler au maître que la transmission s'est effectuée correctement. Les sorties de chacun étant à collecteurs ouverts, le maître voie le '0' et peut alors passer à la suite.

Exemple de transmission réussie.

Dans cet exemple :

    • SCL : Horloge imposée par le maître.

    • SDAM : Niveaux de SDA imposés par le maître.

    • SDAE : Niveaux de SDA imposés par l'esclave.

    • SDAR : Niveaux de SDA réels résultants.


La transmission d'une adresse

Le nombre de composants qu'il est possible de connecter sur un bus I2C étant largement supérieur à deux, il est nécessaire de définir pour chacun une adresse unique. L'adresse d'un circuit, codée sur sept bits, est défini d'une part par son type et d'autre part par l'état appliqué à un certain nombre de ces broches. Cette adresse est transmise sous la forme d'un octet au format particulier.



On remarque ici que les bits D7 à D1 représentent les adresse A6 à A0, et que le bit D0 et remplacé par le bit de R/W (L/E) qui permet au maître de signaler s'il veut lire ou écrire une donnée. Le bit d’acquittement ACK fonctionne comme pour une donnée, ceci permet au maître de vérifier si l'esclave est disponible.


Remarques:

    1. Cas particulier des mémoires :

    • L'espace adressable d'un circuit de mémoire étant sensiblement plus grand que la plupart des autres types de circuits, l'adresse d'une information y est codée sur deux octets ou plus. Le premier représente toujours l'adresse du circuit, et les suivants l'adresse interne de la mémoire.


    2. Les adresses réservées :

    • Les adresses 00000XXX et 111111XX sont réservés à des modes de fonctionnement particuliers. Après l'émission d'un appel général, les circuits ayant la capacité de traiter ce genre d'appel émettent un acquittement. 


    • Le deuxième octet permet définir le contenu de l'appel :
      • 0000 0110 : RESET. Remet tout les registres de circuits connectés dans leur état initial (Mise sous tension). Les circuits qui le permettent rechargent leur adresse d'esclave.
      • 0000 0010 : Les circuits qui le permettent rechargent leur adresse d'esclave.
      • 0000 0100 : Les circuits définissant leur adresse de façon matériel réinitialisent leur adresse d'esclave.
      • 0000 0000 : Interdit
      • xxxx xxx1 : Cette commande joue le rôle d'interruption. xxxx xxx peut être l'adresse du circuit qui a généré l'interruption.


Écriture d'une donnée

L'écriture d'une donnée par le maître ne pose pas de problème particulier :

Exemple d'écriture d'une donnée.


Remarque : dans le cas particulier d'utilisation d'ACK, l'écriture d'un octet dans certains composants (Mémoires, microcontrôleur, ...) peut prendre un certain temps. Il est donc possible que le maître soit obligé d'attendre l’acquittement ACK avant de passer à la suite.


Lecture d'une donnée

La lecture d'une donnée par le maître se caractérise par l'utilisation spéciale du bit ACK. Après la lecture d'un octet, le maître positionne ACK à '0' s'il veut lire la donnée suivante ( cas d'une mémoire par exemple ) ou à '1' le cas échéant. Il envoie alors la condition d’arrêt.

Exemple de lecture d'une donnée.

Créé avec HelpNDoc Personal Edition: Créer des livres électroniques facilement