Die Lösung: In die Breite gehen, nicht in die Tiefe

Die Lösung: In die Breite gehen, nicht in die Tiefe

Verzeihen Sie mir, wenn der Titel die Form eines XY-Problems hat, aber:

Ich habe ein Windows-System, an das viele USB-Geräte angeschlossen sind. (Ich bin ein Embedded-Entwickler mit einer Reihe von Kunden und muss häufig Längsschnitttests an einer Reihe von Embedded-Geräten durchführen.) Ich beobachte das folgende Phänomen:

Mein Standardsatz an USB-Geräten sieht folgendermaßen aus:

Bildbeschreibung hier eingeben

In diesem Fall ist mein OSBOT TinyCam-Gerät jedoch nicht verfügbar. („Es sieht so aus, als würde eine andere App die Kamera bereits verwenden. Fehlercode der Windows-Kamera-App 0xA00F4243“)

Wenn ich irgendwelche vier der EDBG CMSIS-DAP-Geräte und/oder Atmel-ICE CMSIS-DAP-Geräte auswerfe (oder einfach ausstecke), funktioniert die TinyCam normal.

Was mich zu den Fragen führt:

  • Gibt es eine Begrenzung für die Anzahl der Geräte, die das System auf dem USB-Bus verwalten kann?
  • Gibt es zusätzliche Informationen, die ich sammeln kann, um das Problem besser zu diagnostizieren?

Außerdem glaube ich nicht, dass dies nur für die OSBOT TinyCam gilt. Wenn ich beispielsweise alle CMSIS-DAP-USB-Geräte abziehe, die OSBOT TinyCam anschließe und die Kamera-App starte, funktioniert die Kamera einwandfrei. Wenn ich dann aber alle CMSIS-DAP-Geräte anschließe, NACHDEM ich die TinyCam angeschlossen habe, kann meine Microchip IDE nicht mehr auf alle CMSIS-DAP-Geräte zugreifen:

Bildbeschreibung hier eingeben

In diesem Fall sieht es also so aus, als ob „wer zuerst da ist“ derjenige ist, der gewinnt, und die anderen werden ausgeschlossen.

Antwort1

Möglicherweise stoßen Sie hinsichtlich der Endpunkte auf die Einschränkung Ihres USB-Root-Host-Controllers. Dies ist eine Hardwarebeschränkung, die nichts mit Ihrem Betriebssystem zu tun hat.

Jedes USB-Gerät kann bis zu 32 Endpunkte definieren (16 Eingänge und 16 Ausgänge, wobei einer ein Steuerendpunkt sein muss), aber die meisten Geräte definieren nur 2 oder 3 Endpunkte (z. B. Dateneingang, Datenausgang und ein Steuerendpunkt). Hubs selbst definieren auch mindestens einen Steuerendpunkt. Jede USB-Controller-Implementierung kann ihre eigenen Layer- oder Endpunktbeschränkungen haben.

In Ihrem Fall benötigen einige Ihrer Geräte möglicherweise mehr Endpunkte als andere. Ihr USB-Root-Host-Controller hat möglicherweise auch eine eigene Beschränkung hinsichtlich der Anzahl der Endpunkte, die er unterstützen kann.

Um die Anzahl der von Ihrem Computer unterstützten Endpunkte zu erhöhen, benötigen Sie weitere Root-USB-Hostcontroller. Durch die Verkettung von USB-Hubs werden keine weiteren Endpunkte hinzugefügt, sondern die Anzahl wird eher reduziert, da die Hubs selbst Endpunkte des Root-Controllers verbrauchen.

Obwohl die USB-Spezifikation eine große theoretische Anzahl von Geräten auf einem Root-Controller zulässt, beschränken die praktischen Einschränkungen bei der Implementierung von USB-Controllern das mögliche Maximum auf eine viel niedrigere Zahl.

Ein Tool zur Überprüfung der Anzahl der Endpunkte (und aller anderen Dinge) auf Ihren USB-Geräten ist das Open-Source USB-Gerätestruktur-Viewer. Es kann die von einem Gerät verwendeten Endpunkte anzeigen, zeigt jedoch nicht die Beschränkung für den Root-Controller.

Hier werden beispielsweise drei Endpunkte für eine angeschlossene USB-Festplatte angezeigt:

Bildbeschreibung hier eingeben

Einige Quellen zum Thema:

Antwort2

Die Lösung: In die Breite gehen, nicht in die Tiefe

@harrymc hat die Frage richtig beantwortet: Die USB-Topologie war „zu tief“, was die Anzahl der Endpunkte begrenzte.

Bisher hatte ich vier 7-Port USB-Expander, „A“ und „C“ waren direkt mit dem PC verbunden, „B“ und „D“ waren von „A“ und „C“ aus per Daisy Chain verbunden.

+-----+   +---------+   +---------+
|     |<=>|A        |<=>|B        |
|     |   +---------+   +---------+
|     |   +---------+   +---------+
| PC  |<=>|C        |<=>|D        |
+-----+   +---------+   +---------+

Ich habe mein Setup so neu konfiguriert, dass „A“, „B“, „C“ und „D“ alle direkt mit dem PC verbunden sind.

+-----+   +---------+
|     |<=>|A        |
|     |   +---------+
|     |   +---------+
|     |<=>|B        |
|     |   +---------+
|     |   +---------+
|     |<=>|C        |
|     |   +---------+
|     |   +---------+
| PC  |<=>|D        |
+-----+   +---------+

Dadurch wurde die Tiefe meines USB-Gerätebaums um eine Ebene reduziert und ich kann jetzt alle benötigten Geräte gleichzeitig unterstützen.

verwandte Informationen