I²C Inter-Integrated Circuit

I²C (« I-squared-C »)

est un bus informatique qui a émergé en 1982 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 unmicroprocesseuret différents circuits, notamment ceux d’un téléviseurmoderne: 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 à ces nombreux composants. A chaque composant est attribué une adresse physique qui permettra les échanges.

TWI/Two Wire Interface, identique à  I²C, est un nom introduit par l’industriel Atmle afin d’éviter des confits de marque déposé avec Philipps puis NXP Semiconductor.

Topologie

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 + 1:

  • SDA (Serial Data Line): ligne de données bidirectionnelle,

  • SCL (Serial Clock Line): ligne d’horloge de synchronisation bidirectionnelle.

  • Et 1 masse commune à tous les éléments

Les 2 lignes sont tirées au niveau de tension VDDà travers des résistances de pull-up(RP).

Afin de d’éviter les conflits électriques les Entrées/Sorties synchrones SDA et SCL sont de type « Collecteur Ouvert » dont voici un schéma de principe:

Le nombre maximal 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 théoriquement, mais il dépend également de la capacité(CB) du bus (dont dépend la vitesse maximale du bus). Vitesse standardisée habituelle à 100 kbps et 400 kbps (mais aussi 10kps, 1 Mbps, 3.4 Mbps, 5 Mps)

la longueur bus i2c de l’ordre de 1,5 m.

Enfin le protocole d’échange de données est très simple et bien documenté:

https://www.allaboutcircuits.com/technical-articles/i2c-design-mathematics-capacitance-and-resistance/

`

Codage micropython

la classe i2c se trouve dans la bibliothèque machine qui est inclus dans le noyau de micropython

# appel class I2C de bib machine
from machine import I2C, Pin   

# Pin5=Gpio5--> broche D1
# Pin4=Gpio4--> broche D2
i2c = I2C(scl=Pin(5), sda=Pin(4)

# brancher un module puis pour connaitre son adresse:
i2c.scan()

 exemples de modules i2c