Forum: Mikrocontroller und Digitale Elektronik I2C max. Länge auf Platine


von Olaf (Gast)


Lesenswert?

Moin,

ist es möglich den I2C Bus ohne zusätzlichen Treiber über 25cm 
Flachbandkabel und 40cm Leiterplatine an einen IC-Slave zu binden? 
Bekomme ich bei so einer Entfernung noch 100kHz als Frequenz hin?

Hab in manchen Beiträgen gelesen, dass die Pullups dann an beiden Enden 
installiert werden sollten - warum?

SPI würde mir als Alternative noch zur Verfügung stehen - bedeutet aber 
mehrere Leitungen....

Gruß
Olaf

von Michel (Gast)


Lesenswert?

Olaf schrieb:
> Hab in manchen Beiträgen gelesen, dass die Pullups dann an beiden Enden
> installiert werden sollten - warum?

Als Leitungsabschluß mit der Impedanz der Leitung, um Reflektionen (und 
damit Signalverformungen) zu verhindern.
MfG

von Jens (Gast)


Lesenswert?

Hallo Olaf!

> ist es möglich den I2C Bus ohne zusätzlichen Treiber über 25cm
> Flachbandkabel und 40cm Leiterplatine an einen IC-Slave zu binden?

Ja... Ich betreibe mehrere Temperaturfühler über je 2m Kabel am I2C-Bus, 
läuft seit Jahren reibungslos...

> Bekomme ich bei so einer Entfernung noch 100kHz als Frequenz hin?

Auch 400kHz sind hier kein Problem...

LG Jens

von Olaf (Gast)


Lesenswert?

coole Sache: hab hier schon ein paar Beiträge gelesen bezüglich dieser 
Längen. Weißt du wie hoch der pF/cm auf einer FR4-Platine ist und / oder 
Flachbandkabel?

Laut Spezifikation vom I2C hat manja 400pF zur Verfügung, wo es auf 
jeden Fall noch funktionieren soll ohne Treiber oder ähnlichem.

von Falk B. (falk)


Lesenswert?

@  Michel (Gast)

>> Hab in manchen Beiträgen gelesen, dass die Pullups dann an beiden Enden
>> installiert werden sollten - warum?

Weil es eine Legende ist.

>Als Leitungsabschluß mit der Impedanz der Leitung, um Reflektionen (und
>damit Signalverformungen) zu verhindern.

Eben das ist Unsinn. I2C ist a) viel zu langsam bezüglich der 
Anstiegszeiten und b) sind die üblichen Pull-Ups mit 1-10K viel zu 
hochohmig, um als Terminierung wirken zu können. Siehe 
Wellenwiderstand.

@  Olaf (Gast)

>coole Sache: hab hier schon ein paar Beiträge gelesen bezüglich dieser
>Längen. Weißt du wie hoch der pF/cm auf einer FR4-Platine ist und / oder
>Flachbandkabel?

Wenn mich nicht alles täuscht hat Flachbandkabel um die 50pF/m. 
Leitungen auf FR4 liegen meist noch drunter, weil der Abstand zur Masse 
höher ist (doppelseitige Platine).

>Laut Spezifikation vom I2C hat manja 400pF zur Verfügung, wo es auf
>jeden Fall noch funktionieren soll ohne Treiber oder ähnlichem.

Mach dir mal nicht soviele Gedanken, I2C ist deutlich robuster als es 
auf dem Papier steht. Da kann man problemlos mit der Taktrate 
runtergehen, wenn es denn nötig sein sollte.

MFG
Falk

von Falk B. (falk)


Lesenswert?

P S Ich hatte mal mit einer Schaltung am I2C Bus in Industrieumgebung zu 
tun, dort lief der I2C Bus über 150m geschirmtes Kabel (oder waren es 
500m?, weiß nicht mehr genau).

MfG
Falk

von MCUA (Gast)


Lesenswert?

Terminieren sollte man (unabhängig von frequenz), wenn die Anstiegs- 
/Abfall-Zeit schneller ist, als die doppelte Laufzeit der Leitung.
Bei 20ns risetime und 5ns/m Kabel-Laufzeit wäre das ab einer Kabellänge 
von 2m.

von Yaro (Gast)


Lesenswert?

Ich hatte einen I2C Bus von 1,5m Länge in einer turbulenten Umgebung 
(Gepulste Ströme von bis zu 20A) laufen und es lief äußerst unstabil, 
bis ich ein USB-Kabel zur übertragung verwendet und die Schirmung auf 
GND gelegt hatte (achtung, nicht die Datenleitungen für I2C verwenden, 
die sind verdrillt...damit gings bei mir garnicht...erst mit den 
Versorgungsleitungen gings relativ sauber)
Wieso verwendest du nicht UART? Ist soweit ich weiß stabieler.

Gruß, Yaro

von Klaus (Gast)


Lesenswert?

MCUA schrieb:
> Terminieren sollte man (unabhängig von frequenz), wenn die Anstiegs-
> /Abfall-Zeit schneller ist, als die doppelte Laufzeit der Leitung.
> Bei 20ns risetime und 5ns/m Kabel-Laufzeit wäre das ab einer Kabellänge
> von 2m.

Nun ja, 20ns risetime ist ja auch eine Frequenz, 20ns rise, 20ns fall 
25MHz.

Bei I2C ist das Problem ein anderes. Der Bus ist open collector und kann 
von allen Busteilnehmern auf low gezogen werden. Die minimale 
Treiberleistung für einen Ausgang ist 3mA, bei der jeweils gewählten 
Busspannung ergibt sich daraus ein minimaler Pullup. Der Maximale Pullup 
ergibt sich aus der Buskapazität, der Busspannung und der maximalen 
risetime von 250ns.

Das kann man aber leicht nachlesen, "THE I2C-BUS SPECIFICATION" von 
Philips, Version 2.1 aus dem Jahr 2000 hat nur 46 Seiten. Da steht alles 
drin und man muß nicht raten.

Auch wenn hier bei I2C Problemen viel an den Pullups gedocktert wird, 
wenn sie nicht gerade ganz vergessen worden sind, sind sie eigentlich 
nie das wirkliche Problem.

Yaro schrieb:
> ch hatte einen I2C Bus von 1,5m Länge in einer turbulenten Umgebung
> (Gepulste Ströme von bis zu 20A) laufen und es lief äußerst unstabil,
> bis ich ein USB-Kabel zur übertragung verwendet und die Schirmung auf
> GND gelegt hatte (achtung, nicht die Datenleitungen für I2C verwenden,
> die sind verdrillt...damit gings bei mir garnicht...erst mit den
> Versorgungsleitungen gings relativ sauber)
> Wieso verwendest du nicht UART? Ist soweit ich weiß stabieler.

Wenn deine Umgebung soviel Mist in einen digitalen Eingang einstreut, 
daß er falsche Signale sieht, ist es egal ob dahinter ein I2C Empfänger 
oder ein UART sitzt. Du hättest also immer abschirmen müssen. Und wie 
gut ein UART funktioniert, wenn du einen Kondensator zwischen Transmit 
und Receive schaltest (das ist verdrillen), weiß ich jetzt nicht. Wenn 
man's richtig macht, geht aber beides.

MfG Klaus

von MCUA (Gast)


Lesenswert?

>Nun ja, 20ns risetime ist ja auch eine Frequenz, 20ns rise, 20ns fall 25MHz.
Nein, zwischen rise u. fall können etliche us liegen.
>Bei I2C ist das Problem ein anderes.
Das Problem der Reflexion ist prinz. immer da, denn dadurch kann es zu 
Fehl-CLK-Interpretat. uä kommen, wenn der Empfänger nicht entspr. Filter 
drin hat.

von Sven (Gast)


Lesenswert?

Siehe unten bei Stromspiegel: Beitrag "Pullups bei I2C"

von debugger (Gast)


Lesenswert?

Michel schrieb:
> Als Leitungsabschluß mit der Impedanz der Leitung, um Reflektionen (und
> damit Signalverformungen) zu verhindern.
Frage : Wie berechnet / misst man die Impedanz der verwendeten Leitung ?

von Der Michel (Gast)


Lesenswert?

z.B.
http://de.wikipedia.org/wiki/Streifenleitung#Leitungswellenwiderstand
oder mit einem VNA
http://de.wikipedia.org/wiki/Netzwerkanalysator

Für deine 25 cm I2C-Leitung würde ich mir da keine Gedanken machen.

von Klaus (Gast)


Lesenswert?

MCUA schrieb:
>>Nun ja, 20ns risetime ist ja auch eine Frequenz, 20ns rise, 20ns fall 25MHz.
> Nein, zwischen rise u. fall können etliche us liegen.

Danke für den Hinweis, wäre ich sonst nicht drauf gekommen. Könnten das 
auch ms sein?

MfG Klaus

von Ulrich (Gast)


Lesenswert?

Die Kapazität der Leitungen liegt bei rund 1 pF / cm. Sehr schmale 
Leiter auf der Platine auch schon mal nur 0,5 pF/cm.
Da sind Überraschend wenig Unterschiede zwischen Leitungen auf der LP , 
Flachbandkabel , Netzleitung oder Koax Kabel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.