如何在Windows下发出USB设备重新连接

时间:2012-12-22 06:25:42

标签: usb deadlock device-driver ftdi

我有一个基于FTDI芯片的USB设备。有时,它的驱动程序会卡住。

在linux下,没有问题 - 设备自动断开连接,并且默认内核重新连接,只有问题是设备名称已更改 - 可以通过udev规则修复。

在Windows下,当它卡住时,当时执行read()write()的应用程序线程完全挂起。它既不能被TerminateThread杀死,也不能被KillProcess杀死。

杀死应用程序的唯一方法 - 是物理断开USB设备。

以编程方式发出设备重新连接的任何方法,这将删除驱动程序的死锁并允许重新打开端口并继续工作?

如果需要,管理权利申请可以有。

1 个答案:

答案 0 :(得分:5)

我建议你把想法提高一步。您正试图直接重启USB设备,为什么不尝试集线器?

我有类似的问题,并且正在做:

devcon remove *ROOT_HUB* && devcon rescan

挂起时,将USB设备重新连接到集线器。

注意:这将从设备管理器中删除所有USB设备并重新添加。您可以使用expect或类似内容devcon findall *ROOT_HUB*,并根据需要删除ROOT_HUB20ROOT_HUB30