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
panikplauze schrieb: > Leider finde ich bei den üblichen Verdächtigen > (Atmel, TI, ...) keinen µC, der das kann. Doch, z.B. ATmega48: "The TWAMR can be loaded with a 7-bit Salve Address mask. Each of the bits in TWAMR can mask (disable) the corresponding address bits in the TWI Address Register (TWAR)." Peter
Peter Dannegger schrieb: > Doch, z.B. ATmega48: Guter Hinweis, danke. Jetzt muss ich bloß noch herausfinden, ob die doppelte Adressierung das einzige Hindernis ist. Hat sich schon jemand hier mit der ARP-Thematik beschäftigt? Grüße
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.
Alles wurde schonmal erfunden. Sieh mal Apple ADB-Bus. RS232 mit Tristate-Treibern wäre auch eine Idee. Und das Stichwort Tristate bringt uns dann in die Ecke CAN und RS485 mit jeweils einem dritten Zustand eben.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.