Forum: Mikrocontroller und Digitale Elektronik I2C-PCB-Layout bei mehreren Platinen


von Marcus (Gast)


Lesenswert?

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

von Lutz H. (luhe)


Lesenswert?

Nach meiner Recherche ist der i2c Bus ein Linie, alle Busteilnehmer 
schön aufgereiht, wie Perlen auf einer Kette.

: Bearbeitet durch User
von Achim S. (Gast)


Lesenswert?

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.

von Klaus R. (klara)


Lesenswert?

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.

: Bearbeitet durch User
von Pete K. (pete77)


Lesenswert?

Marcus schrieb:

> ich bin auf der Suche nach Layout-Hinweisen

Dann zeig' uns doch mal Dein Layout.

von Kevin K. (nemon) Benutzerseite


Lesenswert?

Du könntest einen Bus-extender verwenden.

von Falk B. (falk)


Lesenswert?

@ 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.

von spess53 (Gast)


Lesenswert?

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

von Klaus R. (klara)


Lesenswert?

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/

von Achim S. (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Klaus R. (klara)


Lesenswert?

Hallo Marcus,
die I2C-Bus-Spezifikationen von Philips, bzw. nxp, sind Pflichtlektüre.

I2C-bus specification and user manual
http://www.nxp.com/documents/user_manual/UM10204.pdf
Gruss Klaus.

von Marcus (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Zum einen habe ich 2x einen Inverter Schmitttrigger in die SCL-Leitung
>gesetzt

Und was passiert da bei Clock stretching?

MfG Spess

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.