Qu'est-ce que I2C ?
Communication série synchrone qui connecte plusieurs équipements sur deux lignes, horloge (SCL) et données (SDA), et sélectionne le correspondant par une adresse. Les lignes sont à drain ouvert avec résistances de rappel (pull-up).
Nom japonais: I2C
« I2C » apparaît dans 4 questions d'entraînement réparties sur 1 thèmes, dont Systèmes embarqués et firmware.
Domaine: Systèmes embarqués et firmware
Deux fils à drain ouvert
L'I2C (inter-integrated circuit) relie un contrôleur et de nombreux périphériques cibles (historiquement appelés maître et esclaves) avec seulement deux lignes : une horloge série, SCL, et des données série, SDA. Chaque équipement ne pilote les lignes que par des sorties à drain ouvert, qui peuvent tirer une ligne au niveau bas ou la relâcher ; des résistances de rappel (pull-up) ramènent les lignes relâchées au niveau haut. Ce montage en ET câblé (wired-AND) garantit que deux équipements ne peuvent jamais s'opposer avec des niveaux contraires. La valeur des résistances de rappel est un compromis : des résistances plus faibles chargent plus vite la capacité du bus pour des fronts montants plus nets, mais gaspillent davantage de courant lorsqu'une ligne est maintenue au niveau bas. Les classes de vitesse courantes sont le mode standard à 100 kHz, le mode rapide à 400 kHz et le mode rapide plus à 1 MHz.
Anatomie d'un transfert
Un transfert commence par une condition START, SDA descendant pendant que SCL est haut ; en dehors de cela, SDA ne peut changer que lorsque SCL est bas. Le contrôleur envoie ensuite une adresse de 7 bits et un bit de lecture/écriture. Au neuvième coup d'horloge de chaque octet, le récepteur acquitte en tirant SDA au niveau bas (ACK) ; si SDA reste haut, c'est un NACK. Les octets de données suivent, chacun avec son propre acquittement, et une condition STOP, SDA montant pendant que SCL est haut, termine le transfert. La lecture d'un registre de capteur écrit généralement d'abord le numéro de registre, puis émet un START répété pour changer de sens sans libérer le bus.
Étirement d'horloge et arbitrage
Les lignes à drain ouvert permettent aussi aux équipements de coopérer. Une cible lente peut maintenir SCL au niveau bas après un octet, ce qu'on appelle l'étirement d'horloge (clock stretching), et le contrôleur attend que la ligne soit relâchée. Lorsque deux contrôleurs démarrent en même temps, chacun surveille SDA pendant qu'il émet ; un contrôleur qui relâche SDA pour un 1 mais la voit maintenue à 0 sait qu'un autre équipement envoie un 0, et il se retire. Le message du gagnant n'est jamais corrompu. Lors d'un dépannage, l'absence d'ACK après l'adresse indique une mauvaise adresse, un équipement absent ou non alimenté, ou un câblage défectueux.
Questions fréquentes
Pourquoi l'I2C a-t-il besoin de résistances de pull-up ?
Les équipements I2C utilisent des sorties à drain ouvert qui ne peuvent que tirer une ligne au niveau bas ; des résistances sont donc nécessaires pour ramener SDA et SCL au niveau haut lorsqu'aucun équipement ne les pilote. Sans résistances de rappel, les lignes seraient flottantes et le bus ne fonctionnerait pas.
Quelle est la vitesse de l'I2C ?
Le mode standard fonctionne jusqu'à 100 kHz, le mode rapide à 400 kHz et le mode rapide plus à 1 MHz, avec un mode haute vitesse moins courant à 3,4 MHz. La vitesse réelle est aussi limitée par la capacité du bus et la valeur des résistances de rappel.
Quelle est la différence entre I2C et SPI ?
L'I2C partage deux fils à drain ouvert entre de nombreux équipements et les sélectionne par adresse, ce qui économise des broches mais limite la vitesse. Le SPI utilise une horloge, des lignes séparées d'entrée et de sortie de données et une sélection de puce par périphérique, ce qui permet des vitesses bien plus élevées au prix de davantage de fils.