8

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

在linux下,没有问题——设备​​会自动断开,默认内核会重新连接,唯一的问题是设备名称改变了——可以通过udev规则修复。

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

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

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

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

4

1 回答 1

5

我建议你把你的想法上移一步。您正在尝试直接重新启动 USB 设备,为什么不尝试集线器呢?

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

devcon remove *ROOT_HUB* && devcon rescan

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

注意:这将从设备管理器中删除所有 USB 设备并重新添加它们。您可以根据需要使用 expect 或 like 来执行和devcon findall *ROOT_HUB*删除。ROOT_HUB20ROOT_HUB30

于 2013-01-03T16:54:02.830 回答