Meine Erfahrungen zum I2C Level Shifting per TCA 9509 und weitere Fragen

OP #5161575
Lesenswert?

Hallo zusammen,

ich verbaue am TWI Bus TCA 9509 Level Shifter zwischen RPi (3,3 Volt - 
I2C Master)  und ATtiny2313  und LM92 (beide Typen als 5 Volt I2C Slave) 
.

Ich takte den Bus am RPi (Master)  mit ca. 20 kHz. Ich nutze CAT6 Kabel 
mit Ethernet Steckern und Buchsen.

Die TCA 9509 (momentan zwei parallel) sind ca. 50 cm vom RPi an den 3,3 
Volt TWI-Bus des RPis per CAT6 angebunden.

Die Anordnung arbeitet prinzipiell zuverlässig. Es stellen sich mir 
dennoch mehrere Herausforderungen.

1. Ich möchte eine Vielzahl von Slaves am Bus betreiben
2. Ich möchte auch längere Distanzen (10 - 20 Meter) mit dem Bus 
versorgen

Momentan schaffe ich folgendes:

Der RPi steuert einerseits 4 LM92 an, wobei diese 4 Sensoren sternförmig 
im Abstand von 5 Metern über CAT6 an den Level Shifter TCA 9509 
angebunden sind.

Ein zweiter TCA 9509 (parallel zum ersten TCA 9509) bindet (derzeit) 2 
ATTiny2313 an. Distanz 30 cm. Ich gehe davon aus, dass ich auch hier die 
Entfernung auf 5 Meter steigern kann ... und mindestens 4 ATTinys als 
Slaves kapazitativ im erlaubten Bereich anbinden kann.

Da offensichtlich die TCA 9509 die Kapazitäten der Slaves wunderbar vom 
Zentralpunkt RPi entkoppeln, habe ich nun versucht, eine weitere 3. 
Einheit (TCA 9509 mit LM92) parallel an den RPi zu hängen.

Fehlanzeige, der Bus ist mausetot. Allein schon bei purer Ankoppelung 
des 3. TCA 9509 (ohne Slaves) wird keine Adresse mehr angezeigt. Auch 
eine "Lastsplittung" der 6 Slaves auf die 3 TCA 9509 hat keine Änderung 
bewirkt

Ich dachte erst, der 3. TCA 9509 sei tot- Fehlanzeige, er funktionierte 
im Gegentest (einzeln).

Das Datenblatt sagt zur Parallelschaltung von TCA 9509 nichts aus (habe 
ich etwas überlesen?). Sicherlich ist es kein TWI typisches kapazitives 
Problem, eher ein Innenwiderstand - oder Impedanz Problem ... zwischen 
RPi und TCA 9509 !


Bei größeren Entfernungen als 5 Metern hatte ich nun vor, per TCA 9509 
immer nur einen Slave anzuschliessen.

Der TCA 9509 an sich tut, was er soll. Er ist halt ein Level-Shifter ... 
(und wahrscheinlich kein Repeater ...). Die Begrenzung liegt erst einmal 
bei 2 TCA 9509 am RPi ...!

--------------

Oben geschilderte Anorndung ist erst einmal funktionstüchtig. Zweck ist 
erfüllt, arbeitet mit zwei TCA 9509 seit Monaten ohne eine einzige 
Fehlfunktion.

Aber ich möchte für eine weitere Anwendung nun mehr, der TCA 9509 (mit 
Stückzahl 1) wird dabei offensichtlich nur als Level Shifter helfen:

Nun gibt es eine fast unüberschaubare Anzahl von Repeatern. Ich suche 
nun einen "Repeater" Baustein, in folgender Konstellation:

RPi <-> TWI Level Shifter (z.B. TCA 9509) <-> eine Anzahl n paralleler 
TWI "Repeater", die wiederum ein oder mehrere Slaves über längere 
Distanzen anbinden.

Hat da jemand eigene Erfahrungen mit einem passenden "Repeater" ?

Danke im Voraus

Gruesse
Gast #5161579
Lesenswert?

>  Ich möchte auch längere Distanzen (10 - 20 Meter) mit dem
> Bus versorgen

I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm 
hinaus geht provoziert Probleme. Punkt

Du brauchst einen Bus, der die Physikalischen Grundlagen der 
Signalausbreitung berücksichtigt. Eine günstige Variante ist RS485.
OP #5161630
Lesenswert?

Stefan U. schrieb:
>>  Ich möchte auch längere Distanzen (10 - 20 Meter) mit dem
>> Bus versorgen
>
> I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm
> hinaus geht provoziert Probleme. Punkt
>
> Du brauchst einen Bus, der die Physikalischen Grundlagen der
> Signalausbreitung berücksichtigt. Eine günstige Variante ist RS485.

Das Problem ist schon klar! Ich bin recht TWI-erfahren, seit Jahren.

Ich weiß aber, dass Kollegen lange Entfernungen sehr wohl mit niedrig 
getaktetem I2C-Bus funktionssicher bertreiben.

Vorteil: Ich kann meine gesamten Software-Libraries ohne Änderung 
übernehmen!

Ansonsten würde ich umsteigen ...!

Gruesse
OP #5161633
Lesenswert?

Michael X. schrieb:
> I2C hat eine maximale Risetime spezifiziert. Die wirst du mit deinem
> Aufbau überschreiten.

Das glaube ich nicht!!! Die Flanken sind fast senkrecht im Oszilloskop 
(werde ich aber noch einmal verifizieren).

Das Oszilloskop zeigt ganz klar - nach Parallelschaltung des dritten TCA 
9509 ist nur noch Gleichstromlevel sichtbar ! daher dachte ich ja, der 
3. TCA seit "tot".

Gruesse
Gast #5161635
Lesenswert?

Stefan U. schrieb:
> I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm
> hinaus geht provoziert Probleme. Punkt

Zumindest der Erfinder des I2C ist da eindeutig anderer Meinung:
NXP/Philips AN10658 Sending I2C-bus signals via long communications 
cables
https://www.nxp.com/docs/en/application-note/AN10658.pdf

Datenblatt PCA9600 (Tab.7 p.14):
http://www.nxp.com/documents/data_sheet/PCA9600.pdf
OP #5161637
Lesenswert?

Also, um es die Frage noch einmal eindeutig zu spezifizieren:

Die Leitungslänge ist nicht das Problem. Dafür gibt es ja Repeater, die 
lange Entfernungen spezifizieren.

Die Frage lautet: Welche Repeater kann ich parallel schalten, um eine 
Stern-Topologie zu unterstützen?


Gruesse
Gast #5161638
Lesenswert?

Hendrik L. schrieb:
> Das Oszilloskop zeigt ganz klar - nach Parallelschaltung des dritten TCA
> 9509 ist nur noch Gleichstromlevel sichtbar !

Dann hänge mal versuchsweise von jeder Leitung Widerstände (einige 100Ω) 
vor die SDA und SCL-Knoten, damit du über den Spannungsabfall 
feststellen kannst, wer den Pegel kaputt macht.
OP #5161652
Lesenswert?

Wolfgang schrieb:
> Stefan U. schrieb:
>> I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm
>> hinaus geht provoziert Probleme. Punkt
>
> Zumindest der Erfinder des I2C ist da eindeutig anderer Meinung:
> NXP/Philips AN10658 Sending I2C-bus signals via long communications
> cables
> https://www.nxp.com/docs/en/application-note/AN10658.pdf
>
> Datenblatt PCA9600 (Tab.7 p.14):
> http://www.nxp.com/documents/data_sheet/PCA9600.pdf

Hallo Wolfgang,

das war der richtige Tip (im PCA9600.pdf):

Fig 18. I2C-bus multipoint application

sagt:

"...no limit to the number of connected bus devices ..."

Danke- das hat mir sehr geholfen.

Gruesse
OP #5161653
Lesenswert?

Wolfgang schrieb:
> Hendrik L. schrieb:
>> Das Oszilloskop zeigt ganz klar - nach Parallelschaltung des dritten TCA
>> 9509 ist nur noch Gleichstromlevel sichtbar !
>
> Dann hänge mal versuchsweise von jeder Leitung Widerstände (einige 100Ω)
> vor die SDA und SCL-Knoten, damit du über den Spannungsabfall
> feststellen kannst, wer den Pegel kaputt macht.

Danke für den Hinweis. Ja - werde ich machen.

Gruesse
OP #5161712
Lesenswert?

Frank K. schrieb:
> Wenn Du viele I2C-Devices anschließen willst, nimm doch einen Switch:
>
> https://www.nxp.com/docs/en/data-sheet/PCA9547.pdf
>
> Da kannst Du dann I2C-Adressen auch mehrfach benutzen, indem Du die
> Devices auf die einzelnen Segmente verteilst. Levelshifter kann er auch
> noch spielen.
>
> fchk

Toller Hinweis - vielen Dank!

Was es nicht alles gibt ....!

Gruesse
OP #5412933
Lesenswert?

Peter D. schrieb:
> Ich habe bisher nie gesehen, daß jemand mehr als einen Level-Shifter am
> selben I2C betreibt.
> Man hat eine 5V- und eine 3,3V-Seite und dazwischen genau einen
> Level-Shifter.

Hab zwischenzeitlich etliche Tests gemacht:

Man kann mehrere Level-Shifter parallel an einen 3,3 Volt I2C Buse 
betreiben.

Dadurch lässt sich also eine sternförmige Topologie mit längeren 
Entfernungen pro Arm (einige Meter) aufbauen.

Gruesse
OP #5413735
Lesenswert?

Veit D. schrieb:
> Hallo,
>
> dein Problem ist du hast eine Stern Topologie aufgebaut. Du musst jedoch
> einen Bus aufbauen. Den Unterschied musst du dir klar machen. Terminiert
> wird nur am Anfang und Ende des Busses.

Ich terminiere am Ende eines Arms ...! Jeder Arm wird durch einen Level 
Shifter mit dem Master verbunden (Ja es ist eine Sterntopologie) - Es 
funktioniert so!

Gruesse

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren