31

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

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

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

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

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

4

5 回答 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 编译这个,但我找不到结果,抱歉。

于 2014-02-06T16:05:56.137 回答
3

Since it's for development/test instead of production, I'd recommend having a solid-state_relay as part of a second device and using that to cycle the power on the USB connection.

于 2008-12-31T23:02:00.600 回答
3

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

于 2012-05-19T01:57:18.247 回答
2

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

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

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

我已经成功地使用这种技术为“锁定”的 USB 设备循环供电。它肯定胜过物理拔出设备,尤其是在远程或无人 PC 上。

于 2016-06-24T20:31:03.247 回答
1

Unfortunately, it's not possible on stock PCs.

USB host chipsets do not have the capability to fully power-down. There is some signaling that you can do in USB 2.0 or 3.0 to ask the device to go into a sleep-state, but the port will provide power even when the PC is turned off. (That's so devices like iPods and whatnot can still charge if needed.)

于 2008-12-31T22:42:55.867 回答