奇怪(py)串行linux损坏

2024-05-12 15:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基于Atmel SAMA5D36的Linux SBC。我有另一个设备通过/dev/ttyS2通过TTL线路(1152008n1)连接到它。使用pyserial,我可以与该设备进行相当高带宽的查询/响应对话。在

周期性地(至少每分钟一次),我看到从另一台设备返回的日期非常重复的损坏。如果它用一些文字来回应

"123456" (ascii character values)

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

^{pr2}$

希望这是清楚的。它将删除2,下一个字符如预期的那样,后面跟着一个字符-0,然后恢复正常。在

我使用的是内核4.1.10。通过一些调试语句,我很确定这不会发生在python循环中,因为0会出现在read()缓冲区的随机位置。我还将一个示波器连接到输入线路上,并验证了电线没有携带这种腐败。在

我正在寻找一个答案,可以让我找到正确的方向,弄清楚为什么会发生这种情况。CPU负载似乎是为了增加频率(例如,当我为一个连接的BLE适配器执行一系列DBUS流量时)。在


Tags: devlinuxascii对话字符线路values文字
1条回答
网友
1楼 · 发布于 2024-05-12 15:34:57

这可能是溢出错误造成的。如果你看一下atmel_序列号,你可以看到是否有任何错误。

cat /proc/tty/driver/atmel_serial

例如,在ttyS2上,您可能会看到这样的情况(oe:显示溢出错误):

^{pr2}$

由于您是高速串行,您可以尝试在USART线路上实现DMA。通过将以下内容添加到usart设置中,调整内核中相应的dts文件:

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

对于我的内核,我必须禁用SPI和I2C,这样就有足够的DMA信道可供USART使用。

相关问题 更多 >