Forum: Mikrocontroller und Digitale Elektronik Doppelt vorhandene Slave Adresse bei I2C


von Benedikt K. (benedikt)


Lesenswert?

Ich muss mehrere uC vernetzen. Dabei gibt es 1 Master und viele Slaves. 
Als Schnittstelle dachte ich an I2C. Die Adresse von den Slaves ist über 
Jumper einstellbar. Soweit alles kein Problem.
Wie kann der Master aber erkennen, dass es mehrere Slaves mit gleicher 
Adresse gibt ?
Da in allen Slaves die gleiche Software läuft, verhalten sich alle 
gleich, daher fällt diese doppelte Belegung eigentlich nur bei 
unterschiedlichen Daten auf. Aber dann werden eigentlich die Daten auch 
nur verfälscht, erkennen kann man das also eigentlich nur wenn der 
empfangene Wert schon bekannt ist.

von peter-neu-ulm (Gast)


Lesenswert?

Wenn am Bus zwei Slaves mit geicher Adresse hängen, werden sie erstmal 
beide mit Ack antworten. Es ist nicht erkennbar, ob nur einer oder beide 
Slaves antworten. Es entfällt also erstmal eine wichtige 
Funktionskontrolle.
Wenn dann beide Slaves Daten liefern sollen, werden sie gleichzeitig auf 
den Bus brabbeln.

Ein Ausweg könnte es sein, in beiden Slaves verschiedene 
Sekundäradressen einzurichten, sodass nur der Slave mit der richtigen 
Slave-Adresse weiter aktiv bleibt. Aber das müsste natürlich individuell 
in die Slaves einprogrammiert werden.

von peter-neu-ulm (Gast)


Lesenswert?

Sorry, Schreibfehler:  ... mit der richtigen Sekundäradresse...

von KlaRa (Gast)


Lesenswert?

Hallo Benedikt,
schau mal hier: http://cctools.hs-control.de/home.php

I2C-MUX7 I²C-Bus-Multiplexer für Printmontage.
Mit Hilfe dieses I²C-Multiplexers ist es möglich zwischen
mehreren Sub-Bussen umzuschalten.
Dies ist z.B. sinnvoll, wenn mehr Bausteine an verschiedenen
Adressen benötigt werden, als zur Verfügung stehen...

Gruss KLaus.



von Falk (Gast)


Lesenswert?

@Benedikt K.

>Wie kann der Master aber erkennen, dass es mehrere Slaves mit gleicher
>Adresse gibt ?

Die Slaves müssen auf ein spezielles Kommando hin mit einer zufälligen 
Antwortzeit antworten. Wenn nun zwei Slaves zeitversetzt antworten gibt 
es zwei mögliche Fälle

a) die Antworten überlagern sich nicht zeitlich -> zwei Antworten
b) die Antworten überlagen sich -> Antwort im Eimer

MFG
Falk

von Gugge 7. (gugge73)


Lesenswert?

Und wie willst du erkennen, ob eine Überlagerung stattfindet oder ob 
diese Überlagerung nicht die Antwort eines einzelnen Slaves ist?

von Falk (Gast)


Lesenswert?

@Gugge 73

>Und wie willst du erkennen, ob eine Überlagerung stattfindet oder ob
>diese Überlagerung nicht die Antwort eines einzelnen Slaves ist?

über die Auswertung des Clock stretching oder eine geschickte Prüfsumme.

MfG
Falk


von Gugge 7. (gugge73)


Lesenswert?

Wobei, stimmt, wenn die Antwort bekannt ist, könnte das gehen.

von Benedikt K. (benedikt)


Lesenswert?

Stimmt, das mit der Checksumme ist eine gute Idee. Bleibt halt nur, dass 
eine Zufallszahl gebraucht wird, und daher das Verfahren wieder etwas 
unsicher ist.
Ich denke ohne Zufallszahlen oder eindeutige Seriennummer in jedem uC 
wird es wohl nicht gehen. Irgendwie müssen sich die uC ja unterscheiden.

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.