Das Gerät hat eine Batterie, aber es wäre schön, wenn es über den Bus mit Strom versorgt werden könnte. Ein Computer liefert beispielsweise typischerweise 500 mA, während ein Smartphone im OTG-Modus nur 8 mA liefern muss .
Ist es möglich, so etwas zu tun?
Dies scheint das zu sein, wofür Konfigurationen da sind :
Daher ist es möglich, zwei Konfigurationen zu haben, eine, wenn das Gerät über den Bus versorgt wird, und eine andere, wenn es über das Netz versorgt wird. ... Nachdem alle Konfigurationen vom Host untersucht wurden, sendet der Host einen SetConfiguration-Befehl mit einem Wert ungleich Null, der mit dem bConfigurationValue einer der Konfigurationen übereinstimmt. Hiermit wird die gewünschte Konfiguration ausgewählt.
Reicht es aus, mehrere Konfigurationen in den Deskriptoren anzugeben, eine für jede aktuelle Anforderung? Probiert das Betriebssystem sie automatisch der Reihe nach aus und fährt mit dem nächsten fort, wenn einer fehlschlägt?
USB-Geräte mit mehreren Konfigurationen und Windows scheint zu sagen, dass es so funktioniert:
Während der Aufzählung versucht USBCCGP zunächst, die Konfiguration auszuwählen, deren Deskriptor sich im angegebenen „ursprünglichen“ Index befindet. Wenn der Versuch fehlschlägt, normalerweise weil die Konfiguration mehr als 100 mA erfordert, während der Upstream-Hub des Geräts nur Busstrom hat, versucht USBCCGP stattdessen, die Konfiguration auszuwählen, die am angegebenen „alternativen“ Index gefunden wird.
Das funktioniert aber in der Praxis nicht? :
„Microsoft-Treiber funktionieren ausnahmslos nur mit der ersten Konfiguration eines Geräts. Der Microsoft-Support für zusammengesetzte Geräte wird nicht aktiviert, wenn das Gerät über mehrere Konfigurationen verfügt. Folglich scheinen Geräte mit mehreren Konfigurationen in der Praxis selten zu sein, und Microsoft rät Menschen davon ab, neue Geräte zu entwickeln .“
und :
Microsoft-Treiber fragen nur nach der ersten Konfiguration – und wenn das zu viel Strom erfordert, sei es so.
und :
Es ist nicht üblich, mehr als eine Konfiguration zu haben. Windows-Standardtreiber wählen immer die erste Konfiguration aus, daher ist dies nicht sehr sinnvoll.
Wenn mehrere Konfigurationen in der Praxis nicht funktionieren, kann das Gerät erkennen, dass es abgelehnt wurde, eine Trennung simulieren und mit einem anderen Satz von Deskriptoren erneut verbinden?
(Dies ist eine Frage zum USB-Aufzählungs-/Kommunikationsteil, nicht zur Hardwareimplementierung zum Anschließen der Batterie usw.)
Das definiert einen normalen Enumerationsprozess. Wenn dies bei Ihnen nicht funktioniert und Sie die USB-Peripherieseite programmieren, können Sie dies problemlos tun.
Aufzählen, bei 500-mA-Anforderung fehlgeschlagen. Der Host sollte diesen Aufzählungsfehler gemäß den Specs signalisieren .
Das Gerät trennt die USB-Datenpins, ändert seinen USB-Deskriptor und signalisiert erneut eine Aufzählung.
Wenn fehlgeschlagen. Wiederholen Sie den Vorgang und ändern Sie den Deskriptor, um wieder mit eigener Stromversorgung zu lesen. Sie müssen eine Methode haben, um den Power-Pin zu wechseln. Ein USB-Netzschalter zum Beispiel. Eine Diode ODER Brücke, wenn der Spannungsabfall akzeptabel ist. Sie können den VUSB nicht mit Ihrer Batterie zurückspeisen, es sei denn, Sie möchten etwas kaputt machen. Dann nochmal signalisieren.
Der Deskriptor ist nichts als ein paar Bytes, die Sie über Variablen ändern könnten. Solange du das ändern kannst, ist alles in Ordnung.
Eamon