2-Draht-Bus mit dynamisch zuweisbaren Adressen

Gast #3007913
Lesenswert?

Tach auch,

Wie der Betreff schon sagt, möchte ich einen 2-Draht-Bus mit dynamisch 
zuweisbaren Slaveadressen implementieren. Das ganze soll schlank und 
einigermaßen einfach zu benutzen sein, auf µC's laufen und wenig Strom 
brauchen. Typische Anwendungen haben max. 5 Geräte am selben Bus, um 
sich nichts zu verbauen wäre eine maximal erlaubte Anzahl von 50..100 
Teilnehmer wünschenswert. Hotplug sollte auch unterstützt werden.

Nun dachte ich an den SMBus, der seit der Version 2.0 eine Form von ARP 
(Address Resolution Protocol) unterstützt. Damit wäre die dynamische 
Adressierung gewährleistet. SMBus bietet auch genug freie Adressen, das 
passt also auch. Dass die Logik für die Initialisierung u.U. etwas 
aufwändiger wird kann man durch geschicktes kapseln sicher in dem Griff 
bekommen, sollte also machbar sein.

Um jedoch entsprechende Slaves aufzubauen, müsste der µC ARP-fähig sein, 
was bedeutet, dass er auf mehrere Adressen lauschen können muss (siehe 
Atmel App Note AVR316). Leider finde ich bei den üblichen Verdächtigen 
(Atmel, TI, ...) keinen µC, der das kann.

Nun die Fragen an euch:

1. Gibt es eine alternative Lösung für SMBus-ARP mit gängigen µC's?
2. Welche anderen Protokolle/Schnittstellen könnten die o.g. Forderungen
   erfüllen?
3. Habt ihr andere sachdienliche Hinweise?

Grüße
Gast #3011647
Lesenswert?

Ziemlich coole Idee, vielleicht bringt es irgendwann jemanden weiter:

"Every node are multi-master mode.
Let's introduce the concept of arbiter that replaces you actual master 
to not confuse terms.
Let's assign a fixed slave address for your arbiter (which will act as a 
master most of the time but must answer request too).
Let node request a slave address to the arbiter after a random delay to 
minimize chances of collision.
Here you go! Simple and effective scheme with no external pins."

http://www.linkedin.com/groups/Methods-enumerating-I2C-slaves-autoassigning-4023060.S.113408032

Das schöne ist, man braucht keine spezielle Hardware, Multi-Master-Mode 
ist wesentlich gängiger.
Gast #3011672
Lesenswert?

Das normale Zweidrahtprotokoll sieht dies nicht vor. Es geht von einem 
Master aus der mit bekannten Adressen kommuniziert.
Wolltest Du das ändern, so müsstest Du sehr viel intelligentere Slaves 
installieren und eine Schicht einbauen, die das volle Programm von 
Anmelden über Adressverteilen bis hin zum Abmelden implementiert und 
natürlich nebenbei den Datenaustausch übernimmt.
Ein großer Vorteil von I²C und Konsorten ist: Die Slaves sind sehr 
einfach, dass Protokoll übersichtlich.
Wohl gemerkt: Es gibt so etwas. Es wurde bereits verwandt. Schau Dir mal 
die Struktur des USB-Protokolls an und im Bereich von CAN und Konsorten 
gibt es auch die Möglichkeit On-The-Fly Empfänger und Sender 
nachzurüsten.
Nur mit einfach läuft dann nichts mehr.
Gast #3011687
Lesenswert?

amateur schrieb:
> Nur mit einfach läuft dann nichts mehr.

Das ist das Ding. Ich denke die Idee von Richard P. ist bestechend 
einfach, in meiner konkreten Anwendung ist das ein guter Ansatz.

Ein wenig Hirnschmalz muss ich noch in die 'Denumeration' stecken, meine 
Slaves sind i.d.R. immer online, auch wenn sie nicht am Bus hängen. Hier 
kann man gut mit einem Timeout arbeiten. Auf Master-Seite ist das 
einfacher zu erkennen.

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