Forum: Mikrocontroller und Digitale Elektronik Zeitweise I2C Fehler


von Michael Z. (Firma: Tintometer GmbH) (michael_z)


Angehängte Dateien:

Lesenswert?

Moin zusammen,
ich hätte da an die Experten mal eine Frage. Wir haben eine Pi4 über ein 
ca. 400mm langes Flachbandkabel an unsere Elektronik angeschlossen. Ab 
und zu treten auf dem I2C Bus Fehler auf die wir uns bis jetzt noch 
nicht erklären können.
Die Flanken und Pegel sind anscheinend innerhalb der Specs. Ab und zu 
ist der Low Pegel vom SDA Signal außerhalb der Specs, hat jemand eine 
Idee welche Ursache das haben könnte.
Danke

von Pandur S. (jetztnicht)


Lesenswert?

Allenfalls arbeiten zwei Ausgaenge gegeneinander ?
Das laesst sich zeigen durch Einfuegen eines 1k Ohm Widerstandes. Auf 
der einen Seite ist die Spannung hoeher.

von jo mei (Gast)


Lesenswert?

Michael Z. schrieb:
> ca. 400mm langes Flachbandkabel

.... ist eine schöne Antenne zum Aufgreifen von äusseren
Störsignalen. Warum ist das so? Der I2C Bus ist sehr hoch-
ohmig, damit sehr empfänglich für äussere Einstreuungen.

Stell dir die Leiterplatte eines Fernsehers vor. Für solche
Distanzen die auf so einer Platine auftreten ist I2C gedacht.
Für nichts anderes! Zudem sind die einwirkenden Einstreuungen
kontrolierbar bzw. vorhersehbar.

I2C ist nichts fürs Verbinden und Kommunizieren von zwei "Geräten".
Es sei denn man macht gehörige Anstrengungen zur Abschirmung.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Michael Z. schrieb:
> Ab und zu
> ist der Low Pegel vom SDA Signal außerhalb der Specs, hat jemand eine
> Idee welche Ursache das haben könnte.

Masseproblem? Testweise eine zusätzliche niederohmige Masseleitung 
zwischen den Baugruppen verlegen.

Grüßle
Volker

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michael Z. schrieb:
> Die Flanken und Pegel sind anscheinend innerhalb der Specs.
Die übliche Buskollision: 2 Teilnehmer sind aktiv auf dem Bus. Einer 
davon gibt (entgegen der I2C-Spec!!) statt 'hochohmig' eine aktive '1' 
aus.

Volker B. schrieb:
> Masseproblem?
Dann wäre SCL aber auch betroffen...

: Bearbeitet durch Moderator
von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Lothar M. schrieb:

> Volker B. schrieb:
>> Masseproblem?
> Dann wäre SCL aber auch betroffen...

Gutes Argument :-)
Aber nur, wenn Takt und Daten auf der gleichen Leiterplatte erzeugt 
werden. Das sagt mir meine Glaskugel leider nicht...

Grüßle
Volker

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

AC + INV, willst Du uns veräppeln?

Einer der Teilnehmer hat kein HW-I2C und das I2C in SW fehlerhaft 
implementiert. Damit kommt es zur Kollision.

von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Michael Z. schrieb:
>> Die Flanken und Pegel sind anscheinend innerhalb der Specs.
> Die übliche Buskollision: 2 Teilnehmer sind aktiv auf dem Bus. Einer
> davon gibt (entgegen der I2C-Spec!!) statt 'hochohmig' eine aktive '1'
> aus.
sdd

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Falk B. schrieb:
> Und 400mm Flachbandkabel sind für I2C kein Problem.

In idealer störungsfreier Umgebung ja.

von HildeK (Gast)


Lesenswert?

jo mei schrieb:
> .... ist eine schöne Antenne zum Aufgreifen von äusseren
> Störsignalen. Warum ist das so? Der I2C Bus ist sehr hoch-
> ohmig, damit sehr empfänglich für äussere Einstreuungen.

Er ist weder 'sehr hochohmig' noch sind 40 cm eine Länge, für die er 
nicht verwendet werden kann und Einstreuungen zeigt das Oszillogramm 
auch nicht.
Es zeigt lediglich einen SDA-Impuls mit falscher Amplitude und das sind 
definitiv andere Ursachen! Es wurden welche genannt.

von A. S. (Gast)


Lesenswert?

Dir ist aber schon klar, dass der Ausreißer das Acknowledge ist?

Also von dem anderen Teilnehmer stammt und damit natürlich einen anderen 
Pegel hat?

Also wie sieht der Schaltplan aus (Rs), wo misst Du? Wo geht das Signal 
"verloren"?

von (prx) A. K. (prx)


Lesenswert?

Peter D. schrieb:
> AC + INV, willst Du uns veräppeln?

Falls das für manche zu kurz formuliert war: Kanal 2 von Scope steht auf 
invertiertem AC-Eingang, statt nichtinvertiertem DC-Eingang.

von Klaus R. (klara)


Lesenswert?

Michael Z. schrieb:
> ich hätte da an die Experten mal eine Frage. Wir haben eine Pi4 über ein
> ca. 400mm langes Flachbandkabel an unsere Elektronik angeschlossen. Ab
> und zu treten auf dem I2C Bus Fehler auf die wir uns bis jetzt noch
> nicht erklären können.

Welche Taktfrequenz?
Welche Pullups?
Welche Spannung?

Ein PCF8574 ist für Vcc min 2,5 V bis 6,0 V spezifiziert. Wenn ich das 
Oszi - Bild richtig interpretiere hat Kanal 1 eine Spannung von 2,42 V 
und rauscht beträchtlich, so daß die Spannung gelegentlich noch tiefer 
liegen könnte. Aber vielleicht liegt das verrauschte Signal ja auch nur 
an einem ungeeigneten GND Messpunkt. Sind die I2C - Bausteine denn 
abgeblockt worden?

Sind die Pullups zu hochohmig?
Zumindest sind die Flanken steil.

Es gibt noch eine Option die versteckt in den I2C Spezifikationen 
vorkommt. SDA und CLK sollten am Eingang eines Client ICs über 330 Ohm 
angeschlossen werden. Das erhöht die Robustheit eines I2C Busses.

mfg Klaus

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

A. S. schrieb:
> Dir ist aber schon klar, dass der Ausreißer das Acknowledge ist?

Wenn ich mich da nicht verzählt habe, ist der aber ein Bit zu früh. Bit 
9 sollte ACK des Slaves sein und nicht Bit 8. Generell finde ich das 
Timing dieses I²C Signals grenzwertig, denn die Flankenwechsel von SDA 
und SCL finden so gut wie gleichzeitig statt, was uncool ist und nicht 
von jedem Slave verstanden werden muss.

von Achim S. (Gast)


Lesenswert?

Matthias S. schrieb:
> Wenn ich mich da nicht verzählt habe, ist der aber ein Bit zu früh. Bit
> 9 sollte ACK des Slaves sein und nicht Bit 8. Generell finde ich das
> Timing dieses I²C Signals grenzwertig, denn die Flankenwechsel von SDA
> und SCL finden so gut wie gleichzeitig statt,

denke dir das SCL Signal invertiert - damit kompensierst du die seltsame 
Einstellung des Oszis

von Nur mal so (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Falls das für manche zu kurz formuliert war: Kanal 2 von Scope steht auf
> invertiertem AC-Eingang, statt nichtinvertiertem DC-Eingang.

Aber trotzdem wird leidenschaftlich weiter über eine Messung diskutiert, 
die auch einfach das Produkt einer falschen Einstellung sein kann.
Spannend!

von A. S. (Gast)


Lesenswert?

Nur mal so schrieb:
> Aber trotzdem wird leidenschaftlich weiter über eine Messung diskutiert,
> die auch einfach das Produkt einer falschen Einstellung sein kann.
> Spannend!

Die falsche Einstellung ist verwirrend und doof. Der unterschiedliche 
Signalpegel beim Ackn ist aber signifikant, keine Einstreuung/Störung 
und ganz sicher mit einem Schaltplan / Signallaufpfad erklärlich.

Ob der höhere Signalpegel selbst problematisch ist, kann hier niemand 
sagen, dafür müsste der TO etwas zur Messung sagen.

Ob die Signale OK sind, kann ich auf dem Oszi auch nicht sehen, will ich 
auch gar nicht, solange der TO uns so veräppelt.

von Michael Z. (Firma: Tintometer GmbH) (michael_z)


Angehängte Dateien:

Lesenswert?

Sorry bin jetzt erst dazu gekommen ein neues Bild von dem I2C Signal zu 
machen.
Heute morgen hatte ich noch nicht die Brille auf um die Falschen 
Einstellung zu sehen.


PullUp Widerstände 1k1 an beiden Signalen
Taktfrequenz 80kHz
Spannung siehe Bild

von Michael Z. (Firma: Tintometer GmbH) (michael_z)


Angehängte Dateien:

Lesenswert?

Wollte eigentlich zwei Bilder Hochladen

von Stefan F. (Gast)


Lesenswert?

EIgentlich sollte es da nur eindeutig HIGH und LOW geben. Ich sehe in 
gelb jedoch zeitweise auch "fast LOW".

Vermutlich zieht jemand die Leitung zu stark hoch. Hast du diese 
billigen 1-Transistor Pegelwandler verwendet? Dann vielleicht mal anders 
herum drehen (Master/Slave Seiten tauschen)

von mkn (Gast)


Lesenswert?

Der I²C geht nie unter 360mV.
Findest Du das nicht merkwürdig?

Sieht mir nach viel zu niederohmigen pull-ups aus und amokenden Slaves 
die Mist sehen und noch weniger in der Lage sind den Bus auf Low zu 
ziehen als der Master.

von Peter D. (peda)


Lesenswert?

Der Low-pegel sieht mir viel zu hoch aus.

von Michael Z. (Firma: Tintometer GmbH) (michael_z)


Lesenswert?

Warum solte bei falschen PullUp Widerständen das Signal fast auf Masse 
liegen und nur hin und wieder der Pegel höher sein?

von Hmmm (Gast)


Lesenswert?

Peter D. schrieb:
> Der Low-pegel sieht mir viel zu hoch aus.

Klingt für mich danach, dass der weiter oben erwähnte Rat (Slaves mit 
ein paar 100 Ohm an den Bus hängen) befolgt wurde.

Dann bilden bei Low-Pegel der Pullup-Widerstand und der Widerstand 
zwischen Bus und Slave einen Spannungsteiler, was in Kombination mit den 
hier sehr niederohmigen Pullups den Low-Pegel recht weit anhebt.

von A. S. (Gast)


Lesenswert?

Michael Z. schrieb:
> Warum solte bei falschen PullUp Widerständen das Signal fast auf Masse
> liegen und nur hin und wieder der Pegel höher sein?

Matthias S. schrieb:
> A. S. schrieb:
>> Dir ist aber schon klar, dass der Ausreißer das Acknowledge ist?

Achim S. schrieb:
> Matthias S. schrieb:
>> Wenn ich mich da nicht verzählt habe, ist der aber ein Bit zu früh. Bit
>> 9 sollte ACK des Slaves sein und nicht Bit 8. Generell finde ich das
>> Timing dieses I²C Signals grenzwertig, denn die Flankenwechsel von SDA
>> und SCL finden so gut wie gleichzeitig statt,
>
> denke dir das SCL Signal invertiert - damit kompensierst du die seltsame
> Einstellung des Oszis

von Wolfgang (Gast)


Lesenswert?

jo mei schrieb:
> .... ist eine schöne Antenne zum Aufgreifen von äusseren
> Störsignalen. Warum ist das so? Der I2C Bus ist sehr hoch-
> ohmig, damit sehr empfänglich für äussere Einstreuungen.

Du bist im falschen Film. Solche falschen Pegel entstehen nicht durch 
Störungen, die über eine Antenne rein kommen.

von Stefan F. (Gast)


Lesenswert?

Michael Z. schrieb:
> Warum solte bei falschen PullUp Widerständen das Signal fast auf Masse
> liegen und nur hin und wieder der Pegel höher sein?

Weil grenzwertige Pegel Fehlfunktionen in den Busteilnehmern auslösen 
können.

von Falk B. (falk)


Lesenswert?

Michael Z. schrieb:
> Sorry bin jetzt erst dazu gekommen ein neues Bild von dem I2C Signal zu
> machen.
> Heute morgen hatte ich noch nicht die Brille auf um die Falschen
> Einstellung zu sehen.
>
> PullUp Widerstände 1k1 an beiden Signalen
> Taktfrequenz 80kHz

Klingt OK, auch wenn 1K1 relativ niederohmig ist.

Wie sieht dein I2C Bus aus? Hast du zufällig einen Busextender drin? 
Damit hatte ich gerade zu tun. Der macht ABSICHTLICH einen höheren 
LOW-Pegel von ca. 0,9V. Danach sieht es bei dir aus.

Kleiner Tipp. Dreh den Offset der Kanäle besser auf eine horizontale 
Linie, das kann man besser ablesen.

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.