web-dev-qa-db-fra.com

Éteindre un périphérique USB dans le logiciel sous Windows

Je souhaite redémarrer un périphérique USB via un logiciel sous Windows.

Je fais du développement sur un petit microcontrôleur d'alimentation USB. Cette puce reviendra au comportement natif lors d'un cycle d'alimentation et permettra un téléchargement de code. Étant donné que mon code plantera l'appareil en cas de problème, ce qui le fera ignorer toutes les commandes USB, je dois débrancher physiquement l'appareil du système.

Je veux faire du développement à distance et ne pas être physiquement présent.

Jusqu'à présent, j'ai essayé d'utiliser "devcon" pour désactiver des parties de la pile USB. Bien que cela amène les concentrateurs en D3 (doit être mis hors tension!), L'appareil est toujours alimenté.

Existe-t-il des solutions préexistantes ou des astuces SetupAPI qui pourraient vous aider?

27
Perpetual Student

Comme c'est pour le développement/test au lieu de la production, je recommanderais d'avoir un solid-state_relay dans le cadre d'un deuxième appareil et de l'utiliser pour éteindre la connexion USB.

3
devstuff

Certains concentrateurs USB ont la capacité de mettre hors tension leurs périphériques en aval.

"Est-il possible d'alimenter des ports sur un hub USB depuis Ubuntu?" https://askubuntu.com/questions/149242/is-it-possible-to-power-up-ports-on-a-usb-hub-from-ubunt Qui pointe vers une source c pour hub-ctrl.c

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

J'ai testé cela sur Ubuntu avec une unité LED USB Dream-Cheeky, et il a semblé éteindre l'appareil - bien que lorsqu'il est rallumé, l'appareil s'était souvenu (!) De son état marche/arrêt de la LED ??? - Cela ne s'est pas produit lorsque j'ai débranché et rebranché le câble USB de la LED ...

On dirait que quelqu'un a cherché à compiler ceci pour Windows, mais je n'ai pas pu trouver le résultat, désolé.

3
irdroid3

Vous pourriez faire avec un relais matériel et le contrôler via un logiciel: http://pintant.cat/2012/05/12/power-off-usb-device/ (bien sûr, utilisera 2 USB ports :-) un pour l'appareil, un pour le relais).

3
Carles

Il existe une solution simple à cela sous Windows si vous achetez ce concentrateur USB externe . Il possède une fonctionnalité non documentée qui met hors tension tous les périphériques USB connectés chaque fois que le concentrateur est "activé" dans le Gestionnaire de périphériques Windows. Vous pouvez le faire manuellement:

  1. Exécutez "Gestionnaire de périphériques"
  2. Développez "Contrôleurs de bus série universels"
  3. Ouvrez les propriétés du "concentrateur USB générique" approprié
  4. Sélectionnez l'onglet "Pilote"
  5. Cliquez sur le bouton "Désactiver"
  6. Cliquez sur le bouton "Activer". Le concentrateur désactivera brièvement la sortie d'alimentation vers ses 4 ports USB, puis le réactivera.

Vous pouvez également le faire par programme à partir de toute application Windows exécutée avec des privilèges d'administrateur. Voici n exemple en C # .

J'ai utilisé avec succès cette technique pour redémarrer les périphériques USB qui étaient "verrouillés". Il bat assurément le débranchement physique des appareils, en particulier sur les PC distants ou sans pilote.

2
Fanblade

Malheureusement, ce n'est pas possible sur les PC d'origine.

Les chipsets USB Host n'ont pas la capacité de s'éteindre complètement. Il y a des signaux que vous pouvez faire dans USB 2.0 ou 3.0 pour demander à l'appareil de passer en état de veille, mais le port fournira de l'énergie même lorsque le PC est éteint. (C'est ainsi que les appareils comme les iPod et autres peuvent toujours se recharger si nécessaire.)

0
Mark Maxham