Maximale I2C-Buslänge?

38

Mit welcher Kabellänge können maximal zwei I2C-Geräte (I2C-Master-> I2C-Slave) verbunden werden?

Ja, ich weiß, dass I2C wirklich für die Kommunikation innerhalb des Boards ausgelegt ist. Ich wurde mit dem "Entwurfsziel" beauftragt, einen gemeinsamen I2C-Bus für mehrere I2C-Slaves zu verwenden, um eine Demo zu unterstützen.

Nehmen wir aus Gründen der Übersichtlichkeit die Standard-I2C-Busrate von 100 kHz an.

Nate
quelle
1
Die maximale Länge kommt mir zu Gute, um mit der durch die Länge eingebrachten Kapazität zu spielen. Zu viel Kapazität und es könnte Ihre Geschwindigkeit beeinträchtigen. Das hängt also wie immer davon ab.
Gustavo Litovsky
@GustavoLitovsky Sie sind über Kapazität korrekt. Dies hängt auch von der Art der verwendeten Kabel ab (geschirmt oder nicht geschirmt). Am meisten interessiert mich eine allgemeine Richtlinie.
Nate
2
@Nate Richtlinie: maximale Nettobuskapazität von 400pF. (Etwas im Zusammenhang mit der Frage: Erinnerungen an einen verwachsenen I2C-Bus .)
Nick Alexeev
1
I2C = Inter-Integrated Circuit Bus. Es ist nicht für große Entfernungen zwischen Boxen ausgelegt und schon gar nicht für 400 kHz.
Spehro Pefhany
1
Ich wollte nur ein paar persönliche Erfahrungen einbringen, abgesehen von Berechnungen. Ich habe eine Demo von einer Entwicklungsplatine zu einem I2C zu USB-Konverter mit einem ungeschirmten Kabel über 3ft gemacht. Sah nicht besonders hübsch aus, hat aber in 90% der Fälle funktioniert.
mcmiln

Antworten:

16

Für den schnellen Modus und das Hochziehen von Widerständen sollte die Kapazität gemäß dieser NXP-Dokumentation, I2C-Bus-Spezifikation und Bedienungsanleitung , unter 200 pF liegen .

Mit Stromquellen-Pullups können Sie 400pF erreichen, jedoch nicht mit Widerständen.

Wenn Ihr Kabel 20 pF / 30 cm misst und Sie über weitere 50 pF Streu- und Eingangskapazität verfügen, ist die Kabellänge auf 2,25 m begrenzt. Unterschiedliche Annahmen führen zu unterschiedlichen Zahlen.

Spehro Pefhany
quelle
1
@ KrunalDesai Wird im oben verlinkten NXP-Dokument speziell erwähnt. I2C-Bus Spezifikation und Benutzerhandbuch
Spehro Pefhany
1
Als Beispiel aus der Praxis verwendet die "Wiimote" der Nintendo Wii 400-kHz-I2C ( wiibrew.org/wiki/Wiimote/Extension_Controllers ), um mit Peripheriegeräten wie dem Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) zu kommunizieren du siehst, hat ein kabel das ca. 1m lang ist. Passive Extender werden für eine zusätzliche Länge von 1 m verkauft ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ). Sie drücken also, bleiben aber innerhalb dieser Grenze von 2,25 m.
Rob Starling
16

Die irrsinnig klingenden Längen wie 10,25 und 100 m sind durchaus möglich, und ich benutze die Methode oft (mit UART nicht I2C, aber die Methode steht), wenn ich Dinge schnell zusammenstellen muss. Es ist jedoch nicht gerade der beste Weg.

Der Schlüssel ist, Ihre Eingangsspannungsschwelle zu kennen. Stellen Sie sicher, dass der Spannungsabfall in der Erdungsleitung deutlich darunter liegt. Andernfalls kann ein Messumformer mit hohem Erdungspotential die Spannung nicht ausreichend absenken. Fehlende Toleranz für Ground Offsets IMHO ist der Hauptgrund für die Verwendung von RS485- oder Dosen-Transceivern (I2C über CAN wird in einigen Anwendungshinweisen erwähnt).

Im Idealfall haben alle Geräte ihre eigene Steckdose und Batterie, und es wird kein Strom über das Erdungskabel zwischen den Geräten übertragen.

Nehmen wir zum Beispiel CAT5. CAT5 kann nicht höher als 52pf / m sein, oder es ist nicht CAT5.

100 m 52-pf-Kabel haben eine Kapazität von 5200 pf oder 5,2 nf.

5,2n mal 20 kOhm (Pullup) ergibt eine Zeitkonstante von etwa 104 Mikrosekunden. Dies begrenzt die Geschwindigkeit auf ungefähr 10 kHz.

Mit 2,2 kOhm Klimmzügen könnten Sie wahrscheinlich auf 100 kHz kommen.

Ich habe gehört, dass Geräte einen Widerstand für SDL und SCK haben sollten, wegen der großen kapazitiven Last, die sie treiben, von etwa 180 oder 200 Ohm.

Aber ehrlich gesagt, ist I2C nicht der richtige Weg, um lange Strecken zurückzulegen. CAN-Transceiver oder RS485, die mit normalem UART verwendet werden, sind eine robuste Lösung mit sehr gutem Fehlerschutz, ESD-Beständigkeit, Geschwindigkeit, Entfernung usw., und kosten ungefähr einen Dollar pro Chip frei, Energie zusammen mit Daten zu tragen.

Der einzige Nachteil ist, dass ein Dosentransceiver bis zu 70mA Senden und 1 oder 2mA nur Hören erreichen kann. Daher ist I2C oder Direct TTL UART möglicherweise in Situationen mit extrem geringem Stromverbrauch nützlich.

EternityForest
quelle
7

Ich arbeite für eine Firma, die USB-Sensoren herstellt. Die meisten von ihnen basieren auf I2C-Sensorchips. Diese Geräte können zweigeteilt werden, sodass Sie den CPU-Teil an einem Ort und den Sensorteil an einem anderen Ort installieren können. Wir haben zahlreiche Tests zur I2C-Verbindung zwischen der Geräte-CPU und den I2C-Sensoren durchgeführt. Bei 100 kHz und einem guten Fehlerbehebungsprotokoll können 25 m mit einfachen Kabeln problemlos erreicht werden. Mit CAT5-Kabel konnten wir sogar einmal 100 m erreichen.

martinm
quelle
Es hört sich so an, als würden Sie über die Länge des USB- Kabels sprechen . Das OP fragt nach der Verkabelung von unbehandeltem I2C. Dies ist ein ganz anderes Thema. Wenn ich falsch liege, bearbeite deine Antwort und ich werde meine Ablehnung entfernen.
DoxyLover
1
25m ist auch für einen usb ziemlich viel ...
Vladimir Cravero
3
Nein, ich spreche wirklich von der I2C- Verbindung zwischen der Geräte-CPU und den I2C-Sensor-Chips, nicht von der USB-Verbindung zwischen dem Host und der CPU. Hier ist ein Beispiel: yoctopuce.com/DE/products/yocto-meteo/doc/…
Martinm
1
Wenn Sie Twisted Pair für I2C und Power verwenden möchten, welches Paar würden Sie zusammen verdrillen? (SDA, SCL), (VCC, GND) oder (SDA, GND), (SCL, VCC)?
Cano64,
3
Idealerweise verwenden Sie kein Twisted Pair. Twisted Pair ist nützlich für symmetrische Signale. Wenn Sie kein anderes Kabel haben, verdrillen Sie das Signal mit Masse. Wenn Sie wirklich nur vier Drähte haben, überlegen Sie, wie viel Strom das Remote-Ende verbraucht - möglicherweise haben Sie einen höheren als tolerierbaren Masseversatz -, bevor Sie sich dazu verpflichten, nur einen Draht für GND zu verwenden. Normalerweise verwende ich ein altes Cat5-Kabel (nicht höher! Die doppelte Abschirmung erhöht die Kapazität, die Sie nicht benötigen) mit einem Erdungspaar, einem + 5-V-Paar und SDA + GND- und SCL + GND-Paaren.
Matthias Urlichs
4

IIC ist ein synchrones Protokoll und kann daher beliebig langsam ausgeführt werden, um die Systemanforderungen in Bezug auf Entfernung und Rauschen zu erfüllen.

Es gibt viele Beispiele für die Verwendung von IIC über ein Kabel, angefangen von ACCESS.bus in den 1990er-Jahren bis hin zur Verwendung heute zum Abrufen von EDID- Informationen von Videodisplays.

Dave Tweed
quelle
Ein weiteres Beispiel ist der Wii Nunchuck, der über I²C mit einem 4 Fuß langen, abgeschirmten Kabel mit der Wii-Fernbedienung verbunden ist.
Tcrosley
4

So etwas wie das P82B96 von NXP könnte verwendet werden, um die Spannungspegel auf dem Bus zu ändern und so viel größere Entfernungen zu ermöglichen.

Das Datenblatt enthält Beispiele für I2C-Kabellängen von 3 m, 25 m, 100 m und 250 m.

Es gibt andere Chips mit ähnlicher Funktionalität.

Jeffrey Nichols
quelle
Das Problem mit dem NXP-Chip ist, dass Sie am Ende doppelt so viele Drähte benötigen. Irgendwelche anderen Ideen? Die gefundenen bidirektionalen ICs überschreiten nicht + 5V.
Matthias Urlichs