¿Puede un dispositivo USB intentar ser alimentado por el bus y luego volver a ser autoalimentado?

5

El dispositivo tiene una batería, pero sería bueno tener alimentación desde el bus cuando esté disponible. Por lo general, una computadora suministrará 500 mA, por ejemplo, mientras que un teléfono inteligente en modo OTG solo necesita para suministrar 8 mA .

¿Es posible hacer algo como esto?

  1. solicite 500 mA
  2. si se acepta: apague la computadora y cargue la batería desde la computadora
  3. else: solicita 200 mA
  4. si se acepta: poder de la computadora
  5. else: reclamación autoalimentada, energía de la batería

Esto parece ser para lo que están las configuraciones :

  

Por lo tanto, es posible tener dos configuraciones, una para cuando el dispositivo está alimentado por bus y otra cuando está alimentado por la red. ...   Una vez que todas las configuraciones han sido examinadas por el host, el host enviará un comando SetConfiguration con un valor distinto de cero que coincida con el valor de configuración de bConfiguration de una de las configuraciones. Esto se utiliza para seleccionar la configuración deseada.

¿Es suficiente especificar configuraciones múltiples en los descriptores, una para cada requisito actual? ¿El SO los prueba automáticamente en orden y pasa al siguiente si uno falla?

Dispositivos USB de configuración múltiple y Windows parece 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 encontrada en el índice "alternativo" especificado.

Sin embargo, esto no funciona en la práctica? :

  

“Los controladores de Microsoft funcionan invariablemente con 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 poco frecuentes en la práctica, y Microsoft desalienta a las personas a diseñar nuevos ".

y :

  

Los controladores de Microsoft solo pedirán la primera configuración, y si eso pide demasiada información, 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 para que no haya mucho punto.

Si las configuraciones múltiples 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 de USB, no sobre la implementación del hardware de cómo conectar la batería, etc.)

    
pregunta endolith

1 respuesta

5

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, podría hacerlo sin problema.

Enumerar, falló en una solicitud de 500 mA. El host debe señalar este error de enumeración de acuerdo con las Especificaciones .

El dispositivo desconecta los pines de datos usb, cambia su descriptor usb y vuelve a indicar la enumeración.

Si falló. Repita, cambiando su descriptor para leer de nuevo autoalimentado. 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 volver a alimentar el VUSB con su batería a menos que quiera romper algo. Entonces señal otra vez.

El descriptor no es más que unos pocos bytes que puede cambiar a través de variables. Mientras pueda cambiar eso, está bien.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas