系统相关
首页 > 系统相关> > 奇怪的(py)串行linux损坏

奇怪的(py)串行linux损坏

作者:互联网

我有一个基于Atmel SAMA5D36的Linux SBC.我有另一个设备通过TTL线(115200 8N1)通过/ dev / ttyS2连接到它.使用pyserial,我与该设备进行了相当高的带宽查询/响应对话.

定期(至少每分钟一次),我发现另一台设备返回的日期非常可重复.如果是用诸如

"123456" (ascii character values)

它将删除一个字符,并在以下字符后添加字符-0:

"13\x00456"

希望这很清楚.它将删除2,下一个字符如预期,跟随一个字符0,然后恢复正常.

我正在使用内核4.1.10.通过一些调试语句,我非常确定这不会在我的python循环中发生,因为0出现在read()缓冲区的随机位置.我还在输入线路上连接了一个示波器,并验证了该线路没有发生这种损坏.

我正在寻找一个答案,可以使我朝正确的方向弄清楚为什么会这样. CPU负载似乎确实增加了频率(例如,当我为连接的BLE适配器进行大量DBUS通信时).

解决方法:

这可能是溢出错误的结果.如果查看atmel_serial,则可以查看是否有任何错误.

cat /proc/tty/driver/atmel_serial

例如,在ttyS2上,您可能会看到以下信息(oe:显示溢出错误):

2: uart:ATMEL_SERIAL mmio:0xF0020000 irq:31 tx:266758 rx:361385 oe:51 RTS|DTR|DSR|CD|RI

由于您是高速率串行设备,因此您可以尝试在USART线路上实现DMA.通过在usart设置中添加以下内容,在内核中调整适当的dts文件:

atmel,use-dma-rx;
atmel,use-dma-tx;

对于我的内核,我必须禁用SPI和I2C,以便为USART提供足够的DMA通道.

标签:pyserial,serial-port,linux,python
来源: https://codeday.me/bug/20191112/2023860.html