在Windows上用软件关闭USB设备

27 windows embedded usb microcontroller winapi

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

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

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

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

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

Fan*_*ade 5

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

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

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

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

  • 引用的页面 [https://www.amazon.com/B00007AKAZ](https://www.amazon.com/B00007AKAZ) 不存在。 (4认同)

Mar*_*ham 0

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

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

  • 这是不正确的,取决于特定的硬件。有时您无法针对每个端口且仅针对所有根集线器端口执行此操作,可以选择关闭/打开根集线器的电源。但你绝对可以关闭端口 (2认同)