【发布时间】:2020-04-28 06:28:14
【问题描述】:
我正在使用 FTDI FT4232 芯片来扩展 Windows 10 上的四个 COM 端口。
这些扩展的 COM 端口链接到四个不同的设备。因此,如果我想通过这些 COM 端口与其他设备通信,我需要知道要调用哪些端口。
我正在用 python 编码,这是我用 pyserial 得到的。
>python -m serial.tools.list_ports -v
COM3
desc: USB Serial Port (COM3)
hwid: USB VID:PID=0403:6011 SER=5
COM4
desc: USB Serial Port (COM4)
hwid: USB VID:PID=0403:6011 SER=5
COM5
desc: USB Serial Port (COM5)
hwid: USB VID:PID=0403:6011 SER=5
COM6
desc: USB Serial Port (COM6)
hwid: USB VID:PID=0403:6011 SER=5
4 ports found
但是在Linux中,pyserial可以获取位置信息,可以用来区分这四个端口。
~$:python3 -m serial.tools.list_ports -v
/dev/ttyUSB0
desc: Quad RS232-HS
hwid: USB VID:PID=0403:6011 LOCATION=1-2.1:1.0
/dev/ttyUSB1
desc: Quad RS232-HS
hwid: USB VID:PID=0403:6011 LOCATION=1-2.1:1.1
/dev/ttyUSB2
desc: Quad RS232-HS
hwid: USB VID:PID=0403:6011 LOCATION=1-2.1:1.2
/dev/ttyUSB3
desc: Quad RS232-HS
hwid: USB VID:PID=0403:6011 LOCATION=1-2.1:1.3
4 ports found
有人知道这个问题吗?
临时解决方案: 修改 list_ports_windows.py 如下:
elif szHardwareID_str.startswith('FTDIBUS'):
m = re.search(r'VID_([0-9a-f]{4})\+PID_([0-9a-f]{4})(\+(\w*))&(\w*)&(\w*)&(\w*)&(\w*)?', szHardwareID_str, re.I)
if m:
info.vid = int(m.group(1), 16)
info.pid = int(m.group(2), 16)
if m.group(8):
info.serial_number = int(m.group(8),16)
# USB location is hidden by FDTI driver :(
info.hwid = info.usb_info()
然后你就可以用vid+pid+serial_number调用你想要的端口了。
【问题讨论】: