Hallo zusammen, ich benötige Hilfe beim Design eines Bussystems für ein Spiel an dem ich gerade arbeite. Ich muss dafür zuerst ein bisschen ausholen um meine Anforderungen möglichst genau zu beschreiben: Ich möchte 12 Modulsteckplätze der Größe 130 x 130 x 60 mm in einen Koffer einlassen, wobei die Hälfte der Steckplätze vorne und die andere Hälfte auf der Rückseite jeweils in einer 2 x 3 Konfiguration angeordnet sind. Aufgrund der Größe soll als „Backplane“ keine Leiterkarte, sondern Flachband- oder Twisted-Pair-Kabel zum Einsatz kommen. Der Steckverbinder soll über +5 V und +3,3 V für die Stromversorgung, Masse, die eigentlichen Bussignale (dazu später mehr) sowie über eine 4 Bit breite Adresse verfügen, welche über ein Widerstandsnetzwerk auf Backplaneseite eingestellt wird. Das Modul soll diese Adresse auslesen und basierend darauf seine eigene Busadresse festlegen. Der „Game Controller“, welcher ein Modul wie jedes andere ist und in einen beliebigen freien Steckplatz gesteckt werden kann, probiert dann beim Spielstart die Adressen der verbliebenen 11 Steckplätze durch und fragt, falls der Steckplatz belegt ist, nach der Modul-ID (es gibt verschiedene Modultypen, aber das führt hier zu weit). Neben den 12 Steckplätzen gibt es eine Reihe weiterer fixer Busteilnehmer (noch unklar wie viele genau, aber nicht mehr als ein Dutzend) sowie ein batteriebetrienes Energiemodul, welches den Bus mit Strom versorgt. Die Module müssen hotplugfähig sein, und zwar in dem Sinne dass Module ein-/ausgesteckt werden können während der Bus mit Strom versorgt wird. Sobald das Spiel gestartet wurde und der Game Controller den Status aller Steckplätze abgefragt hat, kann das Ein-/Ausstecken von Modulen als Bedienfehler gewertet werden, auch wenn es vorteilhaft wäre, wenn das System anschließend nicht in einen undefinierten Zustand geraten würde. Die Last auf dem Bus ist sehr gering, da Aktivität ausschließlich durch Benutzerinteraktion getriggert wird und die Nachrichten nur wenige Bytes lang sind. Ich brauche allerdings Multi-Master-Unterstützung; während der Game Controller zunächst als alleiniger Master agiert und die Bus Discovery durchführt, kann nach Spielstart jedes Modul selbst zum Master werden und den Game Controller kontaktieren. Das einfachste und kostengünstigste Bussystem für diese Aufgabe scheint erst einmal I2C zu sein. Mir ist bewusst, dass I2C nicht für lange Buslängen und Hotplugging geeignet ist, aber es sieht so aus als könnte man mit einem hotplugfähigen Bus-Puffer wie dem TCA9511A [1] auf jedem Modul diese Einschränkungen überwinden. Mich beunruhigt allerdings ein bisschen Abschnitt 9.2.1.2, „Multiple connections to a common node“, der relativ schwer verständlich ist und keine wirkliche Aussage darüber macht, wie man den beschriebenen Effekt abmildern kann. Gibt es jemanden der Erfahrung im Design von hotplugfähighen I2C-Bussystemen hat und eine Aussage darüber machen kann ob mein Ansatz funktionieren kann, insbesondere wenn ich ein ganzes Dutzend hotplugfähige Modulsteckplätze brauche? Falls I2C aus irgendeinem Grund ausfällt, hätte ich am ehesten an CAN als Alternative gedacht. Allerdings habe ich mir dazu noch wenig Gedanken gemacht; welches Bussystem wäre sonst noch für meine Anforderungen (insbesondere im Hinblick auf Hotplugging) geeignet? Jetzt zu den Steckverbindern: Es ist wichtig, dass die Modulverbinder mindestens einige 1000 Steckzyklen durchhalten, denn jedes Mal wenn das Spiel neu gestartet wird werden die Module umgesteckt. AFAIK brauche ich für Hotplugging zwingend einen gestaffelten Steckverbinder (so wie in Abb. 3 in „I2C Solutions on Hot Swap Applications“ [2] beschrieben). Ich würde gerne zwei separate Steckverbinder benutzen – einen für die Stromversorgung und die Bussignale, den anderen für die Moduladresse – damit die Verbindung mechanisch stabiler wird. Idealerweise hätte die Steckverbindung genügend Haltekraft um das Modul gegen die Schwerkraft und Rütteln im Steckplatz zu halten, aber ich bezweifle dass das möglich sein wird; deswegen werde ich wahrscheinlich noch einen mechanischen Rückhaltemechanismus zusätzlich benötigen. Leider habe ich ziemliche Schwierigkeiten, einen geeigneten Steckverbinder zu finden. Meine erste Wahl war Samtecs Edge Rate [3], aber es scheint davon keine gestaffelte Version zu geben, oder zumindest kann ich sie nicht finden. Eine Alternative wäre, meinen eigenen Platinenrandstecker zu entwickeln und diesen z.B. mit einer Edge Card [4] Buchse zu kombinieren. Mein bisheriger Wissenstand ist allerdings, dass Platinenstecker generell nicht besonders zyklenfest sind, aber handfeste Zahlen konnte ich bisher nicht finden. Hat hier jemand Erfahrungswerte und/oder Empfehlungen? Danke und Grüße Sephalon [1] https://www.ti.com/lit/ds/symlink/tca9511a.pdf [2] https://www.ti.com/lit/an/scpa058/scpa058.pdf [3] https://www.samtec.com/connectors/backplane/micro-backplane-systems/edge-rate [4] https://www.samtec.com/connectors/edge-card
Stefan W. schrieb: > Das einfachste und kostengünstigste Bussystem für diese Aufgabe scheint > erst einmal I2C zu sein. Nein. Für mich ist es 1Wire von Dallas als iButton.
Route_66 H. schrieb: > Nein. > Für mich ist es 1Wire von Dallas als iButton. Danke, aus irgendeinem Grund habe ich 1-Wire bisher nicht in Erwägung gezogen, obwohl es meine Anforderungen eigentlich fast alle erfüllen würde! Der einzige Wermutstropfen ist, dass Multi-Muster-Betrieb von 1-Wire nicht unterstützt wird. Allerdings bin ich bei meinen weiteren Recherchen auf PJON [1] (bzw. PJDL [2] im Speziellen) gestoßen, welches genau dieses (und noch einiges mehr) kann. Am Osterwochenende werde ich mir das mal genauer anschauen; dieses Video [3] macht jedenfalls schon mal einen sehr guten Eindruck. [1] https://www.pjon.org/ [2] https://www.pjon.org/PJDL-specification-v4.0.php [3] https://www.youtube.com/watch?v=GWlhKD5lz5w
Stefan W. schrieb: > Der einzige Wermutstropfen ist, dass Multi-Muster-Betrieb von 1-Wire > nicht unterstützt wird. Mach dir nichts draus. Bei I²C ist Multi-Master Betrieb so problematisch, dass ihn fast niemand nutzt.
Stefan W. schrieb: > Ich brauche allerdings Multi-Master-Unterstützung Da Du ja keine riesen Datenvolumen hast, kann der Master auch leicht 12 Slaves pollen. Meine Erfahrung ist, das leider viele MC-Entwickler unfähig sind, den I2C-Standard zu lesen, zu verstehen und korrekt zu implementieren. Bezüglich Multimaster hatte ich nur mit original Philips einwandfreie Funktion erzielt (P87C751, P80C652, P89C668), sind aber alle ausgelaufen. Ich würde die Module nur mit einer Spannung versorgen und die 12 Module mit einem Widerstand am ADC adressieren. Dann kommt man mit 5 Leitungen aus (GND voreilend). Für hohe Steckzyklen eignen sich Rundsteckverbinder.
Es ist mir noch nicht ganz deutlich was ein Module machen soll. Wenn es nur um identifizierung geht wo was angeschlossen ist, kann man wie genennt 1-wire benutzen wobei jeder chip ein unique ID hat. Die braucht man nur einmal (bei initalisierung der game) im main prozessor fest zu legen. Was musz das modul witer noch machen ? Kommen da zB leds oder so auf ? Warum 3V3 und 5V, warum 4 bit adresse ? Gruesze Patrick aus die Niederlaende
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.