在 Windows 上的软件中关闭 USB 设备电源

问题描述 投票:0回答:5

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

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

我想远程进行开发,而不必亲自到场。

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

是否有任何现有的解决方案或SetupAPI技巧可能有帮助?

windows winapi embedded usb microcontroller
5个回答
5
投票

如果您购买此外部 USB 集线器,在 Windows 上有一个简单的解决方案。它有一个未公开的功能,只要在 Windows 设备管理器中“启用”集线器,就会循环给所有连接的 USB 设备供电。您可以手动执行此操作:

  1. 运行“设备管理器”
  2. 展开“通用串行总线控制器”
  3. 打开相应“通用 USB 集线器”的属性
  4. 选择“驱动程序”选项卡
  5. 单击“禁用”按钮
  6. 单击“启用”按钮。集线器将暂时禁用所有 4 个 USB 端口的电源输出,然后再次启用。

您还可以通过任何以管理员权限运行的 Windows 应用程序以编程方式执行此操作。这是 C# 中的示例

我已成功使用此技术为“锁定”的 USB 设备重新供电。它肯定胜过物理拔掉设备,尤其是在远程或无人值守的 PC 上。


4
投票

一些 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 开/关状态??? - 当我拔下并重新插入 LED 的 USB 线时,并没有发生这种情况...

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


4
投票

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


3
投票

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


0
投票

不幸的是,这在普通电脑上是不可能的。

USB 主机芯片组不具备完全断电的能力。您可以在 USB 2.0 或 3.0 中执行一些信号来要求设备进入睡眠状态,但即使 PC 关闭,该端口也会提供电源。 (这样,iPod 等设备在需要时仍然可以充电。)

© www.soinside.com 2019 - 2024. All rights reserved.