El dispositivo tiene una batería, pero sería bueno tener alimentación por bus cuando esté disponible. Una computadora generalmente suministrará 500 mA, por ejemplo, mientras que un teléfono inteligente en modo OTG solo necesita suministrar 8 mA .
¿Es posible hacer algo como esto?
Esto parece ser para lo que son las configuraciones :
Por lo tanto, es posible tener dos configuraciones, una para cuando el dispositivo se alimenta desde el bus y otra cuando se alimenta desde la red. ... Una vez que el host haya examinado todas las configuraciones, el host enviará un comando SetConfiguration con un valor distinto de cero que coincida con el bConfigurationValue de una de las configuraciones. Esto se utiliza para seleccionar la configuración deseada.
¿Es suficiente especificar varias configuraciones en los descriptores, una para cada requisito actual? ¿El sistema operativo los prueba automáticamente en orden y pasa al siguiente si uno falla?
Los dispositivos USB de configuración múltiple y Windows parecen decir que así es como funciona:
Durante la enumeración, USBCCGP primero intentará seleccionar la configuración cuyo descriptor se encuentra en el índice "original" especificado. Si el intento falla, normalmente debido a que la configuración requiere más de 100 mA mientras que el concentrador ascendente del dispositivo solo tiene alimentación de bus, entonces USBCCGP intenta seleccionar la configuración que se encuentra en el índice "alternativo" especificado.
Sin embargo, esto no funciona en la práctica? :
“Los controladores de Microsoft funcionan invariablemente con solo la primera configuración de un dispositivo. El soporte de Microsoft para dispositivos compuestos no se activará si el dispositivo tiene varias configuraciones. En consecuencia, los dispositivos de configuración múltiple parecen ser raros en la práctica, y Microsoft desalienta a las personas a diseñar otros nuevos” .
y :
Los controladores de Microsoft solo solicitarán la primera configuración, y si eso requiere demasiada corriente, que así sea.
y :
no es común tener más de una configuración. Los controladores estándar de Windows siempre seleccionarán la primera configuración, por lo que no tiene mucho sentido.
Si varias configuraciones no funcionan en la práctica, ¿puede el dispositivo detectar que ha sido rechazado, simular una desconexión y volver a conectarse con un conjunto diferente de descriptores?
(Esta es una pregunta sobre la parte de enumeración/comunicación USB, no la implementación de hardware de cómo conectar la batería, etc.)
Eso define un proceso de enumeración normal. Si no funciona para usted de esa manera, y está programando el lado del periférico USB, entonces podría hacerlo sin problemas.
Enumerar, falló en la solicitud de 500 mA. El anfitrión debe señalar esta falla de enumeración de acuerdo con las especificaciones .
El dispositivo desconecta los pines de datos usb, cambia su descriptor usb y señala nuevamente para la enumeración.
Si falló. Repita, cambiando su descriptor para que lea autoalimentado nuevamente. Debe tener un método para cambiar el pin de alimentación. Un interruptor de alimentación USB, por ejemplo. Un diodo O puente si la caída de voltaje es aceptable. No puede retroalimentar el VUSB con su batería a menos que quiera romper algo. Luego señale de nuevo.
El descriptor no es más que unos pocos bytes que puede cambiar a través de variables. Mientras puedas cambiar eso, estás bien.
Eamón