猿问

如何找出 Windows 上 FTDI 适配器背后的仪器?

我目前正在为 Windows 开发一个 Python 工具,它能够查找连接到 Windows pc 的所有设备。它已经支持以太网设备,现在我正在尝试添加对 USB 和串行设备的支持。对于那些设备,我想读出他们的供应商 ID、产品 ID、序列号,当然还有连接到设备所需的地址/端口。

使用 PyUSB 或 PyWin32 可以轻松检测简单的 USB 设备。不幸的是,许多设备说它的供应商是 FTDI,事实并非如此。据我所知,FTDI 只提供 USB 适配器/转换器。

那么,如何查找 FTDI 适配器后面的设备?我已经尝试过 PyUSB、PyWin32 和 PySerial,但他们都只是说,连接了一个 FTDI 设备;但我想知道 FTDI 适配器背后的实际设备……有没有办法找出来?

我希望你能帮助我......提前谢谢你。

更新

由于似乎没有通用的解决方案,是否至少有一种方法可以唯一地识别其中一个 FTDI 设备?其中一些提供序列号,但不幸的是不是全部。例如,有些设备的设备 ID 类似于“USB\VID_0403&PID_FAF0\7&5E2426C&0&2”,其中“7&5E2426C&0&2”应该是序列号。但是这些带有&符号的序列号并不是真正的序列号(也许它来自Windows左右)。PySerial 甚至将此序列号识别为“7”。

如果我至少有可能获得该设备的真实序列号,这将非常有帮助。所以我可以唯一地识别该设备,即使它在断开连接和重新连接后获得了新的端口或设备 ID。或者对于一台设备来说,那些 & 序列总是相同的?


慕娘9325324
浏览 120回答 4
4回答

Qyouu

当使用 FTDI 串行到 USB 转换器时,您通常会获得一个虚拟 com 端口,该端口被 Windows 识别为即插即用设备。一个小型内部电子电路板放置在 FTDI 电缆的 USB 插头中,该电缆执行从串行 UART 接口到 USB 的转换。当您现在请求有关已连接设备的信息时,您将获得已连接即插即用设备的信息,即 FTDI 电缆板,而不是此电缆后面的设备的信息。例如,当使用这种电缆连接读卡器时,您会得到 FTDI 电缆板的序列号,而不是读卡器的序列号。但是有可能可以检索到有用的信息。FTDI 有一个名为FT_Prog的程序,它允许对电缆中的 EEPROM 板进行编程。使用此工具,您可以更改一些可以从 FTDI 电缆检索的信息,如下图所示。有时会这样做,但对设备制造商来说不是强制性的。当它完成时,没有标准化的方案来说明这些领域的内容。您需要自己的已知设备标识符字典来处理它。另一种方法是直接从电缆后面的设备获取信息。但在这种情况下,您需要知道能够与设备通信的通信协议。如果使用专有协议,您唯一的机会是使用嗅探器硬件对协议进行逆向工程,但这可能有点极端^^

PIPIONE

USB 规范允许(不要求)设备提供包含序列号的字符串描述符 - 或者更好的是它可以是任何字符串。幸运的是,FTDI 提供了唯一的序列号。请参阅此线程Get Serial Number of USB device with Python 3

青春有我

FTDI 通常允许使用 EEPROM(实际上在大多数情况下是简单的闪存)来存储有关产品的特定信息。例如,可以分配一个特定的 vendorID、ProductID、SerialNo、Manufacturer Desc.、Product Desc。但它只是可选的(有关详细信息,请搜索 FT_Prog)。所以每个产品设计师都有自由,但不需要填写他/她想要的任何东西。如果您有一组想要支持的设备,您可以检查它们是否支持符合 SCPI 的接口。在这种情况下,您可以使用 *IDN? 关于他们的身份。如果没有,您可以希望产品已正确写入 ROM 以提供更多信息。在任何其他情况下,您只能猜测。

梦里花落0921

如果使用 FTDI 的公司对购买自己的供应商 ID 不感兴趣,那么您就不走运了。FTDI 背后没有标准协议,因此没有通用的方法来检测其背后的设备。
随时随地看视频慕课网APP

相关分类

Python
我要回答