I2C
Inter-Integrated Circuit
L'I2C, aussi appelé TWI (Two Wire Interface) ou TWSI (Two Wire Serial Interface) est un protocole de communication série utilisant uniquement 2 fils.
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 février 2012, la version 5 en octobre 2012 et la 6e version en avril 2014.
Le SMBus est une restriction du protocole I2C, avec une variante qui est le PMBus.
Connexions
L'interface I2C réclame 2 fils (en plus de la masse) :
- SDA (Serial Data Line) : ligne de données
- SCL (Serial Clock Line) : horloge
Chaque ligne est tirée à la tension max par une résistance, et chaque élément connecté pourra "tirer à la masse" la ligne pour envoyer des signaux.
Les échanges se font de maitre à esclave, et chaque composant connecté au bus peut devenir maitre.

Chaque élément connecté au bus possède une adresse codée sur 7 bits (voire 10), qui permet au maitre de faire une demande à un esclave particulier en envoyant l'adresse sur le bus, puis en attendant une réponse.
Echanges
Au repos, les deux lignes sont à l'état haut.
Il existe deux états, START et STOP, qui permettent de "prendre le bus" et de "libérer le bus".
Ensuite, il s'agit de positionner la ligne de donnée à zéro ou un, puis d'envoyer un créneau d'horloge pour indiquer qu'il faut lire la donnée.

Historiquement deux vitesses sont définies, mais s'autres existent, il faudra se référer aux datasheets des composants :
- Standard mode à 100 kbit/s
- Fast mode à 400 kbit/s
La première chose à faire, après le START, c'est d'envoyer l'adresse de l'équipement visé (sur 7 bits), puis d'écouter la réponse sur le bus : l'esclave doit répondre par un ACK (aknowledge). Puis les échanges se poursuivent.
Tensions différentes
Il arrive que l'on veuille faire communiquer deux composants en I2C, mais qui n'utilisent pas la même tension. Il faut alors ruser un peu pour que ça marche. J'ai déjà été confronté au problème, ça vous évitera de chercher.

Deux transistors judicieusement connectés, et le tour est joué.
- I2C bus (wikipedia english)