web-dev-qa-db-ja.com

WindowsのソフトウェアでUSBデバイスの電源を切る

Windowsのソフトウェアを使用してUSBデバイスの電源を入れ直します。

小型のUSB電源マイクロコントローラーで開発を行っています。このチップは、電源サイクル時にネイティブの動作に戻り、コードのダウンロードを許可します。私のコードは、問題が発生するとデバイスをクラッシュさせます-すべてのUSBコマンドを無視するため-デバイスをシステムから物理的に外す必要があります。

私はリモートで開発を行いたいのですが、物理的に立ち会う必要はありません。

これまでのところ、「devcon」を使用してUSBスタックの一部を無効にしてみました。これによりハブがD3に接続されますが(電源をオフにする必要があります!)、デバイスにはまだ電力が供給されています。

役立つ可能性のある既存のソリューションまたはSetupAPIトリックはありますか?

27

製品版ではなく開発/テスト用なので、2番目のデバイスの一部として solid-state_relay を使用し、それを使用してUSB接続の電源を入れ直すことをお勧めします。

3
devstuff

一部のUSBハブには、ダウンストリームデバイスの電源をオフにする機能があります。

「UbuntuからUSBハブのポートに電源を投入することは可能ですか?」 https://askubuntu.com/questions/149242/is-it-possible-to-power-up-ports-on-a-usb-hub-from-ubunt あるCソースを指しますhub-ctrl.c

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

私はこれをUbuntuでDream-Cheeky USB LEDユニットを使用してテストしましたが、電源がオフになっているように見えました。 -USBリード線をLEDから取り外して再度差し込んだとき、これは起こりませんでした...

誰かがこれをWindows用にコンパイルしようとしているようですが、結果が見つかりませんでした。

3
irdroid3

ハードウェアリレーを使用して、ソフトウェアで制御できます: http://pintant.cat/2012/05/12/power-off-usb-device/ (もちろん、2 USBを使用しますポート:-) 1つはデバイス用、もう1つはリレー用です。

3
Carles

この外部USBハブ を購入すると、Windowsでこれを解決する簡単な方法があります。 Windowsデバイスマネージャーでハブが「有効」になっている場合は常に、接続されているすべてのUSBデバイスの電源を入れ直す、文書化されていない機能があります。これは手動で行うことができます:

  1. 「デバイスマネージャ」を実行します
  2. 「ユニバーサルシリアルバスコントローラ」を展開します
  3. 適切な「汎用USBハブ」のプロパティを開く
  4. 「ドライバー」タブを選択します
  5. [無効にする]ボタンをクリックします
  6. 「有効」ボタンをクリックします。ハブは、4つのUSBポートすべてへの電力出力を一時的に無効にしてから、再び有効にします。

これは、管理者特権で実行されているWindowsアプリケーションからプログラムで行うこともできます。これが C#の例 です。

私はこのテクニックを使用して、「ロック」されたUSBデバイスの電源を入れ直すことに成功しました。特にリモートPCまたは無人PCでは、物理的にプラグを抜くデバイスに勝ります。

2
Fanblade

残念ながら、それは在庫のPCでは不可能です。

USBホストチップセットには、完全にパワーダウンする機能がありません。 USB 2.0または3.0でデバイスにスリープ状態に移行するように要求できる信号がいくつかありますが、PCの電源がオフの場合でもポートは電力を供給します。 (これはiPodのようなデバイスであり、必要な場合でも充電できません。)

0
Mark Maxham