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
Nach meiner Recherche ist der i2c Bus ein Linie, alle Busteilnehmer schön aufgereiht, wie Perlen auf einer Kette.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
@ 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 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.