我有一个基于 FTDI 芯片的 USB 设备。有时,它的驱动程序会被卡住。
在linux下,没有问题——设备会自动断开连接,并通过默认内核重新连接,唯一的问题是设备名称更改——可以通过udev规则修复。
在 Windows 下,当卡住时,应用程序执行 read()
或 write()
的线程会完全挂起。它不能被 TerminateThread
或 KillProcess
杀死。
终止应用程序的唯一方法是物理断开 USB 设备。
有什么方法可以以编程方式发出设备重新连接,这将消除驱动程序的死锁并允许重新打开端口并在之后继续工作?
如果需要,应用程序可以拥有管理权限。
最佳答案
我建议你把你的想法提高一步。您正在尝试直接重新启动 USB 设备,为什么不尝试使用集线器呢?
我遇到了类似的问题,正在做:
devcon remove *ROOT_HUB* && devcon rescan
当 USB 设备挂起时,将其重新连接至集线器。
注意:这将从设备管理器中删除所有 USB 设备并重新添加它们。您可以使用expect或类似方法执行devcon findall *ROOT_HUB*
并根据需要删除ROOT_HUB20
或ROOT_HUB30
。
关于usb - Windows下如何解决USB设备重连问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14000608/