![用 zadig 替换特定的 FTDI 设备驱动程序(保持类似设备不变)](https://linux22.com/image/1588370/%E7%94%A8%20zadig%20%E6%9B%BF%E6%8D%A2%E7%89%B9%E5%AE%9A%E7%9A%84%20FTDI%20%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%EF%BC%88%E4%BF%9D%E6%8C%81%E7%B1%BB%E4%BC%BC%E8%AE%BE%E5%A4%87%E4%B8%8D%E5%8F%98%EF%BC%89.png)
我找到了有关该主题的相关问题,但没有找到针对这个特定问题的答案(至少没有解决方案)。
我在同一台 PC(Windows 8/Windows 10)上使用两种 USB/串行适配器。其中一个适配器内部有 FT245R,另一个适配器内部有 FT232R(我通过使用 FTDI 的 FT_Prog 工具读取设备信息来查看)。
我想要做的是将其中一个适配器与“标准” FTDI VCP 驱动程序一起使用,并通过 libusk 和 python(libftdi)使用第二个适配器。
因此,我首先安装了 FTDI 串行驱动程序,然后拔下一个设备并使用 ZADIG 工具将剩余适配器的驱动程序更改为 libuskK。
问题是,当我查看设备管理器并再次插入第二个设备时,第二个设备(我没有更改其驱动程序)也被列为 libusbk 设备。
我怀疑这是因为上述两种 FTDI 芯片都使用相同的 PID 0x6001(顺便问一下:PID 是否是选择给定设备的驱动程序的唯一属性?)
解决这个问题的干净方法是什么(无需手动更改其中一个适配器的 PID)?
答案1
PID 是否是为给定设备选择驱动程序的唯一属性
Windows 使用 VID:PID 对来检测应该使用哪个驱动程序 - 这些inf
文件中引用了这些驱动程序。
当您想要为设备使用不同的驱动程序时,您应该更改 PID。
Zadig 允许一种解决方法(某种程度上):手动安装 libusb_win32 过滤驱动程序。这允许在 libusbK 和正常 COM 端口操作之间切换而无需重新安装驱动程序,但会影响具有相同 VID:PID 对的所有其他设备。
答案2
根据您的使用情况,可能存在无需安装不同驱动程序的解决方案。您提到您使用 libftdi 进行 python 开发。我只是假设您想要使用一些 MPSSE 功能。在这种情况下,使用 FTDI 通过 ctypes python 模块提供的本机 MPSSE dll 可能是一种替代方案。我最终选择了这个解决方案,因为驱动程序替换对我来说不是最佳选择。有多个来源显示了使用 ctypes 使用本机 DLLS 的用法,包括一些 MPSSE-SPI 和 MPSSE-I2C 的示例(例如搜索“mpsse I2C ctypes python”)。