Forum: Mikrocontroller und Digitale Elektronik I2C Kommunikationsproblem


von Nomis (Gast)



Lesenswert?

Guten Tag zusammen,

aktuell versuche ich die I2C-Kommunikation zwischen einem STM32-F103 
(Nucleo Board) und mehreren I2C Slaves ans laufen zu bekommen. Jeder 
Slave ist dabei einzeln über einen PCA9517 entkoppelt. Die einzelnen 
Slaves sollen über kurze Leitung an die Platine angesteckt werden.

Zuerst habe ich einen Temperatursensor (MCP9808) an den ersten PCA9517 
angeschlossen, was soweit auch einwandfrei funktioniert. Ich kann 
problemlos die Temperatur auslesen sowie auch andere Register lesen und 
schreiben. Auch die Buskapazität scheint laut den Oszilloskop Bildern in 
Ordnung zu sein. Die aufgenommene Bilder dazu: "SlaveSide_OK" und 
"MasterSide_OK"

Wenn ich jedoch eine weitere Leitung an den zweiten Ausgang anschließe 
(Ohne Slave, NUR die Leitung) bricht meine I2C Kommunikation zusammen. 
Der zweite Ausgang beeinflusst also in irgendeiner Weise den ersten. 
Merkwürdigerweise scheint das Problem aber nicht direkt die erhöhte 
Buskapazität zu sein, da die Oszilloskop nahezu unverändert aussehen. 
Aufgenommene Bilder: "SlaveSide_ERROR" und "MasterSide_ERROR"
Hier ist ersichtlich, das bei Auslesen des vorletzten Bytes die SDA 
Leitung einen undefinierten Zustand erfährt. Die Kommunikation schlägt 
immer an diesem Punkt fehl. Warum passiert das? Liegt dies 
möglicherweise am Ground Offset des PCA9517 beim ACK? Wie könnte ich das 
Problem beheben?
Leider habe ich nur ein analoges Hameg Oszlloskop, sodass ich keine 
genaueren Bilder der Kommunikation aufnehmen kann.

MCP9808: http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf
Timing Diagramm auf Seite 26

PCA9517: https://www.nxp.com/docs/en/data-sheet/PCA9517.pdf

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Nomis schrieb:

> Wenn ich jedoch eine weitere Leitung an den zweiten Ausgang anschließe
> (Ohne Slave, NUR die Leitung) bricht meine I2C Kommunikation zusammen.
> Der zweite Ausgang beeinflusst also in irgendeiner Weise den ersten.

Sehe ich das richtig, dass Du beide Puffer gleichzeitig aktivierst, also 
EN beider Puffer parallel geschaltet hast? Meinst Du nicht, dass das zu 
einer Buskollision führt?

Ich würde vermuten, dass sich NXP beim Schaltplan "Fig 5. Typical star 
application" im Datenblatt etwas gedacht hat...

Grüßle
Volker

von Nomis (Gast)


Lesenswert?

Volker B. schrieb:
> Sehe ich das richtig, dass Du beide Puffer gleichzeitig aktivierst, also
> EN beider Puffer parallel geschaltet hast?

Ja genau. Aktuell ist es so, dass ich nur eine EN-Leitung habe, die vom 
STM auf High gesetzt wird. Wenn ich jeden einzelnen PCA9517 mit einer 
separaten EN-Leitung versehen würde könnte ich die Slaves einzeln 
ansprechen ohne das die anderen etwas davon mitbekommen.

Trotzdem müsste doch die Kommunikation auch funktionieren, wenn alle 
PCA9517 EN Pins gleichzeitig auf High liegen. Bis zum vorletzten Byte 
funktioniert die Kommunikation ja auch ohne Probleme.

von Gundolf K. (gkiefer)


Lesenswert?

Dem Schaltplan nach sind die PCA9517 mit ihren B-Seiten untereinander 
verbunden. Das ist nicht erlaubt, die wilde Schwingung könnte dadurch 
verursacht worden sein.

Welchen Zweck haben eigentlich die vielen Repeater? Würde bei den kurzen 
Kabeln nicht maximal einer ausreichen?

von Nomis (Gast)


Lesenswert?

Danke für den Hinweis! Ich werde die Tage mal die A-Kanäle miteinander 
verbinden und gucken ob dadurch das Problem gelöst ist.

Gundolf K. schrieb:
> Welchen Zweck haben eigentlich die vielen Repeater? Würde bei den kurzen
> Kabeln nicht maximal einer ausreichen?

Das Ziel war jeden einzelnen Slave mit einem separaten Repeater zu 
betreiben um die Buskapazität möglichst niedrig zu halten. Dadurch 
können die Slaves auch mit längeren Leitungen mit der Platine verbunden 
werden.

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.