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.

Conflits d'adresses et I2C face au SPI

Comme les équipements sont sélectionnés par adresse, deux composants identiques ayant la même adresse fixe ne peuvent pas partager un bus. De nombreux composants offrent des broches de sélection d'adresse qui modifient les bits de poids faible lorsqu'elles sont reliées à l'alimentation ou à la masse ; sinon, utilisez un second périphérique I2C ou un multiplexeur I2C. Comparé au SPI, qui utilise des lignes push-pull et une sélection de puce par périphérique pour atteindre plusieurs dizaines de MHz, l'I2C est plus lent mais ne nécessite que deux fils, quel que soit le nombre d'équipements connectés.

S'entraîner : questions sur I2C

Quelle caractéristique de la communication I2C est correcte ?

  1. AChaque équipement nécessite une ligne de sélection de puce dédiée
  2. BLes lignes d'émission et de réception sont séparées et permettent la transmission simultanée dans les deux sens
  3. CPlusieurs équipements partagent deux lignes, horloge (SCL) et données (SDA), et l'interlocuteur est sélectionné par une adresse
Afficher la réponse et l'explication

Réponse : C. Plusieurs équipements partagent deux lignes, horloge (SCL) et données (SDA), et l'interlocuteur est sélectionné par une adresse

L'I2C est une communication série synchrone reliant plusieurs équipements par deux lignes seulement, SCL et SDA. Le maître envoie d'abord l'adresse 7 bits de l'interlocuteur, et seul l'équipement à cette adresse répond. Les lignes sont à drain ouvert, tirées à 1 par des résistances de tirage, et tout équipement peut les forcer à 0. Elle convient aux composants pour lesquels la réduction du câblage importe plus que la vitesse, comme les capteurs de température, les accéléromètres ou les EEPROM.

En I2C, comment le récepteur d'un octet signale-t-il qu'il l'a reçu ?

  1. ALe récepteur maintient un 1 sur une autre ligne
  2. BLe récepteur force SDA à 0 pendant le 9e cycle d'horloge (ACK)
  3. CLe récepteur renvoie le même octet
Afficher la réponse et l'explication

Réponse : B. Le récepteur force SDA à 0 pendant le 9e cycle d'horloge (ACK)

En I2C, au 9e cycle d'horloge qui suit les 8 bits de données, le récepteur force SDA à 0 pour signaler la réception (ACK). Si personne ne la force, SDA reste à 1 par le tirage : c'est un NACK. Si aucun ACK ne revient après l'envoi d'une adresse, on peut soupçonner l'absence de l'équipement, une coupure de câblage ou une adresse erronée ; c'est un indice utile au diagnostic des pannes.

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.

« I2C » dans les explications

Questions mentionnant « I2C » (4)

  1. Quelle caractéristique de la communication I2C est correcte ?
  2. En I2C, comment le récepteur d'un octet signale-t-il qu'il l'a reçu ?
  3. On veut raccorder deux capteurs de température I2C de même référence sur le même bus I2C, mais ils ont la même adresse. Quel remède est correct ?
  4. Quelle comparaison de l'UART, de la SPI et de l'I2C est correcte ?

Comparatifs incluant ce terme

Termes associés

RIE (gravure ionique réactive) Microcontrôleur Multiplexeur UART SPI Anti-rebond (debounce) Capture d'entrée (input capture) Chargeur d'amorçage (bootloader) Chien de garde (watchdog timer) Débit en bauds

Retour au glossaire