6

我有一个带有内置 USB/串行适配器的设备(显示为 Prolific PL2303)。设备文档提供了有关如何与其通信的完整详细信息,并提供了一个示例 Windows 应用程序。但是,我需要在 Linux 上使用它——最好是使用 Python,但我对此并不太重视。

设备文档声明该设备以 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).

忽略写命令中的数据——这只是一个状态检查命令。不管那里有什么,设备应该以答案或错误响应。

我什至在设置各种 ctsrts 标志等之间关闭并重新打开设备,然后拔下/重新插入它以强制重置。如上所述,它继续使用 Windows 测试应用程序正常工作。我不能使用 Portmon 等来嗅探 Windows 端口流量,因为它是 64 位 Win7 安装,而且我目前没有时间构建 XP 机器。

有什么想法吗?

更新:我还在演示应用程序所在的同一个 Windows 机器上使用 Python 尝试了上述所有方法。它肯定会打开端口并进行通信,但无论写入什么内容,都不会返回任何信息。

UPDATE2:看起来它可能与设备驱动程序相关。一些额外的背景研究表明,一些 PL2303 芯片具有支持半双工的功能,但这不受 Linux 驱动程序的支持。Windows 演示应用程序附带一个专用设备驱动程序,并且该应用程序无法在使用默认 Windows 驱动程序的干净测试机器上运行。这让我觉得虽然我可以通过 Python 成功连接到它,但我无法控制双工通信(例如,即使以 STX/ETX 方式),因此这可能是一个绝望的案例。 叹息

UPDATE3:感谢以下评论。但是,我找不到任何解决方法。我尝试了 USB 协议分析器,并尝试拆卸驱动程序,但它变得相当耗时,所以最后我将设备拆开,经过一些修补后,我设法用合适的 PL2303 部件替换了现有的 USB 串行适配器- 在设备方面,它只是一个基本的 2 线串行接口,所以它不关心与它交谈的内容。我似乎无法结束这个问题,所以我会保持原样。

4

1 回答 1

1

尝试

s.flush()

就在您的 s.write 通话之后

于 2012-12-12T19:03:07.007 回答