在Windows系统中,软件如何关闭USB设备的电源?

34

我希望能够通过Windows上的软件来对USB设备进行电源循环。

我正在开发一个小型USB供电微控制器。当它重新上电时,该芯片将恢复到初始状态并允许进行代码下载。由于当出现问题导致我的代码崩溃时,设备将忽略所有USB命令,因此我必须从系统中物理拔出设备。

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

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

是否有任何现有的解决方案或SetupAPI技巧可以帮助解决这个问题?

5个回答

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开/关状态 ??? - 当我拔下并重新插上USB引导到LED时,这种情况没有发生...

看起来有人尝试将其编译为Windows版本,但我找不到结果,抱歉。


3

由于这是用于开发/测试而不是生产,我建议在第二个设备中使用固态继电器并将其作为一部分,以利用它来循环USB连接的电源。


我们使用这种方法,只需使用电源继电器代替电力,将Vbus电缆插入电源继电器中。我知道有专门用于此目的的USB继电器,但我认为它们价格昂贵。 - Ilya
1
是否已经存在USB集线器,当主机进入低功耗模式时,它会关闭设备的电源?由于这是在实验室环境中,使用定制硬件将需要一场艰苦的战斗。 - Perpetual Student
我已经将链接作为单独的答案发布了。 - Ilya

3
如果您购买了这个外置 USB 集线器,您可以在 Windows 上轻松解决此问题。它有一个未记录的功能,每当在 Windows 设备管理器中“启用”集线器时,就会循环电源到所有连接的 USB 设备。您也可以手动执行以下操作:
  1. 运行“设备管理器”
  2. 展开“通用串行总线控制器”
  3. 打开适当的“通用 USB 集线器”的属性
  4. 选择“驱动程序”选项卡
  5. 单击“禁用”按钮
  6. 单击“启用”按钮。 集线器将暂时禁用所有 4 个 USB 端口的电源输出,然后再次启用。
您还可以从任何以管理员权限运行的 Windows 应用程序中以编程方式执行此操作。这里是C#示例
我已经成功使用此技术来循环电源到“锁定”的 USB 设备。与在远程或无人值守的计算机上物理拔插设备相比,这确实更加方便。

4
所引用的网页https://www.amazon.com/B00007AKAZ不存在。 - Jackdaw
给定的链接无效。你能在回答中提到具体的型号吗? - undefined

3

3
你为什么要发布与3年前的答案重复的回答? - Chris Stratton

0

很遗憾,在普通电脑上不可能实现。

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


2
这不是正确的,并且取决于特定的硬件。有一个选项可以关闭/开启根集线器的电源,有时你无法针对每个端口执行此操作,只能为所有根集线器端口执行。但你绝对可以关闭端口的电源。 - Ilya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接