Datenübertragungsraten über Kupferdraht verstehen

11

Ich habe die verschiedenen Möglichkeiten untersucht, Sensoren an ein Arduino anzuschließen, und i2c scheint eine beliebte Methode zu sein. Ich habe gelesen, dass es nur auf kurzen Entfernungen (höchstens einige Meter) mit einer Datenrate von 400 oder 100 kbps zuverlässig ist. Es fällt mir schwer zu verstehen, warum die Grenzen dieses Protokolls im Vergleich zu anderen Datenübertragungen über Kupfer wie Gigabit-Ethernet so niedrig sind. Ich habe Gründe wie Kapazität, Spannungsabfall und Widerstand gesehen, aber ist Ethernet über Cat5 / 6 nicht denselben Problemen ausgesetzt? Grundsätzlich möchte ich wissen, warum das Pulsieren einer Spannung über einen Kupferdraht beim Vergleich dieser verschiedenen Methoden nicht zu konsistenteren Ergebnissen (Bandbreite, Entfernung) führt.

user3629081
quelle
Es gibt viele wichtige Protokolle mit angegebenen Einschränkungen, die häufig ignoriert werden. Ethernet ist nur bis zu 30 Fuß ohne Repeater zuverlässig. USB ist unter 10 Fuß. Das heißt nicht, dass die Leute nicht an ihre Grenzen gehen. Dies sind Implementierungsentscheidungen, die darauf basieren, wie schnell / zuverlässig die Daten sein müssen und ob Sie sich den Datenaufwand für die CRC-Prüfung leisten können.
mreff555
Ich möchte nur darauf hinweisen, dass I2C zwar nicht auf diese Weise verwendet werden soll, es aber definitiv möglich sein sollte, es über 100 m zu verwenden. (Es hat den gleichen theoretischen maximalen Abstand wie Ethernet). Sie haben jedoch entweder eine sehr niedrige Baudrate oder Ihre Pull-up-Ströme sind lächerlich.
Opifex
@Opifex Lächerliche Geschwindigkeit!
DKNguyen
1
Dies ist keine Antwort, und vielleicht sage ich das Offensichtliche, aber die Grenzen in I2C (oder einem anderen Protokoll) sind im Wesentlichen auf das Drahtmaterial und das Protokoll zurückzuführen. Der Kern Ihrer Frage scheint zu sein: "Wenn Methode X mir A über Kupfer bringt, sollten Y und Z mir dann nicht auch A bringen?" was nicht von Natur aus wahr ist.
Dwizum
6
Mit 30 Fuß meinen Sie 328 Fuß / 100 m @ mreff555? Das ist die Spezifikation für Twisted Pair-Ethernet, älteres koaxiales Ethernet war sogar noch länger (200 m für 10base2, 500 m für 10base5).
Mark Booth

Antworten:

14

Shannons Theorem legt die ultimative Grenze der Informationsbandbreite für ein Kabel fest. Hier einige weitere Informationen dazu: https://www.gaussianwaves.com/2008/04/channel-capacity/

tl; dr-Version: die Shannon-Hartley-Gleichung:

  • C.=B.lÖG2(1+S.N.)(1)

Wobei B. die Bandbreite in Hz ist, S.N. ist das Signal-Rausch-Verhältnis.

I2C liegt offensichtlich nicht in der Nähe der Shannon-Grenze für ein Kabel. Stattdessen handelt es sich um ein leichtgewichtiges Protokoll mit absichtlich langsamem Timing (100/400 kbit / s), das einen Open-Collector-Bus verwendet, um die Implementierung für ein Netzwerk kleiner Geräte mit geringen E / A- und Steuerungsanforderungen zu vereinfachen. Der von I2C angegebene langsame Betrieb vermeidet die meisten Probleme mit der Signalintegrität.

Es gibt schnellere I2C-Varianten, die Raten von 1 Mbit und 3,2 Mbit / s verwenden. Diese erfordern mehr Aufmerksamkeit für Layout und Terminierung als normales I2C und haben natürlich ein engeres, anspruchsvolleres Timing.

Gbit Ethernet bewegt die Nahrungskette Shannon-weise nach oben und verwendet mehrere Techniken, um seinen Durchsatz zu erzielen:

  • Differenzsignalisierung
  • Mehrere Paare (4)
  • Mehrstufige Signalisierung, genannt PAM-5
  • Preemphasis / Deemphasis
  • Adaptive Entzerrung

Diese Techniken erfordern viel Silizium, einschließlich eines schnellen ADC / DAC-Blocks mit großen gemischten Signalen, um mit dem Kabel zu sprechen, und einer ziemlich starken Signalverarbeitung, um es zu verwalten. Fügen Sie dazu den viel komplexeren Software-Stack hinzu, um ihn zu steuern. Dies macht Ethernet als On-Chip-Block für einen Low-End-Mikrocontroller zu einem großen Teil (einige von ihnen entscheiden sich stattdessen für die Verwendung eines externen PHY). Aufgrund seiner Reife ist es jedoch für größere Systems-on-Chip-Geräte gut erreichbar.

Wie nah kommen wir überhaupt an die Shannon-Grenze? Mehr hier: https://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf

hacktastisch
quelle
Hah, da ist der Voodoo: Pre-Emphasis und De-Emphasis. Ethernet sendet also nicht nur Rechteckimpulse oder sogar Sinuswellen entlang der Linie und betet, dass es nicht zu stark verzerrt wird, wenn es das Ziel erreicht. Es formt eine analoge Wellenform und sendet sie über die Leitung.
DKNguyen
3
@DKNguyen Das echte Voodoo für 100 Megabit oder schneller Ethernet befindet sich im Empfänger. Es werden adaptive Entzerrungsalgorithmen verwendet, die heutzutage häufig digital implementiert werden. Das empfangene Signal speist einen ADC, gefolgt von DSP-Hardware (alles in Ihrem 0,50-Dollar-PHY-Gerät). Die Technologie in einem neueren Hochgeschwindigkeitsprotokoll ist wieder wesentlich ausgefeilter.
Scary_Jeff
Thx @scary_jeff über die adaptive Gl. Erinnerung. Fügte es meiner Antwort hinzu.
Hacktastical
6

Die Übertragung beinhaltet mehr als nur das Kupferkabel. Haben Sie die Hardware hinter Ethernet gesehen? Wahrscheinlich nicht, weil es äußerst schwierig ist, eine Basisschaltung für das zu finden, was tatsächlich vor sich geht, da die Eingeweide immer in einem IC versteckt sind. Das nächste, das ich je gefunden habe, sind die für Ethernet erforderlichen Magnete, die anscheinend nicht optional sind. Das ist nur ein Hinweis darauf, was physisch mit Ethernet-Hardware los ist.

Stellen Sie sich das so vor: Luft ist ein Medium. Warum ist die Art von Informationen, die vermittelt werden können, wenn Hunde miteinander sprechen, so viel geringer als wenn Menschen miteinander sprechen? Warum führt das Senden einiger Druckwellen durch die Luft nicht zu konsistenteren Ergebnissen bei der Kommunikation zwischen diesen beiden Tierarten?

Nur einige der einschränkenden Faktoren für I2C (und viele andere Protokolle) sind:

  1. Open-Collector-Laufwerk
  2. keine Impedanzanpassung
  3. kein ausgeglichenes Getriebe
  4. Keine Fehlerprüfung
  5. einfaches Codierungsschema
  6. relativ hohe Spannungspegel (wenn Ihr Spannungsschritt nicht so groß sein muss, können Sie schneller senden, da Ihr dV / dT für höhere Geschwindigkeiten nicht so hoch sein muss)
  7. keine Isolation
  8. unipolare Spannungen (Ethernet sendet mit +/- 2,5 V, was wahrscheinlich irgendwie hilft)
  9. Die Übertragung des Slaves wird vom Master getaktet, sodass die Uhr im Grunde genommen einen Roundtrip schneller als das Datensignal ausführen muss

All dies ist gut, um die Dinge einfach zu machen. Nicht so gut für hohe Datenraten oder Fernübertragung.

Es gibt wahrscheinlich auch ein anderes Voodoo in der Hardware, von dem ich nichts weiß.

DKNguyen
quelle
6

Ein paar einfache Faustregeln: Es gibt keinen Grund. Alle Drähte sind Antennen. Alle Drähte sind Übertragungsleitungen. Es gibt immer Lärm.

Wenn ein Draht im Vergleich zur Signalanstiegszeit kurz ist, können Sie Fehlanpassungen und Reflexionen der Übertragungsleitungsimpedanz ignorieren (im Gegensatz zu Ethernet, das komplexe Abschlüsse und Impulsformung erfordert). Wenn der Draht lang ist, führen induzierte Spannungen an den Draht- und Erdungsdifferentialen eher dazu, dass Ihre digitalen Signalpegel am anderen Ende unbestimmt oder falsch sind. Ethernet verwendet jedoch eine Twisted-Pair-Differenzsignalisierung, wodurch das induzierte Rauschen und die Erdreferenzprobleme erheblich reduziert werden. Der Ethernet-Empfänger verwendet auch empfindlichere analoge Eingänge anstelle typischer digitaler Eingänge, wodurch ein höherer Leitungsverlust ermöglicht wird. Fügen Sie die Codierung und Fehlerkorrektur dieses Ethernet hinzu, um die Rauschstatistik zu überwinden, und Sie können zuverlässiger schneller und weiter gehen.

hotpaw2
quelle
5

I2C ist ein offener Drain-Bus , der aktiv nach unten gezogen wird, aber der Pull-up (zumindest für die normalen 100-kHz-, 400-kHz-Varianten) sind passive Widerstände.

Aus diesem Grund gibt es eine Begrenzung, wie schnell das Ding arbeiten kann, basierend darauf, wie schnell die Pull-up-Widerstände die Buskapazität aufladen können. Manchmal können Sie durch Verringern der Pull-up-Werte etwas mehr Geschwindigkeit erreichen, aber das bedeutet dann, dass die Knoten sinken müssen mehr Strom, um eine Logik niedrig zu halten .... Oder Sie können den Bus in die andere Richtung verlangsamen, um die Verwendung von Pull-up-Widerständen mit höherem Wert für eine geringere Verlustleistung zu ermöglichen (siehe zum Beispiel PM-Bus).

Es ist lehrreich, ein Zielfernrohr zu starten und zu beachten, dass die fallende Flanke auf I2C VIEL schärfer ist als die steigende.

Für den beabsichtigten Gebrauch, im Grunde genommen Temperatursensoren und kleine Konfigurationsgeräte innerhalb einer einzelnen Platine (oder höchstens eines einzelnen Gehäuses), stellt sich heraus, dass dies den Sweet Spot zwischen Implementierungskomplexität, geringer Pinanzahl und einfacher Hardware trifft. Die Entwurfsabsicht war nicht "Schnelle Datenverbindungen über große Entfernungen", und trotz allem, was ich finde, dass SPI im Allgemeinen einfacher zu handhaben ist, passt I2C sehr gut zu seinem beabsichtigten Anwendungsfall.

Sobald die Entfernungen zunehmen, passt etwas anderes besser, aber auf einem Board mit bescheidenen EEPROM- / Temperatur- / Gerätekonfigurationsschnittstellen funktioniert dies recht gut (Bemerkenswert ist, dass die PHY-Verwaltungsschnittstelle VIEL wie I2C aussieht).

Dan Mills
quelle
2

Die unterschiedlichen Ergebnisse sind darauf zurückzuführen, dass die Treiberschaltung für jede Technologie unterschiedlich ist.

100-kHz-I2C verwendet normalerweise einen Pullup-Widerstand, um das Signal auf einen hohen Pegel zu bringen, und Open-Drain-Treiber, um das Signal auf einen niedrigen Pegel zu bringen.

Die Pullup-Widerstände betragen typischerweise mehrere Kilo-Ohm. Je länger ein Kabel wird, desto mehr Kapazität hat es. Die Zeit, die die Leitung für den Übergang von 0 nach 1 benötigt, ist proportional zur Gesamtkapazität der Leitung und zum Pullup-Widerstandswert. Irgendwo im Bereich von ungefähr T = 2 * R * C wäre ungefähr richtig.

Wenn Sie beispielsweise ein 10-Fuß-Kabel mit einer Kapazität von 20 pF pro Fuß und einen 10K-Pullup-Widerstand verwenden würden, würde T = 2 * 20pF / ft * 10 ft * 10K = 3,6 us benötigen, um von niedrig nach hoch zu wechseln.

In diesem Fall könnten Sie offensichtlich keine Ein-Bits nach einem Null-Bit haben, das weniger als 3,6 us breit ist, sodass Ihre Übertragungsrate auf 277 kHz begrenzt wäre.

In einem realen I2C-System schreibt die I2C-Spezifikation ferner die Einrichtung und Haltezeiten für Daten- und Taktübergänge vor. Diese Zeiten betragen entweder Hunderte von Nanosekunden oder Mikrosekunden. Das Timing wurde absichtlich sehr langsam gemacht, damit die Geräte kostengünstig implementiert werden können (Pennies) und sehr wenig Strom verbrauchen (Milliwatt).

Ethernet hingegen kann trotz Kabelkapazität schneller laufen, da kein Pullup-Widerstand verwendet wird. Es treibt aktiv entweder hoch oder niedrig in das Kabel. Der Treiber hat eine niedrige Impedanz und kann jede Leitungskapazität sehr schnell aufladen. Das alles hat natürlich einen Preis. Ethernet verbraucht normalerweise Hunderte von mW Strom und kostet mindestens ein paar Dollar pro Port für die Implementierung.

Könnte ein I2C-ähnliches Setup schneller laufen, ändern Sie einfach den 10K-Pullup auf 100 Ohm, und jetzt sinkt Ihre Anstiegszeit auf 10 Fuß Kabel von 3,6 us auf 36 ns. Sie könnten dann wahrscheinlich ohne zu viele Probleme mit etwa 10 MHz laufen (abgesehen von der Tatsache, dass normale I2C-Chips nicht so schnell sprechen können).

user4574
quelle