我的设备带有内置USB /串口适配器(显示为Prolific PL2303)。设备文档提供了有关如何与之通信的完整详细信息,并提供了一个示例Windows应用程序。但是,我需要在Linux上使用它 - 理想情况下使用Python,但我对此并不太珍贵。
设备docs说明设备运行在9600,8N1半双工。 Windows应用程序工作正常 - 设备工作正常(所以我知道这不是一个设备问题)。但是,我无法在Linux上使用Python与它进行通信。我正在使用pySerial,我尝试过类似的(全双工,也是PL2303)设备,它工作正常。
我已经尝试了几种设置xonxoff,rtscts等的组合。我还尝试使用setRTS(True)进行RTS切换并检查CTS和DSR等 - 得到全部返回False。我可以使用pySerial成功打开设备(我可以看到活动指示灯闪烁 - 简单但有效的测试),如果你在读/写期间拔掉它,pySerial就会抱怨。
我设置的标志/行或发送的数据似乎无关紧要,总是得到相同的结果。
>>> s=serial.Serial()
>>> s.port('/dev/ttyUSB1')
>>> s.open()
>>> s
Serial<id=0x7fe94b533b50, open=True>(port='/dev/ttyUSB1', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=3, xonxoff=0, rtscts=0, dsrdtr=0)
>>> s.write('\2CMD2292\r')
>>> s.inWaiting()
0
>>> s.setRTS(True)
>>> s.getCTS()
False
(several iterations of above with different flags).
忽略write命令中的数据 - 这只是一个状态检查命令。无论发生什么,设备应该回答答案或错误。
我甚至在设置各种ctsrts标志等之间关闭并重新打开设备,并拔出/重新插入以强制重置。如上所述,它继续使用Windows测试应用程序正常工作。我无法使用Portmon等来嗅探Windows端口流量,因为它是64位Win7安装,我目前没有时间构建XP机器。
有什么想法吗?
更新:我也在演示应用程序所在的同一个Windows框中使用Python尝试了以上所有内容。它肯定会打开端口并进行通信,但无论写什么内容,都无法再回复信息。
UPDATE2:看起来它可能与设备驱动程序有关。一些额外的背景研究表明,一些PL2303芯片具有支持半双工的功能,但Linux驱动程序不支持此功能。 Windows演示应用程序附带专用设备驱动程序,该应用程序无法在使用默认Windows驱动程序的干净测试计算机上运行。这让我觉得虽然我可以通过Python成功连接它,但我无法控制双工通信(例如,甚至以STX / ETX方式),因此这可能是一个绝望的情况。 叹息
更新3:感谢下面的评论。但是,我找不到任何方法。我尝试了一个USB协议分析仪,我尝试拆卸驱动程序,但它只是相当耗时,所以最后我把设备分开了,经过一些修补后我设法用适当的PL2303部件替换现有的usb-serial适配器 - 在设备方面,它只是一个基本的2线串行接口,因此它并不关心与之交谈的内容。我似乎无法关闭这个问题所以我会保持原样。
答案 0 :(得分:1)
尝试
s.flush()
在你的s.write调用之后