Longueur maximale du bus I2C?


38

Quelle est la longueur maximale de câble pouvant être utilisée pour connecter deux périphériques I2C (maître I2C -> esclave I2C)?

Oui, je sais qu'I2C est vraiment conçu pour la communication intra-carte. Un "objectif de conception" m'a été confié: utiliser un bus I2C commun pour plusieurs esclaves I2C afin de prendre en charge une démonstration.

Par souci de clarté, supposons le débit de bus I2C standard de 100 kHz.


1
La longueur maximale vient jouer avec la capacité introduite par la longueur. Trop de capacité et cela pourrait affecter votre vitesse. Donc, comme toujours, cela dépend.
Gustavo Litovsky

@ GustavoLitovsky Vous avez raison en ce qui concerne la capacité. Cela dépend également du type de câble utilisé (blindé ou non blindé). Je suis plus intéressé par une ligne directrice générale.
Nate

2
@Nate Guideline: capacité nette maximale du bus de 400 pF. (Un peu lié à la question: Mémoires d'un bus I2C envahi par la végétation .)
Nick Alexeev

1
I2C = bus de circuit inter-intégré. Il n'est pas conçu pour les longues distances entre les boîtiers, et certainement pas à 400 kHz.
Spehro Pefhany

1
Je voulais juste mettre une expérience personnelle en dehors des calculs. J'ai fait une démonstration d'une carte de développement à un convertisseur I2C vers USB avec un câble non blindé d'environ 3 pieds. Ça n'a pas l'air joli, mais ça a marché 90% du temps.
mcmiln

Réponses:


16

Pour le mode rapide et l’extension de la résistance, la capacité doit être inférieure à 200 pF, conformément à la spécification de ce document NXP I2C-bus et au manuel de l’utilisateur .

Avec les sources de courant actuelles, vous pouvez atteindre 400 pF, mais pas avec les résistances.

Si votre fil mesure 20pF / 30cm et que vous avez encore 50pF de capacité parasite et d'entrée, vous êtes limité à 2,25m de longueur de câble. Différentes hypothèses conduiront à des nombres différents.


1
@KrunalDesai Il est spécifiquement mentionné dans le document NXP lié ci-dessus. I2C-bus: spécification et mode d'emploi
Spehro Pefhany

1
Par exemple, la "Wiimote" de la Nintendo Wii utilise une fréquence I2C de 400 kHz ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) pour communiquer avec des périphériques tels que le Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) qui vous pouvez voir, a un câble qui est environ 1m. Les extensions passives sont vendues pour donner 1m supplémentaire ( amazon.com/Extension-Cable-Wii-Nunchuck- Nintendo/dp/ B0039OEV9K ), elles poussent donc dans les limites respectives de 2,25m.
Rob Starling

16

Les longueurs insensées comme 10,25 et 100 m sont parfaitement possibles, et j’utilise souvent la méthode (avec UART, pas avec I2C, mais avec la méthode) lorsque j’ai besoin de rassembler des éléments rapidement. Ce n'est pas exactement la meilleure façon, cependant.

La clé est de connaître votre seuil de tension d'entrée. Assurez-vous que la chute de tension dans le fil de terre est bien inférieure à cela, sinon un émetteur à un potentiel de terre élevé ne sera pas en mesure de tirer la tension suffisamment bas. Manque de tolérance pour les compensations au sol IMHO est la principale raison d'utiliser RS485 ou des émetteurs-récepteurs de capacité (I2C sur CAN est mentionné dans quelques notes d'application).

Idéalement, tous les appareils auront leur propre verrue murale et leur propre batterie et aucun courant ne sera envoyé sur le fil de terre entre les appareils.

Mais prenons CAT5 par exemple. CAT5 ne peut pas être supérieur à 52 pf / m, ou bien ce n'est pas CAT5.

100 m de câble 52pf ont une capacité de 5200pf ou 5.2nf.

5,2n fois 20kohms (pullup) donne une constante de temps d'environ 104 microsecondes. Cela limite la vitesse à environ 10 kHz environ.

En utilisant 2,2 Kohm Pullup, vous pourriez probablement atteindre 100kHz.

J'ai entendu dire que les appareils devraient avoir une résistance sur SDL et SCK, en raison de la grande charge capacitive qu'ils entraînent, de l'ordre de 180 ou 200 ohms.

Mais honnêtement, I2C n’est pas du tout le chemin à parcourir pour les longues distances. Les émetteurs-récepteurs CAN ou RS485 utilisés avec un UART normal sont une solution robuste offrant une très bonne protection contre les défaillances, la résistance aux décharges électrostatiques, la vitesse, la distance, etc., pour un coût d'environ un dollar par puce, les décalages au sol importent peu libre de transporter le pouvoir avec des données.

Le seul inconvénient est qu'un émetteur-récepteur de boîte peut atteindre 70 mA en émission et 1 ou 2 mA en écoutant. I2C ou UART TTL direct peuvent être utiles dans les situations de très faible consommation, mais prenez en compte le temps que vous passez réellement à envoyer.


7

Je travaille pour une entreprise fabriquant des capteurs USB. La plupart d'entre elles sont basées sur des puces de capteur I2C. Ces périphériques peuvent être divisés en deux. Vous pouvez donc installer la partie CPU à un endroit et la partie capteur à un autre. Nous avons effectué de nombreux tests sur la connexion I2C entre le processeur de l'appareil et les capteurs I2C. À 100 kHz, avec un bon protocole de récupération d’erreur, il est facile d’atteindre 25 m à l’aide de câbles de base. Nous avons même réussi à atteindre 100 m une fois avec un câble CAT5.


On dirait que vous parlez de la longueur du câble USB . L’OP s’interroge sur le câblage I2C brut . C'est un sujet totalement différent. Si je me trompe, modifiez votre réponse et je retirerai mon vote négatif.
DoxyLover

1
25m, c'est beaucoup, même pour un usb ...
Vladimir Cravero

3
Non, je parle vraiment de la connexion I2C entre le processeur de périphérique et les puces de capteur I2C, pas de la connexion USB entre l'hôte et le processeur. Voici un exemple: yoctopuce.com/FR/products/yocto-meteo/doc/…
martinm

1
Si vous vouliez utiliser une paire torsadée pour I2C et le pouvoir, quelle paire torsaderiez-vous ensemble? (SDA, SCL), (VCC, GND) ou (SDA, GND), (SCL, VCC)?
Cano64

4
Idéalement, vous n'utilisez pas de paire torsadée. La paire torsadée est utile pour les signaux équilibrés. Si vous n'avez pas d'autre câble, torsadez le signal avec la masse. Si vous ne disposez que de quatre fils, réfléchissez à la quantité d'énergie consommée par l'extrémité distante (vous pouvez vous retrouver avec un décalage de masse supérieur à tolérable) avant de vous engager à utiliser un seul fil pour GND. J'utilise habituellement l'ancien câble Cat5 (pas plus haut! Le double blindage ajoute une capacité dont vous n'avez pas besoin) avec une paire de masse, une paire + 5V et des paires SDA + GND et SCL + GND.
Matthias Urlichs

5

Quelque chose comme le P82B96 de NXP pourrait être utilisé pour modifier les niveaux de tension sur le bus, permettant ainsi des distances beaucoup plus longues.

La fiche technique contient des exemples de longueurs de câble I2C de 3m, 25m, 100m et 250m.

Il y a d'autres puces qui ont des fonctionnalités similaires.


Le problème avec la puce NXP est que vous finissez par avoir besoin de deux fois plus de fils. D'autres idées? les circuits intégrés bidirectionnels que j'ai trouvés ne dépassent pas + 5V.
Matthias Urlichs

4

IIC est un protocole synchrone et, en tant que tel, il peut être exécuté arbitrairement lentement pour répondre aux exigences du système en matière de distance et de bruit.

Il existe de nombreux exemples d'utilisation d'IIC sur un câble, depuis ACCESS.bus dans les années 1990 jusqu'à la manière dont il est utilisé aujourd'hui pour récupérer les informations EDID à partir d'écrans vidéo.


Un autre exemple est le Wii Nunchuck, qui est connecté à la télécommande Wii via I²C à l’aide d’un câble blindé de 4 pieds.
Tcrosley
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.