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.
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle