Apague un dispositivo USB en el software en Windows

Me gustaría activar el ciclo de un dispositivo USB a través del software en Windows.

Estoy desarrollando en un pequeño microcontrolador de energía USB. Este chip volverá al comportamiento nativo en un ciclo de encendido y permitirá la descarga de un código. Como mi código bloqueará el dispositivo cuando las cosas van mal, haciendo que ignore todos los comandos de USB, tengo que desconectar físicamente el dispositivo del sistema.

Quiero hacer el desarrollo de forma remota, y no tener que estar físicamente presente.

Hasta ahora he intentado usar “devcon” para deshabilitar partes de la stack USB. Si bien esto lleva los concentradores a D3 (¡debe estar apagado!), Aún se está suministrando alimentación al dispositivo.

¿Hay alguna solución preexistente o trucos de SetupAPI que puedan ayudar?

Podría hacerlo con un relé de hardware y controlarlo a través del software: http://pintant.cat/2012/05/12/power-off-usb-device/ (por supuesto, usará 2 puertos USB 🙂 uno para el dispositivo, uno para el relé).

Algunos concentradores USB tienen la capacidad de apagar los dispositivos descendentes.

“¿Es posible encender puertos en un concentrador USB desde Ubuntu?” https://askubuntu.com/questions/149242/is-it-possible-to-power-up-ports-on-a-usb-hub-from-ubuntu Lo que apunta a alguna fuente c para hub-ctrl.c

Ver: http://www.gniibe.org/development/ac-power-control-by-USB-hub/index

Probé esto en Ubuntu con una unidad LED Dream-Cheeky USB, y pareció apagarla, aunque cuando se encendió de nuevo, el dispositivo recordó (!) Su LED encendido / apagado? – Esto no sucedió cuando desenchufé y vuelva a conectar el cable USB al LED …

Parece que alguien ha buscado comstackr esto para Windows, pero no pude encontrar el resultado, lo siento.

Dado que es para desarrollo / prueba en lugar de producción, recomiendo tener una actualización de estado sólido como parte de un segundo dispositivo y utilizarlo para activar la conexión USB.

Hay una solución simple para esto en Windows si compra este concentrador USB externo . Tiene una función no documentada que interrumpe el ciclo de alimentación de todos los dispositivos USB conectados siempre que el concentrador esté “habilitado” en el Administrador de dispositivos de Windows. Puedes hacer esto manualmente:

  1. Ejecute “Administrador de dispositivos”
  2. Expand “Controladores de bus serie universal”
  3. Abra Propiedades para el “Concentrador USB Genérico” apropiado
  4. Seleccione la pestaña “Controlador”
  5. Haga clic en el botón “Deshabilitar”
  6. Haga clic en el botón “Habilitar”. El concentrador deshabilitará brevemente la salida de potencia a los 4 puertos USB y luego lo habilitará nuevamente.

También puede hacerlo mediante progtwigción desde cualquier aplicación de Windows que se ejecute con privilegios de administrador. Aquí hay un ejemplo en C # .

Utilicé con éxito esta técnica para conectar la energía a dispositivos USB que estaban “bloqueados”. Seguro que supera a los dispositivos de desenchufar físicamente, especialmente en PC remotas o no tripuladas.

Desafortunadamente, no es posible en PCs comunes.

Los conjuntos de chips host USB no tienen la capacidad de apagar completamente. Hay algunas señales de que puede hacer en USB 2.0 o 3.0 para solicitar que el dispositivo entre en modo reposo, pero el puerto proporcionará energía incluso cuando la PC esté apagada. (Eso es para que los dispositivos como el iPod y todo lo demás todavía puedan cargarse si es necesario).