usb - Windows下如何解决USB设备重连问题

标签 usb deadlock device-driver ftdi

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

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

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

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

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

如果需要,应用程序可以拥有管理权限。

最佳答案

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

我遇到了类似的问题,正在做:

devcon remove *ROOT_HUB* && devcon rescan

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

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

关于usb - Windows下如何解决USB设备重连问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14000608/

相关文章:

android - 使用 Android NDK 和内核不支持的摄像头的原始 USB 连接实现 UVC 驱动程序

linux - UVC功能配置界面

c - 使用 HAL 库的 STM32l100rc USB 驱动程序

c++ - 在卸载 DLL 期间删除静态对象时退出线程会导致死锁?

rust - 在单个表达式中对同一变量的第二次锁定无限期地阻塞

macos - IO资源类

linux - 如何更改MTD设备序列号?

c# - 我怎样才能在 C# 中获得免费的 USB 端口?

windows - 插入USB设备时自动加载驱动程序

c# - 带有异步 Task.Run 方法的死锁,带有来自 Synchronus 方法的 Wait 和超时