Hallo zusammen,
ich muss vielleicht etwas weiter ausholen, um mein Problem zu
beschreiben.
Aktuell arbeite ich an einer Steuerung für ein Gerät, welches aus drei
Grundplatinen besteht, die über UART und SPI miteinander vernetzt sind.
Zwei der Platinen besitzen einen STM Cortex M4 mit integriertem USB und
integriertem DFU Bootloader. Die dritte Platine besteht aus einem
Grafikchip BT816 mit extern angeordnetem Flash Speicher zum Speichern
der Bilddaten. Mittels eines USB2QSPI Adapters ist der Flash Speicher
auch über USB "ansprechbar".
Das Gesamterät selbst soll nur "EINEN" USB Anschluss besitzen.
Jetzt mein "Wunschdenken":
µC1,µC2 und der Flash Speicher werden mit einem USB Hub (am Besten SMD)
verbunden, der Ausgang des USB Hubs mit dem an der Geräterückwand
angeordneten "zentralen USB Anschluss" verbunden.
Um den Kunden jetzt nicht zu verwirren wäre es optimal, über digitale
Eingänge oder ein Busprotokoll entscheiden zu können, welcher der drei
USB Teilnehmer gerade mit der zentralen Schnittstelle verbunden wird.
So kann z.B. immmer standardmäßig nur der erste µC verbunden sein und
Prozesswerte liefern, sollte ein Firmwareupdate an µC2 oder ein
Grafikupdate am Flash Speicher erfolgen, könnte man den Hub
dementsprechend umschalten.
Alle drei Geräte dauerhaft auf der Schnittstelle zu belassen halte ich
für nicht praktikabel, weil dann die Kunden doch den falschen VCP für
die Anwendung auswählen etc.
Hat jemand von euch schonmal sowas gemacht und hat ggf. einen (am Besten
auch noch verfügbaren Chip) der genau das erfüllt?
Für alle konstuktiven Ideen schonmal vielen Dank!!!
Lg
Hanna
Also grundsätzlich gibt es sowas wie USB Multiplexer, z.B. MAX4899E
Hanna schrieb:> über digitale> Eingänge oder ein Busprotokoll
Das wird jetzt schwieriger: Wer bedient die Eingänge?
Wenn die Update Software umschalten soll, muss sie irgendwie mit dem
Multiplexer kommunizieren können. Während der die USB Verbindung trennt.
Wenn alle Controller stattdessen an einem Hub hängen, fallen mir spontan
zwei Ideen ein: Der Haupt-Controller bekommt ein "Update-Modus
aktivieren" Kommando und aktiviert dann die USB Ports der weiteren ICs,
alle Schnittstellen werden sichtbar und der Updater sucht sich die
richtigen raus (VID/PID).
Im Normalbetrieb sind die anderen Schnittstellen einfach nicht aktiv.
Oder du versuchst es über das Power Management vom USB Hub IC. Es gibt
einige, die für jeden Downstream Port die 5V getrennt freigeben können.
Das nimmst du als "enable" Signal für die restlichen Controller. Hier
wird die Konfiguration etwas schwierig, weil der Hub irgendwie mit
deaktivierten Ports starten müsste. Keine Ahnung ob man die so verbiegen
kann, denn normalerweise schaltet der Host nur zum Strom sparen bewusst
ab.
Es gab ein Projekt, da hat jemand über diese Steuersignale einen ISP
Programmer gebaut. Wie man das aber im Detail anspricht, keine Ahnung.
Hallo Andre,
danke für deine Antwort.
Zu deiner Frage: Wer Steuert das? Der erste µC steuert auch den VT816
und ein grafisches Display an. Dort könnte man ein Menü hinterlegen,
heißt also µC1 könnte über Ports oder Bus am USB Hub "selektieren". Die
Methode mit der Spannungsversorgung schaue ich mir gleich nochmal an.
Danke!!
Hanna schrieb:> Hab mir den MAX4899E gerade angeschaut. genau das was ich> brauche!!!> Gibt es momentan verfügbare alternativen?
Pollin verkauft:
USB 3.0 Hub RED4POWER R4-U004B
Passiver 4-port USB 3.0-Hub mit Schalter pro USB-Port und
Anschlussmöglichkeit für ein externes Netzteil.
Hanna schrieb:> µC1 könnte über Ports oder Bus am USB Hub "selektieren".
Ok, wusste nicht, dass das so möglich ist.
Du musst dann nur sicher stellen, dass wenn uC 1 im Reset/Bootloader
ist, die USB Verbindung immer zu 1 geschaltet wird (Pull-up/down o.ä.).
Momentan verfügbare Multiplexer musst du dir selber raus suchen, ich bin
da momentan auch nicht so im Thema.
TI, Analog Devices, Onsemi und NXP haben solche Schalter auch im
Sortiment. Vielleicht findest du da was.
Das ist viel zu kompliziert - Softwareproblem mit Hardware lösen...
Hanna schrieb:> Alle drei Geräte dauerhaft auf der Schnittstelle zu belassen halte ich> für nicht praktikabel, weil dann die Kunden doch den falschen VCP für> die Anwendung auswählen etc.
Das Problem lässt sich viel leichter lösen. Entweder gar keinen VCP
sondern "direkt" USB verwenden und von der PC-Software aus automatisch
per VID/PID den richtigen Port auswählen, oder in die USB-Serial-Adapter
eine bestimmte Seriennummer einprogrammieren und den richtigen VCP daran
erkennen. Vermeidet nebenbei auch Konflikte mit völlig anderen
angeschlossenen VCPs.
Womit das sicher geht, sind die Hubs von SMSC (jetzt Microchip).
Also USB2514, als Beispiel. Da kann man per I2C einzelne Ports abdrehen.
Wir nutzen das um "hochqualitativer" Zukaufhardware den virtuellen Tritt
zu verpassen, wen sie mal wieder hängt (Powercycle).
Man kann auch Ports auf Fullspeed limitieren und dergleichen mehr.
Ich vermute, dass das gute Betriebssystem auch ohne I2C können, weil das
irgendwo in der USB-spec steht. Portswitches vorausgesetzt. Aber als
Hardwarefuzzi kann ich das nicht mit Sicherheit sagen.
Das sollte so oder so ähnlich eigentlich so zielich jeder Hub-Chip
beherrschen.
Niklas G. schrieb:> Das ist viel zu kompliziert - Softwareproblem mit Hardware lösen...
das sehe ich auch so, zumal ja nicht sichergestellt ist dass der
Anwender vor dem Update nicht den falschen Controller im Menu
eingestellt hat. Man muss also trotzdem irgend eine Art von Sicherung
zusätzlich einbauen.
Thomas Z. schrieb:> Niklas G. schrieb:>> Das ist viel zu kompliziert - Softwareproblem mit Hardware lösen...>> das sehe ich auch so, zumal ja nicht sichergestellt ist dass der> Anwender vor dem Update nicht den falschen Controller im Menu> eingestellt hat. Man muss also trotzdem irgend eine Art von Sicherung> zusätzlich einbauen.
Haha, also ein guter Teil meines täglichen Brotes ist Würgarounds für
Softwareprobleme in Hardware einzubauen.
Denn die Software wird in einer anderen Abteilung programmiert, und es
ist immer "total schwierig" mit den "nicht vorhandenen Ressourcen" da
was zu ändern. Außerdem "muss man das Testen" und das ist "viel zu
aufwändig" alternativ "kann man das 2023 eintakten".
Noch schlimmer ist Zukaufsoftware. "Das können wir schon ändern, aber
das kostet 20000€". "Das ist dann 2025 fertig".
Willkommen im Jahr 2022.
Eine eigene Frage?
Dieser Thread ist über 4 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.