4

我有很多与 STM32 VCP 相同的设备。Windows 8.1 为设备创建串行 COM 端口。如果我将一个设备连接到任何 PC USB 端口,Windows 将绑定到它的同一个 COM 端口。第二个设备连接到其他 USB 端口后,它将创建下一个具有不同串行 COM 号的 COM 端口。如果我拔下这些设备并以不同的顺序连接,COM 端口将在设备之间切换。这是一个问题,因为我每次都需要相同的 COM 端口顺序(物理上)。使用 USBlyzer 软件,我可以看到每个物理 USB 端口的某种 USB 端口号是不同的:

在此处输入图像描述

所以我想通过端口号通过这些设备访问(获取当前设备)。或者列出所有设备并从设备对象中获取此端口号?

在 libusb 文档中发现它有这样一个方法:

uint8_t libusb_get_port_number (libusb_device *dev)
获取设备连接的端口号。

链接: http: //libusb.sourceforge.net/api-1.0/group__dev.html

也许 PyUSB 也有...

4

1 回答 1

2

找到了我的问题的其他解决方案。使用 Windows DeviceManager API 从位置信息和带有 COM 端口号的设备的友好名称中获取端口和集线器编号(USB 物理标识)。解析此信息并获得用于串行通信的信息。

from infi.devicemanager import DeviceManager
dm = DeviceManager()
dm.root.rescan()

devices = dm.all_devices


for i in devices:
    try:
        print '{} : address: {}, bus: {}, location: {}'.format(i.friendly_name, i.address, i.bus_number, i.location)
    except Exception:
        pass
于 2015-06-08T14:27:18.043 回答