I2C max. Länge auf Platine

Gast #2156408
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
Gast #2156418
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
Gast #2156422
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.
#2156439
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
Gast #2156943
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.
Gast #2157191
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
Gast #2157254
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
Gast #2157412
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.
Gast #2158022
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren