I²C
- Renaud Jordi
- 4 juil.
- 2 min de lecture
2 fils : 1 horloge, 1 data. Rien de plus simple. Et pourtant, ça fait des années que ça dure…
Créé en 1982 par Philips, ce bus série est half-duplex, autrement dit en communication bidirectionnelle non simultanée.
Pour la détection de collision, le montage en collecteur ouvert est privilégié. Ce qui veut dire qu’une mise à la masse (niveau 0) sera toujours prioritaire sur un appel au 5V (niveau 1). Cela implique aussi des temps de montée dépendant directement de l’impédance et de la capacitance de la ligne, donc un débit à contrôler.
Initialement limité à 100 kbits/s, puis rapidement à 400 kbits/s, les contraintes de design dans les évolutions de la norme permettent aujourd’hui d’atteindre une vitesse de 3.4 Mbits/s (ou 5 Mbits/s unidirectionnel en push-pull).
Côté data, la communication est toujours initiée par le master qui, en un octet, permet de choisir le périphérique à adresser (avec 7 bits) et le sens de communication (lecture / écriture avec 1 bit).
Ensuite, c'est un jeu d’acquittement à chaque octet. Si le consommateur a bien reçu la donnée et est en capacité d’en recevoir d’autres, il impose un niveau 0 sur la ligne, sinon celle-ci reste à 1 et le producteur peut interrompre la communication.
=> Une évolution de la norme en 1992 a permis de rajouter un mode d’adressage de 10 bits en utilisant les 2 premiers octets de la trame.
C’est un bus très apprécié par sa facilité d’intégration (moins de pins, donc boitiers plus petits et moins de pistes à router). De plus, rajouter ou supprimer un composant se fait sans impact sur le design, contrairement au SPI où il faut penser à la broche de Select.
En bref : plus lent que le SPI, mais plus facile à intégrer 🙂
Maintenant, vous savez quel bus prendre ;)
