我的程序通过 ftdi usbserial port 与各种电子设备进行通信 . 在硬件方面,可能会发生ftdi芯片因短暂停电而受到干扰 . 如果发生这种情况,软件应重置连接并继续与设备通信 . 只要断电足够长,这种方法就可以正常工作 (>~0.5 s) . 如果它非常短(如 <~0.1 s ),则无法再重置连接几分钟 . 与端口的每个连接都失败,并显示端口仍在使用的消息 . 所以这是我到目前为止所尝试的:

运行ftdi API命令 FT_ResetDeviceFT_CyclePort 甚至 FT_RescanFT_Reload 也无济于事 .

从USB和电源拔下设备并重新插入它无济于事 . 端口仍然被阻止 .

即使USB电缆断开连接,仍然可以在Windows设备管理器中看到幻像端口 . 所有连接到此端口的尝试都会因端口使用消息而失败,与我用于连接端口的程序无关 .

如果在断电时端口未打开,我还可以重现效果 .

到目前为止,唯一有帮助的行动是重新启动Windows或等待几分钟 . 当然,这不是一个真正可行的选择 .

我正在寻找的是一种以编程方式重置USB /串口的方法,如果它最终处于幻像状态 . 也许这可以通过Windows API而不是ftdi API直接处理 .