I²C
Un article de Wikipédia, l'encyclopédie libre.
Cet article est une ébauche à compléter concernant l'électronique, vous pouvez partager vos connaissances en le modifiant. |
I²C (pour Inter Integrated Circuit Bus) est le nom du bus historique, développé par Philips pour les applications de domotique et d’électronique domestique au début des années 1980, notamment pour permettre de relier facilement à un microprocesseur les différents circuits d’une télévision moderne.
Sommaire |
[modifier] Présentation
I²C est un bus qui a émergé de la "guerre des standards" lancée par tous les acteurs du monde électronique. Ainsi, dans votre téléviseur, tous les ensembles sont sur un bus I2C (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 implantable 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 aux nombreux composants.
Les données sont transmises en Série de manière synchrone, cela signifie que les informations sont envoyées à la suite sur le même fils (une donnée par coup d'horloge), contrairement à la communication parallèle où plusieurs données sont envoyées en même temps, mais sur différents fils, par nature les protocoles séries sont donc beaucoup plus lent qu'une connexion parallèle, cependant l'I²C convient tout à fait à toutes les applications où la vitesse n'est pas primordiale.
[modifier] Fonctionnement
Un bus i2c contient trois fils:
- Un signal de donnée ( SDA )
- Un signal d'horloge ( SCL )
- Un signal de référence ( Masse )
Le périphérique qui gère la communication est le maître, c'est lui qui génère l'horloge (SCL) et qui envoie les données (SDA) mis à part l'acknowledge.
L'horloge n'est pas une « véritable » horloge, dans le sens ou les ton et toff peuvent varier les uns par rapport aux autres.
L'acknowledge est un 'bit' envoyé par le composant esclave pour indiquer qu'il a bien reçu toutes les données ; si c'est le cas l'esclave impose le niveau 0, sinon la résistance de pull-up maintient la ligne à 1, on dit alors qu'il n'y a pas d'acknowledge.
Au début de la communication SDA passe à 0 alors que SCL reste à 1, c'est le StartBit.
Après avoir imposé la condition de départ, le maître applique sur SDA le bit de poids fort.
Il latch (valide) la donnée en appliquant pendant un instant un niveau #1 sur la ligne SCL.
Lorsque SCL revient à #0, il recommence l'opération avec le bit inférieur jusqu'à ce que l'octet complet soit transmis.
Il redéfini ensuite SDA comme une entrée et scrute son état ; l'esclave doit alors imposer un niveau #0 pour signaler au maître que la transmission s'est effectuée correctement, c'est l'acknowledge, la communication peu donc continuer.
Si l'esclave n'envoie pas l'acknowledge les résistances de pull-up maintiennent la ligne à #1. La communication peut alors être arrêtée, ou reprendre à zéro (dépend de la configuration).
Le premier octet envoyé est l'adresse, il est composé de 7bits variable selon le composant et du bit de read/write (0 pour write, 1 pour read).
Le second octet peut être le byte de contrôle sur certains composants, ou directement la donnée.
[modifier] L'adressage
Plusieurs composants peuvent être branchés sur le même bus I2C. Pour que l'information aille au bonne endroit chaque composants possède sa propre adresse.
Elle est composée d'une partie fixe imposée par le constructeur, d'une partie configurable de façon matérielle par l'utilisateur, et du bit de read/write qui définit le sens de la transmission (0 pour écriture, 1 pour lecture)