Forum: Digitale Signalverarbeitung / DSP / Machine Learning Signalqualität I²C


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Manuel Neff (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend

Habe mich in letzter Zeit ein wenig mit I²C beschäftigt, da ich es über 
einige Meter übertragen möchte. Ich habe die Datenleitungen mit meinem 
Oszilloskop ausgemessen und hätte von euch gerne eine Einschätzung zu 
meiner Signalqualität.

Den I²C habe ich gemäss dem angefügten Bild namens "Schaltung" 
aufgebaut. Habe mich an einem PDF aus dem Internet orientiert, welches 
über lange I²C-Buslänge und ungefähre Dimensionierung der Widerstände 
berichtete.

Habe 1x eine Messung mit einer Leitungslänge von 1meter gemacht und bei 
der 2. Messung noch 9meter Kabel angehängt, jedoch war es am einen Ende 
offen. Bei den zusätzlichen 9metern der 2. Messung ging es mir darum, 
eine kapazität zu simulieren, welche das I²C-Signal negativ beeinflussen 
sollte. Bei beiden Messungen klappte der Datenaustausch auf dem Bus 
problemlos. Alles über 10meter hat jedoch teilweise zu Problemen 
geführt.

Nun zu meiner Frage:
Wie würdet ihr die Signalqualität einschätzen. Mir geht es drum, dass 
auch nach Alterung der Bauteile die Datenübertragung immer noch sauber 
gewährleistet ist. Im Moment kann ich noch nicht genau sagen, welche 
Buslänge ich schlussendlich brauche, jedoch sind es Schätzungsweise um 
die 5 bis 6 meter.

Wie kann ich meine Schaltung verbessern? Mit den 1490Ohm 
Pullupwiderstand sind es bei 3.3V einen Strom von 2.2mA. Gemäss 
Busbeschrieb kann I²C bis zu 3mA strom bringen. Sollte ich diese 3mA 
voll ausnutzen oder gibt es andere, sinnvollere Varianten um meine 
Busqualität zu verbessern?

Wie wird das in der "professionellen" elektronik gehandhabt. Lässt man 
die Schaltung stehen, wenn sie einmal funktioniert? Oder wird sie bis 
ans limit optimiert? Habe leider keinerlei Erfahrungswerte was gut oder 
schlecht ist.

Danke für zahlreiche Antworten

von I2C Spec (Gast)


Lesenswert?

I²C war eigentlich nie gedacht außerhalb einer PCB benutzt zu werden. 
Der eigentliche Gedanken war, einen Bus für mehrere ICs auf einer PCB 
bereitzustellen. Für externe Verbindungen solltest du auf einen Bus 
setzten, der tatsächlich dafür ausgelegt wurde. Stichwort CAN, RS485, 
RS232, HART, usw.

Hast du einen Link zu diesem PDF?

Die Signale zusammen mit der RC Schaltung und Leitungslänge sind 
plausibel.

von Manuel Neff (Gast)


Angehängte Dateien:

Lesenswert?

I2C Spec schrieb:
> I²C war eigentlich nie gedacht außerhalb einer PCB benutzt zu
> werden.
> Der eigentliche Gedanken war, einen Bus für mehrere ICs auf einer PCB
> bereitzustellen. Für externe Verbindungen solltest du auf einen Bus
> setzten, der tatsächlich dafür ausgelegt wurde. Stichwort CAN, RS485,
> RS232, HART, usw.
>
> Hast du einen Link zu diesem PDF?
>
> Die Signale zusammen mit der RC Schaltung und Leitungslänge sind
> plausibel.

Also direkt für lange Leitungen ist nichts beschrieben...Aber einige 
Beispielwerte, welche gut miteinander harmonieren sollen.

Was ist deine Meinung zum I²C-Signal, welches ich gemessen habe?

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Manuel Neff schrieb:
> Was ist deine Meinung zum I²C-Signal, welches ich gemessen habe?

Was erwartest du hier?

Für die grobe Misshandlung, die du deinem Signal antust, sieht das 
normal aus.

Bist du dir sicher das mit den Serienwiederständen und dem Kondensator 
nicht jemand versucht hat das Ersatzschaltbild eines Kabels 
darzustellen? So hast du dein Kabel künstlich verlängert. Rechne mal aus 
welche Ströme beim Umladen des Kondensators bei den jeweiligen Freq. 
fliesen, du das nur statisch gerechnet. Und überhaupt wie kommt man auf 
so Werte wie 1,49kOhm?  Die entsprechen keiner gängigen Normenreihe und 
noch dazu mit einer Genauigkeit von zwei Stellen hinter dem Komma bei 
einem 08/15 Bus?

von Kevin M. (arduinolover)


Lesenswert?

Die Beschaltung macht wenig bis keinen Sinn, in deinem PDF wollen sie 
Störungen auf der Leitung filtern. Das hat nichts mit einem langen Bus 
zu tun.

Im ersten Schritt solltest du schonmal die die 180Ohm und die 130pF 
entfernen.

: Bearbeitet durch User
von I2C Spec (Gast)


Lesenswert?

Das Paper zielt eher auf das Filtern der Bussleitungen auf Boards ab, 
bei denen der Bus durch umgebene System zugemüllt wird.

Dein Signal zeigt halt die starke Kapazität deiner Schaltung. Wenn du 
mit der Frequenz höher gehst läufst du Gefahr, dass du die Pegel nicht 
mehr erreichst und Clock/Datensignale verloren gehen. Es wird wohl 
irgendwie klappen aber immer irgendwie gerade so. Externe Störungen, die 
du dir dann dazu noch einfängst erhöhen dann auch Bit Fehlerrate...
Wenn es nicht läuft und unbedingt I2C sein muss, wirst du wohl mit der 
Frequenz runter gehen müssen.

Teste mal wie es aussieht wenn du den Kondensator rausnimmst.

Sonst einfach einen Bus benutzen der für Verbindungen außerhalb der PCB 
vorgesehen ist.

von Lars R. (larsr)


Lesenswert?

Kevin M. schrieb:
> Im ersten Schritt solltest du schonmal die die 180Ohm und die 130pF
> entfernen.

Würde ich auch empfehlen und stattdessen als Pullup zwei Stromquellen, 
dann sind die steigenden Flanken auch sauber.

von Manuel Neff (Gast)


Lesenswert?

Irgend W. schrieb:
> Manuel Neff schrieb:
>> Was ist deine Meinung zum I²C-Signal, welches ich gemessen habe?
>
> Was erwartest du hier?
>
> Für die grobe Misshandlung, die du deinem Signal antust, sieht das
> normal aus.
>
> Bist du dir sicher das mit den Serienwiederständen und dem Kondensator
> nicht jemand versucht hat das Ersatzschaltbild eines Kabels
> darzustellen? So hast du dein Kabel künstlich verlängert. Rechne mal aus
> welche Ströme beim Umladen des Kondensators bei den jeweiligen Freq.
> fliesen, du das nur statisch gerechnet. Und überhaupt wie kommt man auf
> so Werte wie 1,49kOhm?  Die entsprechen keiner gängigen Normenreihe und
> noch dazu mit einer Genauigkeit von zwei Stellen hinter dem Komma bei
> einem 08/15 Bus?

Ich werde morgen einmal die Serienwiderstände/130pF Kondensator in 
meiner Schaltung auslöten und testen. Das mit dem Kondensator weiss ich 
nicht mehr, von wo ich das her habe. Die Widerstände hat man ja bei 
Datenleitungen mit Potentialunterschied, um den Strom zu begrenzen. 
Klang für mich deshalb noch mehr oder weniger plausibel.

Den Widerstandswert 1,49kOhm habe ich errechnet aus einigen 
Teilwiderständen. Habe am Master und an den Slaves jeweils Widerstände

von P. S. (namnyef)


Lesenswert?

Ob man das so "stehen lassen" kann, hängt halt von der Anwendung ab. Das 
kann  in Ordnung sein, wenn z. B. nur einmal beim Hochfahren aus einem 
EEPROM mit einer CRC abgesicherte Daten geholt werden müssen.

Man kann sich noch mit so etwas wie einem PCA9615 (differentieller 
I²C-Tranceiver) behelfen. Aber schön wir "I²C über Kabel" nie wirklich.

von Manuel Neff (Gast)


Lesenswert?

Lars R. schrieb:
> Kevin M. schrieb:
>> Im ersten Schritt solltest du schonmal die die 180Ohm und die 130pF
>> entfernen.
>
> Würde ich auch empfehlen und stattdessen als Pullup zwei Stromquellen,
> dann sind die steigenden Flanken auch sauber.

Interessanter Ansatz. Hab noch die davon gehört. Kennst du eine gute 
einfache Schaltung? Bin mit der Recherche im Internet ein wenig 
unsicher, da ich nicht genau weiss, welchen Schaltungen ich vertrauen 
darf.

Danke

von Analoger (Gast)


Lesenswert?

Manuel Neff schrieb:
> Serienwiderstände/130pF Kondensator

sicher, dass es 130pF sind, die da verbaut sind? Hat da einer 130n 
eingebaut? Die Flanken sehen schlimm aus. Das ist am Rande des 
Akzeptablen.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Manuel Neff schrieb:
> ...Die Widerstände hat man ja bei Datenleitungen mit Potentialunterschied, um 
den Strom zu begrenzen...
> ...Habe am Master und an den Slaves jeweils Widerstände...

Da dürfte dein Denkfehler liegen. Das gilt für Aktiv getrieben push/pull 
Endstufen, aber nicht für OC Ausgänge wie bei I2C. Das "HI" wird 
ausschließlich durch den pullup erzeugt und nicht durch die 
Busteilnehmer. Und wenn du wie vorgesehen auch nur ein Widerstand 
verwendest hast du garnicht das Problem mit etwaigen 
Potenzialunterschieden (GND muss natürlich verbunden sein und die 
Spannung in der Bandbreite beider Seiten). Der maximale Strom wird durch 
den pullup begrenzt.

von Achim H. (pluto25)


Lesenswert?

Manuel Neff schrieb:
> Wie würdet ihr die Signalqualität einschätzen. Mir geht es drum, dass
> auch nach Alterung der Bauteile die Datenübertragung immer noch sauber
> gewährleistet ist.

Das Signal ist ein Traum. Keine Stöärungen und eine satte fallende 
Flanke.
Die Steigende ist irrelevant, wichtig ist nur das SDA eine Mindestzeit 
High ist bevor SCL Low wird. (s. Datenblätter).
Für die Simulation von Alterung eifach noch weitere 10m dranhägen und 
die Frequenz soweit runter das es wieder funktioniert. Wenn Deine 
Umgebung keine Störungen produziert können der Kondensator und die 180 
Ohm weg. Die 68 Ohm sind Angstwidersände für den Fall das es einen 
Vcc-Signalleitung Kurzschluß gibt.
"Professionell" im Sine von Industrie/Medizin Technik? Da würde das mit 
dem i2c gar nicht erst versucht, bzw reichlich Störungen drauf gegeben 
um zu sehen was geht.
im Sinne von Customerproduktentwicklung. Da wird gar nichts optimiert 
nur solange Eingespart bis es gerade noch die Garantiezeit hält.
(Alle Teile entfernen , 1k Pullups und fertig ;-)
PS Konstandstromquellen-Pullups sind weitere Fehlequellen. Zum einen 
könnten sie ausfallen zum anderen produziert jede schnelle Flanke 
Störungen.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Manuel Neff schrieb:
> Lars R. schrieb:
>> als Pullup zwei Stromquellen
>
> Kennst du eine gute einfache Schaltung?

Es wäre möglich, eine Konstantstromquelle aus zwei PNPs zu bauen. 
Aber das gibt es auch fertig (LTC1694, LTC4311), oder integriert in 
I²C-Repeatern (z.B. TCA9803).

von neuer PIC Freund (Gast)


Lesenswert?

> Die Steigende ist irrelevant

Wie deutet man dann den Parameter "rise time of both SDA and SCL 
signals" in UM10204Rev6, Tabelle 10?

> aus zwei PNPs

BCV62 spart Platz. Benutze ich sehr gerne. Macht den Bus zudem robuster 
gegen Einstrahlungen.

von c-hater (Gast)


Lesenswert?

Manuel Neff schrieb:

> Wie kann ich meine Schaltung verbessern?

180Ohm Widerstand ersatzlos (naja: Ersatz 0Ohm) entsorgen, 130pF 
Kondensator ebenfalls ersatzlos entsorgen. Pullups auf 1.2k verringern.

Das ist schon so ziemlich alles, was man machen kann. Ansosnten hilft 
nur: Entweder Kabel kürzer oder (besser) geschirmt oder Bitrate 
verringern.

von Helge (Gast)


Angehängte Dateien:

Lesenswert?

DIY würde ich die pullup-Widerstände durch sowas ersetzen, falls auch 5V 
da sind.

von Bernd G. (Gast)


Lesenswert?

Helge schrieb:
> die pullup-Widerstände durch sowas ersetzen,

Konstantstromquelle?

von Steve van de Grens (roehrmond)


Lesenswert?

Die meisten Mikrocontroller enthalten übrigens bereits intern analoge 
Filter. Bei einigen sind sie sogar für unterschiedliche Taktraten 
konfigurierbar.

Für 10 Meter Kabel zwischen zwei Geräten ist I2C nicht vorgesehen.

: Bearbeitet durch User
von Bernd G. (Gast)


Lesenswert?

Steve van de Grens schrieb:
> Für 10 Meter Kabel zwischen zwei Geräten ist I2C nicht vorgesehen.

Geht aber, wenn man es richtig baut, halt nur mit einem oder zwei 
Teilnehmern.

von A. F. (chefdesigner)


Lesenswert?

Irgend W. schrieb:
> Bist du dir sicher das mit den Serienwiederständen und dem Kondensator
> nicht jemand versucht hat das Ersatzschaltbild eines Kabels
> darzustellen?

Ein Kabel mit 180 Ohm widerstand dürfte das kaum sein.
Das ist ein Tiefpass gegen die Störungen von der rechten Seiten her.

von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

Gibt es eine allgemeine Strategie, wie ein solcher I2C elektrisch 
ausgelegt sein müsste, um besonders sicher gegen Einflüsse von Außen zu 
sein?

von Steve van de Grens (roehrmond)


Lesenswert?

Katrin F. schrieb:
> Gibt es eine allgemeine Strategie, wie ein solcher I2C elektrisch
> ausgelegt sein müsste, um besonders sicher gegen Einflüsse von Außen zu
> sein?

In der Spezifikation von 1982 steht eigentlich alles, was man dazu 
wissen muss.
https://www.nxp.com/docs/en/user-guide/UM10204.pdf

Wobei "besonders sicher gegen Einflüsse von Außen" gar nicht der 
vorgesehene Einsatzbereich ist. Die Schnittstelle ist für interne 
Kommunikation innerhalb eines Gerätes vorgesehen.

: Bearbeitet durch User
von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

Steve van de Grens schrieb:
> Die Schnittstelle ist für interne
> Kommunikation innerhalb eines Gerätes vorgesehen.

Das ist bekannt, wird aber oftmals auch extern genutzt.
Das war 1982 sicher nicht abzusehen.

Es ginge also nun darum, die Widerstände optimal zu gestalten, um eine 
höchstmögliche Resistenz zu generieren.

Zur Vereinfachung wäre es denkbar, eine 1:1 Verbindung zu verwenden. Der 
zur Verfügung stehende Controller hat 4 I2C verfügbar. Es dürfen mehrere 
Controller parallel laufen.

Soweit meine Elektronikkenntnisse reichn, würde ich vermuten, dass man 
einen möglichst hohen Strom zulassen muss, den der Chip gerade noch ab 
kann, um die maximale Störfestigkeit zu erreichen -> minimale 
Widerstände.

von Steve van de Grens (roehrmond)


Lesenswert?

Katrin F. schrieb:
> Soweit meine Elektronikkenntnisse reichn, würde ich vermuten, dass man
> einen möglichst hohen Strom zulassen muss, den der Chip gerade noch ab
> kann, um die maximale Störfestigkeit zu erreichen -> minimale
> Widerstände.

Korrekt.

3 mA muss jeder Chip können. Ich lege die Widerstände immer für 1-2 mA 
aus.

von Stephan S. (uxdx)


Angehängte Dateien:

Lesenswert?

Katrin F. schrieb:
> Soweit meine Elektronikkenntnisse reichn, würde ich vermuten, dass man
> einen möglichst hohen Strom zulassen muss, den der Chip gerade noch ab
> kann, um die maximale Störfestigkeit zu erreichen -> minimale
> Widerstände.

Faustformel: bei 5V bis 1k5 runter, bei 3.3 Volt bis 1k runter, die 
Bilder stammen aus Papers von NXP und TI

von Rick (rick)


Lesenswert?

Stephan S. schrieb:
> Faustformel: bei 5V bis 1k5 runter, bei 3.3 Volt bis 1k runter, die
Ich mach die immer doppelt so groß und dafür einmal am Controller und 
einmal am Busende.

Dann ist es nicht so wichtig, ob auf der anderen Seite schon Pullups 
verbaut/bestückt sind oder nicht.

von J. S. (engineer) Benutzerseite


Lesenswert?

Richtig sicher bekommmt man I2C über längere Distanzen mit single ended 
wires nicht. Da muss man symmetrisch übertragen und Hin- und 
Rückleitungen auftrennen. Gfs sogar fürs Clocksignal wegen möglichen 
streching.

von Gerhard H. (ghf)


Lesenswert?

Es gab mal eine App-note von Philips zum Puffern von I2C,
aber in der Zusammenfassung am Ende, da haben die Autoren
nicht den Eindruck erweckt, dass sie ihrer Sache sicher waren.
Mist , diese bidirektionalen Signale! I2C ist für kurz und
ohne Außenwelt.

Lang lebe SPI!!!

Gerhard

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Wenn ich es mir aussuchen dürfte, würde ich auch auf I2C so weit 
verzichten, wie es eben geht. Da es manche Chips aber nur mit diesem 
Interface gibt, hat man einfach oft keine Wahl. Selbst Video-Chips 
laufen mit einem I2C-Config interface und ich muss bei komplizierten 
Systemen dann einen Microblaze reinsetzen, damit der FPGA den Chip 
sinnvoll umschalten kann. Allerdings sitzen die dann wenigstens auf der 
selben Platine oder einen Adapter-PCB.

Für große Distanzen sollte man das Interface vorort mit einem UC 
übersetzen und digital übertragen.. Meine Waffe No 1 war seit den 90ern 
Manchester / BMC, bei Bedarf symmetrisch und immer unidirektional. Es 
gab damals schon Chips aus dem Audio-Sektor, die einen DAC/ADC treiben 
könnten oder intus hatten und einen S/PDIF transceiver hatten. Damit 
bekommt man 5 I2C-decvices mit 400kHz direkt als Bruttodatenstrom in den 
S/PDIF Datenbits verpackt. Damit geht sogar real-time-acknowledge über 
die Leitungen, wenn man das PLD etwas intelligent baut.

Wenn es unbedingt ein Passiv-System sein soll, dann eben wie oben 
beschrieben mit Trennung der Pfade. So wie im Bild kann das in etwa 
aussehen. Der Schaltkreis wurde so von mir entwickelt und mit einem PLD 
implementiert. Zuckelte ab Ende der 1990er in Schaltungen meines 
damaligen Kunden. Eine der Anwendungen waren vergossene Module mit 
Temperatur-Sensorik, in den "keine Softwarekomponenten" eingesetzt 
werden durfen. Außerdem wollte der Endkunde noch eigene unbekannte 
Module an die Endpunkte hängen.

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.