Forum: Mikrocontroller und Digitale Elektronik I2C Kommunikationsproblem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Nomis (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.