无法 Read/Write 在 Linux 上使用 pyserial (Xubuntu 18.04)

Unable to Read/Write using pyserial on Linux (Xubuntu 18.04)

我有一个专有设备,它通过 USB 数据线连接到我的计算机。

当 运行在我的 Xubuntu 安装上安装代码时,我无法成功读取(或写入,或两者?)。

注意: 相同的逻辑在 Windows 上运行得非常完美(在 7、8 和 10 上测试)和 Mac(在 Yosemite 和 Mojave 上测试)。

这是我尝试 运行 的代码(为简单起见硬编码了一些值):

ser = serial.Serial('/dev/ttyACM0', 500000, timeout = 0.03, write_timeout = 0.015)
ser.write(bytes([248, 40, 0]))
ser.flush()
reply = ser.read(40)

当前行为

设备正在运行设置一些代码来响应它接收到的数据包。在这个初始数据包中,我的 Python 代码正在请求设备状态的完整副本,它在一个高达 40 字节的数组中接收。

在 Linux 上,返回以下内容而不是请求的 40 个字节: [248, 13, 10, 40, 13, 10, 0, 13, 10]

我觉得有趣的是它 returns 与我尝试写入的字节完全相同,它们之间有 13 和 10。

预期行为 在 Mac 和 Windows 上,都会返回类似这样的内容(内容并不那么重要):

[71, 89, 65, 32, 1, 4, 50, 0, 27, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 1, 255, 255, 136, 1, 255, 255, 255, 255]

预期行为与 Mac 和 Windows 上的行为相同。

额外信息

任何 info/ideas 将不胜感激!

[EDIT2] 问题变得更奇怪了。这是我今天尝试过的:

如果在将用户添加到组后没有这样做,请尝试在重新启动计算机后执行此操作 dialout

尝试在连接时发送与您的设备相关的附加信息,例如XON/XOFFparitystopbits

在脚本开头添加 # coding: utf-8

解析:

OS 会在初始连接 5-6 秒后向设备发送 "X"。

无论启动什么应用程序,都会发生这种情况。它在后台执行此操作。

我们的固件被编程为 "X" 启动调试模式,我们用它来测试硬件的状态。在任何有价值的东西可以 sent/received.

之前必须退出它

我不确定为什么系统发送这个字符,或者是否它只发生在那个单一的安装上,但它是除了 VS Code 和 Git.

之外几乎没有安装其他软件的准系统计算机

[最终更新]

在 运行 Linux 的其他系统上也观察到同样的问题,更具体地说,是 Fedora 实例。