在Windows上用软件关闭USB设备

时间:2008-12-31 21:42:35

标签: windows winapi embedded usb microcontroller

我想通过Windows上的软件重启USB设备。

我正在开发一个小型USB功率微控制器。该芯片将在电源循环中恢复原生行为并允许代码下载。由于我的代码会在出现问题时使设备崩溃 - 使其忽略所有USB命令 - 我必须从系统中物理拔出设备。

我想远程进行开发,而不是亲自进行开发。

到目前为止,我已尝试使用“devcon”来禁用部分USB堆栈。虽然这会将集线器带入D3(应该关闭电源!),但仍然会为设备供电。

是否有可能有帮助的预先存在的解决方案或SetupAPI技巧?

5 个答案:

答案 0 :(得分:3)

由于它是用于开发/测试而不是生产,我建议将solid-state_relay作为第二个设备的一部分,并使用它来循环USB连接上的电源。

答案 1 :(得分:3)

您可以使用硬件继电器并通过软件控制它:http://pintant.cat/2012/05/12/power-off-usb-device/(当然,将使用2个USB端口:-)一个用于设备,一个用于继电器。)

答案 2 :(得分:3)

某些USB集线器可以关闭其下游设备的电源。

“是否可以从Ubuntu为USB集线器上的端口供电?” https://askubuntu.com/questions/149242/is-it-possible-to-power-up-ports-on-a-usb-hub-from-ubuntu 哪个指向hub-ctrl.c的某些c源代码

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

我在Ubuntu上使用Dream-Cheeky USB LED单元进行了测试,它确实关闭了电源 - 虽然再次打开时,设备已记住(!)其LED开/关状态??? - 当我拔下插头并将USB导线插入LED时,这种情况不会发生......

看起来有人看过为Windows编译这个,但我找不到结果,抱歉。

答案 3 :(得分:2)

如果您购买this external USB hub,在Windows上有一个简单的解决方案。它具有未记录的功能,只要在Windows设备管理器中“启用”集线器,就可以为所有连接的USB设备供电。您可以手动执行此操作:

  1. 运行“设备管理器”
  2. 展开“通用串行总线控制器”
  3. 打开相应“通用USB集线器”的属性
  4. 选择“驱动程序”标签
  5. 点击“停用”按钮
  6. 点击“启用”按钮。集线器将暂时禁用其所有4个USB端口的电源输出,然后再次启用它。
  7. 您也可以从使用管理员priveledges运行的任何Windows应用程序以编程方式执行此操作。这是an example in C#

    我已成功使用此技术将电源循环至“锁定”的USB设备。它肯定会击败物理上拔掉设备,特别是在远程或无人PC上。

答案 4 :(得分:0)

不幸的是,它不适用于库存电脑。

USB主机芯片组无法完全关闭电源。有一些信号表明您可以在USB 2.0或3.0中执行,要求设备进入睡眠状态,但即使PC关闭,端口也会提供电源。 (那就像iPod这样的设备,如果需要的话还可以充电。)