Anfälligkeit von I2C-Bus Hardware?

Gast #2992598
Lesenswert?

Hallo Leute,

ich brauche eure Einschätzung hinsichtlich hinsichtlich der Anfälligkeit 
von I2C-Bus Hardware. Ich möchte eine Strom-/Spannungsmessung für 
Kraftfahrzeuge realisieren.
Über einen Atmel lese ich über den I2C-Bus mehrere A/D-Umsetzer aus. Auf 
dem Labortisch hat der Aufbau immer gut funktioniert. Prototypisch im 
Auto montiert funktioniert die Datenübertragung nicht mehr.
Ich benutze den Code von Peter Fleury. Beim überprüfen des Slaves bleibt 
der Code jedoch immer hängen. (
1
if(!(i2c_start(slaveadresse+I2C_WRITE)))  // Slave bereit zum Schreiben?
)


Ich vermute ein Hardwareproblem. Nachdem das Problem aufgetreten ist, 
habe ich ein 2. Board eingesetzt. Dies hat kurzzeitig funktioniert, bis 
ich die Pull-Up-Widerstände getauscht habe. Dann gleiches Problem wie 
oben beschrieben.

Die Pull-Up-Widerstände habe ich von 4,7k auf 680R getauscht, da die 
Flankensteilheit durch lange Busleitungen zu gering und dadurch die 
Übertragung teilweise fehlerhaft war.

Sind diese Widerstände zu niederohmig und haben die I2C-Hardware des 
Controllers zerstört? Bzw. ist im Atmel der Bus i.A. kurzschlussfest?

Habt ihr Anregungen für mich?

Danke,
Bastian
Gast #2992625
Lesenswert?

Bastian G. schrieb:
> Sind diese Widerstände zu niederohmig und haben die I2C-Hardware des
> Controllers zerstört? Bzw. ist im Atmel der Bus i.A. kurzschlussfest?

Kurzschluß wohin? Nach GND passiert nichts, nach Vcc ist sicher nicht 
gesund.

I2C Ausgänge müssen mindestens 3mA nach GND treiben können. Zusammen mit 
der Busspannung kann man die zulässigen Widerstände ausrechnen. Dein µC 
wird mehr als 3mA schaffen, deine Slaves ???

Probleme bei längeren Leitungen sind häufig klassisches Übersprechen, 
hier zwischen SDA und SCL, weniger "krumme" Signale.

MfG Klaus
Gast #2992643
Lesenswert?

Was hast du für eine Datenrate?
Wie Lange ist die Leitung?

Prinzipiell ist I2C aus Bussystem auf einer Platine gedacht. Wenn man da 
jetzt lange Kabel dranhängt muss man sich nicht wundern das man mit der 
Datenrate runter muss. Auch ist bei einer langen Leitung der 
Spannungsabfall ewt. ein Problem wen man die Pullups zu niederohmig 
macht.
Gast #2992759
Lesenswert?

Ich habe ja nicht gesagt das es nicht geht und das es gemacht wird. Es 
gibt ja auch Leute die haben damit ein ganzen Hausbus mit aufgebaut.
Entwickelt wurde es aber nicht für diese Anwendung. Wenn man bei der 
einen oder andern Sache Abstriche macht geht so was natürlich ohne 
Probleme.

Ich denke wenn man die Geschwindigkeit auf - sagen wir mal - 20 kBit/s 
runter schraubt und die Widerstände nicht so klein macht wird das schon 
klappen...

Offtopic:
Ich kann auch mit einem Porsche 5 Säcke Zement, auf dem Beifahrersitz 
transportieren, nur sollte ich dann nicht unbedingt mit 200 km/h über 
die Autobahn brettern.
Gast #2992774
Lesenswert?

Ich hatte auch mal Probleme mit einem gestörten I2C-Bus, wobei in 
unmittelbarer Nähe über ein Schütz eine Last geschaltet wurde. Zudem war 
über die lange Leitung auch noch ein starkes Übersprechen beim SW-I2C zu 
beobachten. Gegen Übersprechen hat es schon geholfen, den I2C-Bus von 
der TWI-HW zu treiben. Mit den Stromspiegeln als aktive Pullups war von 
den Übersprechen nichts mehr zu sehen und auch die Störungen des 
Schützes waren vernachlässigbar klein.
Gast #2992823
Lesenswert?

Die Busleitung war 50-60cm lang und der Controller wurde aus einer 
separaten Batterie versorgt. Auch lief der Motor des Autos nicht.
Mit der gleichen Verkabelung hat es auf der Werkbank bei 400 kBit und 14 
Knoten immer problemlos funktioniert.
Ich habe den GND vom Controller mit der Fahrzeugmasse verbunden, jedoch 
sollte dies kein Problem sein.
Gast #2992833
Lesenswert?

Die 680R sollten noch keinen IC geschädigt haben (bei 3.3V), sie sind 
aber nach der I2C-Spec etwas zu tief geraten. 3mA ist der maximale Strom 
für den Standard- und den Fast-Mode, also wäre das Minimum so ca. 1kΩ 
(bei 3.3V). Es wird wohl so sein, dass die Empfänger nicht mehr 
zuverlässig den LOW-Pegel sehen, wenn du zu tief liegst. Siehe auch 
http://ics.nxp.com/literature/interface/?search=Specification
Der Ansatz, mit den Pullups runter zu gehen, war aber schon richtig. 
Zudem kann man noch an den Eingängen einige 10Ω in Serie schalten und 
vielleicht über einen kleinen Kondensator (Bereich 10pF ... 50pF) direkt 
an den Eingängen nachdenken.
Etwas vergleichbares zum Vorschlag von Marco S ist in der Spec auch 
enthalten.
Gast #2992921
Lesenswert?

Danke, ich werde morgen mal einen Wert um 2kΩ probieren. Mein System 
läuft auf 5V. Hoffentlich lässt sich der Controller reanimieren...

Die Serienwiderstände nur auf der Seite des Controllers oder an jedem 
Knoten?
Gast #2992991
Lesenswert?

holger schrieb:
> Über ein DVI Kabel laufen aber auch keine Ströme von
> mehreren Ampere.

Sicher richtig. Wobei die Ströme eigentlich unerheblich sind, es sind 
die Stromänderungsgeschwindigkeiten (furchtbares Wort, eigentlich steile 
Flanken im Strom). Wenn die überkoppeln, hat man etwas falsch gemacht, 
ob I2C, SPI oder RS232. Differentiell macht es etwas leichter, das 
Problem bleibt aber.

MfG Klaus
Gast #2993005
Lesenswert?

Bastian G. schrieb:
> Die Serienwiderstände nur auf der Seite des Controllers oder an jedem
> Knoten?

Schlechte Idee. Serienwiderstände heben bei einem Open-Collectorbus den 
Low-Pegel an. Und alle SM-Bus kompatiblen Bausteine haben 
Schaltschwellen wie TTL, 0,8V. Sie sind eigentlich nur Angstwiderstände 
um den Strom durch die Substratdioden bei Störungen zu begrenzen, die 
Signale machen sie aber schlechter.

MfG Klaus
Gast #2994415
Lesenswert?

Ich habe heute für die Pullups jeweils 2,1kΩ eingesetzt. Plötzlich hat 
die Übertragung wieder problemlos funktioniert. Warum es gestern mit den 
680Ω nicht mehr funktioniert hat, obwohl es vor Weihnachten mehrere 
Wochen lief, ist mir allerdings nicht verständlich..

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