I2C-PCB-Layout bei mehreren Platinen

Gast #3370008
Hallo in die Runde,

ich bin auf der Suche nach Layout-Hinweisen für den I2C-Bus, wenn es um 
mehrere Leiterplatten geht. Im Netz habe ich nichts gefunden und hoffe 
daher hier Anregungen zu bekommen.

Die Lage ist folgende: Ein µC ist der alleinige Master. Daran 
angeschlossen können 8 bis 15 Slaves sein. Können meint, dass je nach 
Kundenwunsch die Hardware mit einer unterschiedlichen Anzahl an Slaves 
bestückt wird.
Die Slaves befinden sich auf verschiedenen Leiterplatten folgendermaßen:

Unterste Platine: 1x Slave
--> Steckverbinder zur Hauptplatine
Hauptplatine: Master, 2x Slave
   --> Flachband zu Temperaturplatine
   Temperaturplatine: 1x Slave
   --> Steckverbinder zu Filterplatine
   Filterplatine: 3x Slave
--> Steckverbinder zur Modulplatine
Modulplatine: 1x Slave
   --> Steckverbinder zu Interfacteplatinen
Interfacteplatinen: je nach Ausstattung (Kundenwunsch) bis zu 7x Slave


Auf der Hauptplatine befindet sich außerdem ein aktiver Pullup 
(LTC1694).

Busgeschwindigkeit: 100kHz

Bis auf die Einbindung der Filterplatine ist das Layout schon erstellt 
und der I2C-Bus funktioniert in dieser Weise. Die Filterplatine ist 
momentan, da sie nachträglich eingebunden wurde, nur per Luftverdrahtung 
angeschlossen (am Layout arbeite ich gerade). Hier kommt es zu Fehlern 
in der I2C Kommunikation. Wenn das an der Luftverdrahtung liegt, wäre 
ich beruhigt. Oder liegt es daran, das diese Stapelung von Platinen den 
Bus überfordert und es zu Reflexionen kommt? 100kHz??
Aufgrund der Komplexität der Hardware lies sich nur eine Kombinaton aus 
Stern- und Daisychain-Struktur erstellen.
Konkrete Frage: Was muss beim I2C-Routing bei mehreren Platinen, die mit 
LP-Steckverbindern verbunden sind beachtet werden?

Danke und beste Grüße
Marcus
Gast
Marcus schrieb:
> Oder liegt es daran, das diese Stapelung von Platinen den
> Bus überfordert und es zu Reflexionen kommt? 100kHz??

Ein klarer Fall für: Oszi nehmen und nachmessen. Ansonsten noch prüfen, 
welcher Art die Fehler sind (kein Acknowledge, falsche Daten, Fehler nur 
bei bestimmtem Slave oder bei allen, Low-Pegel wird falsch erkannt, 
High-Pegel wird falsch erkannt, ...) und nachdenken, wie sich das mit 
den Messergebnissen vom Oszi erklären lässt.

Reflexionen auf SCL können im Prinzip auch bei 1kHz die Kommunikation 
stören. Dabei ist nicht die Frequenz entscheidend sondern die 
Flankensteilheit. Der beschriebene Gesamtaufbau klingt in meinen Ohren 
für IIC schon etwas wild.
Hallo Marcus,
ich gehe davon aus das Du die I2C-Bus-Spezifikationen von Philips 
kennst.
Reflektionen dürften bei 100KHz und 1m-2m Leitungslänge noch keine Rolle 
spielen, dafür ist die Wellenlänge zu gross. Der kritischte Punkt des 
I2C-Bus ist die Kapazität. Letztlich bewirkt sie zusammen mit dem 
Pulldown ein verflachen der Impulsflanken und bewirkt in gewisser Weise 
auch eine Laufzeitverzögerung.
Merkwürdiger Weise sind die Bausteine der ersten Generation wie der 
PCF8574 oder auch der PCF8591 relativ unempfindlich. In einem Test 
konnte ich einen PCF8574 über eine Kabeltrommel mit 50m noch mit 100KHz 
ansteuern.
Ein DS1631 ist da schon empfindlicher. Ich habe ein Bus-Segment das geht 
vom Master über 10m auf einen Sternverteiler. Von dort haben die DS1631 
Anschlusslängen von 1,5m - 2,5m. Der Bustakt liegt bei 10 KHz. Ich kann 
hier nur 6 DS1631 anschliessen, beim siebten treten dann Störungen auf. 
Ein weiteres Absenken des Bustaktes bringt beim DS1631 anscheinend hier 
auch nichts. Gut, in diesem Fall würde wohl ein Busbuffer wie der P82B96 
weiterhelfen.
In Deinem Fall ist wie gesagt die Kapazität auf Grund der Anzahl der 
Clients der kritische Punkt. Hier hilft nur ein Bus-Muliplexer weiter.
Gruss Klaus.
@ Klaus Ra. (klara)

>Reflektionen dürften bei 100KHz und 1m-2m Leitungslänge noch keine Rolle
>spielen, dafür ist die Wellenlänge zu gross.

Die FREQUENZ ist nicht der kritische Parameter, es ist die Anstiegszeit. 
Siehe Wellenwiderstand.

>Der kritischte Punkt des
>I2C-Bus ist die Kapazität. Letztlich bewirkt sie zusammen mit dem
>Pulldown

I2C hat Pull UP Widerstände.
Gast
Hi

>Die FREQUENZ ist nicht der kritische Parameter, es ist die Anstiegszeit.
>Siehe Wellenwiderstand.

Die TWI-Pins bei AVRs haben einen Slew-Rate Limiter. Also bitte keine 
Panik.

MfG Spess
Falk Brunner schrieb:
> @ Klaus Ra. (klara)
>
>>Reflektionen dürften bei 100KHz und 1m-2m Leitungslänge noch keine Rolle
>>spielen, dafür ist die Wellenlänge zu gross.
>
> Die FREQUENZ ist nicht der kritische Parameter, es ist die Anstiegszeit.
Ist ja hier doch in enger Beziehung.
> Siehe Wellenwiderstand.
Bei einer Wellenlänge von ca. 300m dürften auf dem Übertragungsweg 
praktisch noch keine Welleneffekte merkbar sein.
>
>>Der kritischte Punkt des
>>I2C-Bus ist die Kapazität. Letztlich bewirkt sie zusammen mit dem
>>Pulldown
>
> I2C hat Pull UP Widerstände.
Na klar.

> Die TWI-Pins bei AVRs haben einen Slew-Rate Limiter. Also bitte keine
Panik.
Eine zu grosse Flankensteilheit ist hier nicht das Problem. Aber eine 
Begrenzung der Flankensteilheit könnte bei höherer kapazitiver Last ein 
Problem sein. Dann könnte sich die Laufzeit verlängern, sprich Phase 
verschieben.

Kevin K. schrieb:
> Du könntest einen Bus-extender verwenden.
Könnte auch funktionieren, wäre allerdings hier nicht wirtschaftlich. 
Erstens sind die Leitungslängen kurz, vermutlich < 1m. Und zweitens 
müssten viele dieser Extender pärchenweise eingesetzt werden.

Wie ich schon sagte, Multiplexer wären sinnvoll.
http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_multiplexers_switches/
Gast
spess53 schrieb:
> Die TWI-Pins bei AVRs haben einen Slew-Rate Limiter. Also bitte keine
> Panik.

ich bin in dieser Frage weit von jeglicher Panik entfernt :-) Aber 
Marcus hat einen Platinenverhau, der nicht funktioniert, und Reflexionen 
sind ein möglicher Grund. Andere Ursachen sind natürlich auch möglich, 
deswegen wäre eine kurze Messung der Signalqualität sehr hilfreich.

Wo hast du gelesen, dass Marcus die TWI-Pins eines AVRs benutzt? Wenn er 
tatsächlich Slewrate-limitiere Ausgänge nutzen sollte, ist die 
Wahrscheinlichkeit für störende Reflexionen natürlich sehr gering.
Gast
Hi

>Wo hast du gelesen, dass Marcus die TWI-Pins eines AVRs benutzt?

Nirgens. Das war als Beispiel gemeint. Ich gehe aber davon aus, das 
andere Hersteller nicht dümmer als Atmel sind.

MfG Spess
Gast
Hallo,

vielen Dank für eure zahlreichen Rückmeldungen.
Im Moment scheint es, als dass die Probleme behoben sind.
Zum einen habe ich 2x einen Inverter Schmitttrigger in die SCL-Leitung 
gesetzt und zum anderen hatte ich auf einer Platine einen hohen 
Leitungswiderstand auf beiden Leitungen. Das lag an der schlechten 
Platine. Hätte doch lieber bei Leiton oder PCB-Pool bestellen sollen.

Die I2C-Bus-Spezifikationen ist konsumiert worden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.