Forum: Mikrocontroller und Digitale Elektronik Hotplug Mikrocontroller an I²C-Bus


von Tobias E. (m1k3y)


Lesenswert?

Hallo zusammen,

Ich habe einen Anwendungsfall bei dem Mikrocontroller mit einem I²C-Bus 
kommunizieren. Dabei kann zu jedem Zeitpunkt ein Teilnehmer per Hotplug 
hinzugefügt oder entfernt werden.

Welche Fallstricke gibt es da?

Was bekannt ist: Es muss sichergestellt werden dass SDA und SCL 
verbunden/getrennt werden während GND und Vcc schon/noch verbunden sind.

Solange der hinzugefügte/entfernte Teilnehmer an der aktuellen 
Übertragung nicht beteiligt war oder keine Übertragung stattfindet 
dürfte dann nichts passieren. Liege ich da richtig?

Was kann passieren wenn ein Teilnehmer entfernt wird, der gerade an 
einer Übertragung beteiligt war (als Master oder Slave)? Und was kann 
man tun um dies zu verhindern?

Danke im voraus,
M1k3y

von Jonas G. (jstjst)


Lesenswert?

Hallo,

Tobias E. schrieb:
> Es muss sichergestellt werden dass SDA und SCL verbunden/getrennt werden
> während GND und Vcc schon/noch verbunden sind.
Wäre ich mir noch nicht mal absolut sicher ob das zwingend nötig ist.

Tobias E. schrieb:
> Solange der hinzugefügte/entfernte Teilnehmer an der aktuellen
> Übertragung nicht beteiligt war oder keine Übertragung stattfindet
> dürfte dann nichts passieren. Liege ich da richtig?
Ja

Tobias E. schrieb:
> Was kann passieren wenn ein Teilnehmer entfernt wird, der gerade an
> einer Übertragung beteiligt war (als Master oder Slave)?
Sollte nicht weiter stören, die Übertragung bricht halt ab. Jedoch 
sollte in der Programmierung ein timeout drin sein sonst wartet das 
Programm ewig auf Daten.

Tobias E. schrieb:
> Und was kann man tun um dies zu verhindern?
Wenn die Teile entfernbar sind wird man es nur mit elektrisch 
verriegelten Steckverbindern verhindern können. Aber es sollte auch 
während einer Übertragung nichts schlimmeres passieren.

Gruß Jonas

von holger (Gast)


Lesenswert?

>Ich habe einen Anwendungsfall bei dem Mikrocontroller mit einem I²C-Bus
>kommunizieren. Dabei kann zu jedem Zeitpunkt ein Teilnehmer per Hotplug
>hinzugefügt oder entfernt werden.

Dann hast du dir mit I2C den falschen Bus für deine Anwendung 
ausgesucht.

von Tobias E. (m1k3y)


Lesenswert?

holger schrieb:
> Dann hast du dir mit I2C den falschen Bus für deine Anwendung
> ausgesucht.

Ich habe leider keine alternativen. Das Hotplugging ist noch mein 
kleinstes (und inzwischen einziges verbliebenes) Problem.

von Jonas G. (jstjst)


Lesenswert?

holger schrieb:
>>Ich habe einen Anwendungsfall bei dem Mikrocontroller mit einem I²C-Bus
>>kommunizieren. Dabei kann zu jedem Zeitpunkt ein Teilnehmer per Hotplug
>>hinzugefügt oder entfernt werden.
>
> Dann hast du dir mit I2C den falschen Bus für deine Anwendung
> ausgesucht.

Wieso soll das nicht funktionieren?

von Sebastian S. (amateur)


Lesenswert?

Wenn man z.B. in einen externen Speicher schreibt, von außen nicht 
sichtbar während man zieht, so kann alles Mögliche passieren.
Also von nix bis zur Zerstörung des aktuellen Datums. Dürfte auch 
interessant werden, wenn man sich die schnellen Blockmodi der einzelnen 
Speicher anschaut.
Ziehst Du den Master, so ist meist Ruhe im Puff. Was die, eventuell 
gefütterten Slaves dazu sagen ist etwas anderes. Eine vermasselte 
Ausgabe kann zwischen nix und einem Gau alles bewirken. Vor allem in 
Anbetracht der Tatsache, dass die Slaves alles glauben, was auf dem Bus 
passiert und keiner weiß, was genau während des Ziehens (elektrisch) 
passiert. Mir ist auf jeden Fall kein Slave bekannt, der 
Sicherungsmaßnahmen für diesen Fall beinhaltet.

Ich würde mir die Normalität: "Teilnehmer verschwindet" auf jeden Fall 
verkneifen.
Anders sieht es natürlich aus, wenn alle Teilnehmer dass, was sie zu 
hören bekommen, verifizieren.
Dazu reicht aber meist die Intelligenz nicht aus. Wiederum die Ausnahme: 
Alle Teilnehmer sind µPs. Die können dann natürlich jede Übertragung, 
indirekt, überprüfen.

von spess53 (Gast)


Lesenswert?

Hi

Was sagt Gurgel zu 'hotplugging i2c'?

MfG Spess

von Tobias E. (m1k3y)


Lesenswert?

OK, Ich habe vergessen zu erwähnen, dass ALLE Teilnehmer Mikrocontroller 
sind und somit die entsprechende Logik kein Problem wird. Zudem sind 
alle Teilnehmer außer einem Hotplug-fähig und alle können zum Master 
werden.

Meine Frage zielt speziell auf Situationen ab, die den Bus blockieren 
könnten.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Tobias E. schrieb:
> Solange der hinzugefügte/entfernte Teilnehmer an der aktuellen
> Übertragung nicht beteiligt war oder keine Übertragung stattfindet
> dürfte dann nichts passieren. Liege ich da richtig?

 Wenn man sicherstellt, dass zuerst GND verbunden wird, liegst du
 da richtig. Der neue Teilnehmer muss aber als Slave initialisiert
 sein.
 Um den Bus zu verwalten, bzw. zu wissen ob neue Teilnehmer
 dazugekommen sind, muss ein und nur ein Master sowie ein geeignetes
 Protokoll vorhanden sein. Der Master kann z.B. jede Sekunde den Bus
 auf neue Teilnehmer abfragen.
 Neue Teilnehmer können sich z.B. mit Adresse 0xEF melden, nachdem der
 Master seine Abfrage auf diese Adresse rausgeschickt hat, melden die
 sich und kriegen vom Master eine neue Adresse zugewiesen. Von da an
 bis zum Reset behalten die diese Adresse.

Tobias E. schrieb:
> Was kann passieren wenn ein Teilnehmer entfernt wird, der gerade an
> einer Übertragung beteiligt war (als Master oder Slave)?
 Natürlich kann jeder Slave zum Master werden, ob das aber notwendig
 und sinnvoll ist - das ist die Frage.

> Und was kann man tun um dies zu verhindern?
 Nichts - deswegen kriegen die Slaven auch Adressen - wenn der Master
 auf diese Adresse ein NACK kriegt, ist der Slave nicht mehr da.
 Wenn auf ein Byte kein ACK kommt, ist der Slave auch nicht mehr da.

 Immer vorausgesetzt, dass deine Behauptung:
> Ich habe einen Anwendungsfall bei dem Mikrocontroller mit einem I²C-Bus
> kommunizieren.

 auch stimmt. Mit "dummen" ICs geht das nicht.

: Bearbeitet durch User
von Tobias E. (m1k3y)


Lesenswert?

Marc V. schrieb:
> [...]

ungeschicktes Timing. Siehe mein Kommentar vor dir.

Eine Art DHCP ist vorgesehen.

: Bearbeitet durch User
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.