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