Loading AI tools
De Wikipédia, l'encyclopédie libre
I2C (signifie : Inter-Integrated Circuit, en anglais) est un bus informatique qui a émergé de la « guerre des standards » lancée par les acteurs du monde électronique. Conçu par Philips pour les applications de domotique et d’électronique domestique, il permet de relier facilement un microprocesseur et différents circuits, notamment ceux d’un téléviseur moderne : récepteur de la télécommande, réglages des amplificateurs basses fréquences, tuner, horloge, gestion de la prise péritel, etc.
Il existe d’innombrables périphériques exploitant ce bus, il est même implémentable par logiciel dans n’importe quel microcontrôleur. Le poids de l’industrie de l’électronique grand public a permis des prix très bas grâce à la production de masse.
Ce bus porte parfois le nom de TWI (Two Wire Interface) ou TWSI (Two Wire Serial Interface) chez certains constructeurs.
La norme I2C (Inter-Integrated Circuit) a été développée par Philips en 1982. Depuis elle est maintenue par NXP (ex-division semiconducteurs de Philips).
La version 1.0 a été publiée en 1992, la version 2.0 en 1998, la version 2.1 en 2000, la version 3.0 en 2007, la version 4 en , la version 5 en et la 6e version en .
I2C est un bus série synchrone bidirectionnel half-duplex, où plusieurs équipements, maîtres ou esclaves, peuvent être connectés au bus.
Les échanges ont toujours lieu entre un seul maître et un (ou tous les) esclave(s), toujours à l'initiative du maître (jamais de maître à maître ou d'esclave à esclave). Cependant, rien n'empêche un composant de passer du statut de maître à esclave et réciproquement.
La connexion est réalisée par l'intermédiaire de deux lignes :
Il ne faut également pas oublier la masse qui doit être commune aux équipements.
Les 2 lignes sont tirées au niveau de tension VDD à travers des résistances de pull-up (RP).
Le nombre maximum d'équipements est limité par le nombre d'adresses disponibles, 7 bits d'adressage et un bit R/W (lecture ou écriture), soit 128 périphériques, mais il dépend également de la capacité (CB) du bus (dont dépend la vitesse maximale du bus). Il faut savoir que des adresses sont réservées pour diffuser des messages en broadcast et que de nombreuses adresses sont déjà attribuées par les fabricants ce qui limite grandement le nombre d'équipements (une variante d'adressage sur 10 bits existe également).
En mode "Ultra-fast mode" (UFm), le bus est unidirectionnel, il ne peut donc y avoir qu'un seul maître. Les 2 lignes sont renommées USCL (ligne d'horloge) et USDA (ligne de données), et côté maître, elles sont toujours en sortie et de type push-pull. Ce mode a un usage limité : seules les écritures sont possibles car dans ce mode le fil de donnée (SDA) n'est pas bidirectionnel.
Le niveau (« HIGH » ou « LOW ») de la ligne SDA doit être maintenu stable pendant le niveau « HIGH » sur la ligne SCL pour la lecture du bit.
Les équipements connectés au bus le sont par des sorties de type drain ouvert (ou collecteur ouvert) sur les deux lignes SDA et SCL.
Les équipements sont donc câblés sur le bus par le principe du « ET câblé », ce qui veut dire qu'en cas d'émission simultanée de deux équipements, la valeur 0 écrase la valeur 1.
On dit donc :
Lorsque le bus n'est pas utilisé, il est au niveau haut (VDD à travers les résistances de pull-up RP).
Les niveaux utilisés entre les lignes de bus sont proportionnels à VDD :
État | Niveau |
---|---|
Dominant ou « 0 » ou « LOW » | de -0,5 V à 0,3x VDD |
Récessif ou « 1 » ou « HIGH » | de 0,7x VDD à VDD |
Sur certains anciens circuits, les niveaux utilisés peuvent être fixes et donnés par les formules suscitées pour une valeur de VDD = 5 V.
Il existe cinq vitesses de transmission :
Le bus étant synchrone, le maître impose l'horloge via la ligne SCL, il existe des temps minimum à respecter pour les paliers des niveaux « LOW » et « HIGH » sur cette ligne :
Mode | tLOWmin | tHIGHmin |
---|---|---|
Standard | 4,7 μs | 4 μs |
Fast | 1,3 μs | 0,6 μs |
Fast plus | 0,5 μs | 0,26 μs |
Pour les deux vitesses supérieures, les temps dépendent de la capacité du bus (CB).
Les temps et les niveaux de tension dépendent de la capacité du bus (CB) et de la valeur des résistances de pull-up (RP).
Il est difficile de modifier la valeur de la capacité du bus, mais on peut choisir la valeur des résistances pull-up.
La valeur minimale des résistances de pull-up est limitée par le courant des sorties SDA et SCL (IOL) lorsqu'elles sont à l'état LOW (VOL) :
Mode | VOLmax | IOL | RPmin pour VDD=5V |
---|---|---|---|
Standard | 0,4 V | 3 mA | 1 534 Ω |
Fast | 0,6 V | 6 mA | 733 Ω |
Fast plus | 0,4 V | 20 mA | 230 Ω |
Pour les deux vitesses supérieures, les valeurs de IOL ne sont pas fournies.
La valeur maximale de RP est limitée par les temps de montée et de descente.
La variation du signal est donnée par la formule :
Soit pour une variation de LOW = 0,3x VDD à HIGH = 0,7x VDD (choisie comme référence) :
avec tr, le temps de montée des signaux SDA et SCL.
Mode | tr | CB | RPmax |
---|---|---|---|
Standard | 1 μs | 400 pF | 2 950 Ω |
Fast | 300 ns | 400 pF | 885 Ω |
Fast plus | 120 ns | 550 pF | 257 Ω |
Le message peut être décomposé en deux parties[1] :
La condition de START est une transgression de la règle de codage des bits qui est utilisée par le maître pour signifier le début d'une trame.
Cette condition est caractérisée par le passage de la ligne SDA du niveau « HIGH » au niveau « LOW » pendant que la ligne « SCL » est maintenue au niveau « HIGH ».
Chaque esclave doit avoir une adresse unique.
L'octet d'adressage peut être scindé en deux parties :
On peut également considérer que l'adresse est codée sur les 8 bits, chaque esclave a alors deux adresses, l'adresse paire qui sert à lui envoyer des données, l'adresse impaire pour lui demander d'en envoyer.
Plusieurs adresses sont réservées :
Dans le cas d'un adressage sur 10 bits, il faut utiliser deux octets.
Le premier est l'octet « 11110yz0 » (comme précisé ci-dessus), les bits « yz » sont les 2 bits de poids forts de l'adresse, le bit R/W est toujours placé à 0.
Le deuxième octet est utilisé pour les 8 bits de poids faibles de l'adresse, il n'y a pas de bit R/W.
À la suite de l'émission du premier octet, plusieurs esclaves parmi ceux ayant une adresse sur 10 bits peuvent répondre par un ACK (ceux qui ont les mêmes 2 bits de poids fort). Peu importe, à l'issue du 2e octet, seul l'esclave auquel on s'est adressé répondra.
Le bit R/W étant toujours placé à 0, pour demander à un esclave d'écrire, à la suite de l'émission des 2 octets précédents, il faut renvoyer une condition de RESTART suivie de l'octet « 11110yz1 » (avec le bit R/W à 1), pour que l'esclave sache qu'il s'agit d'une commande de lecture.
Le récepteur positionne le bit d'acquittement à :
Si le récepteur est dans l'incapacité de recevoir l'octet, il ne positionnera pas le bit d'acquittement, et celui-ci sera de facto un NACK.
Quand le maître est le récepteur, il positionne également le bit d'acquittement à NACK pour interrompre le dialogue, avant d'envoyer la condition de STOP.
À tout moment, l'esclave peut « bloquer » la ligne SCL au niveau « LOW » pour signaler qu'il est occupé.
Lorsque le maître fournit un niveau « HIGH » sur la ligne SCL, il détecte l'écrasement. Le maître doit continuer à fournir le niveau « HIGH » sur la ligne.
Lorsque l'esclave est à nouveau prêt, il libère la ligne SCL et celle-ci prend alors immédiatement le niveau « HIGH », le cycle reprend.
La condition de RESTART est une transgression de la règle de codage des bits qui est utilisée par le maître pour signifier le début d'une nouvelle trame dès la fin de la trame précédente sans passer par une condition de STOP.
La condition de RESTART est similaire à la condition de START, à cela près que la ligne SCL doit d'abord passer du niveau « LOW » au niveau « HIGH ».
La condition de STOP est une transgression de la règle de codage des bits qui est utilisée par le maître pour signifier la fin d'une trame.
Cette condition est caractérisée par le passage de la ligne SDA du niveau « LOW » au niveau « HIGH » pendant que la ligne SCL est maintenue au niveau « HIGH ».
La synchronisation est réalisée grâce au principe du « ET câblé » sur la ligne SCL :
Les maîtres peuvent avoir des durées de maintien de « HIGH » et de « LOW » différentes des autres maîtres, cependant ils ne doivent commencer à compter cette durée que lorsque la ligne SCL est au niveau voulu.
Cela signifie que si un maître passe de « LOW » à « HIGH » et qu'il veut imposer le niveau « HIGH » pendant 5 ms, il ne pourra commencer ce maintien durant 5 ms que lorsque la ligne SCL sera à « HIGH », soit lorsque tous les maîtres seront à « HIGH », donc la durée du maintien peut être plus longue.
Ce mécanisme implique que, la durée de maintien de la ligne SCL :
Plusieurs règles doivent être respectées par les maîtres :
Mode | Durée avant « bus libre » |
---|---|
Standard | 4,7 μs |
Fast | 1,3 μs |
Fast plus | 0,5 μs |
High-speed | (aucune) |
Ultra-fast | (aucune) |
Trois conclusions :
I2C est à la base :
Ces implantations présentent des différences dans les tensions et les fréquences d’horloge, et peuvent avoir des interrupt lines (IRQ).
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.