【发布时间】:2017-11-08 14:06:01
【问题描述】:
我在两台计算机之间通过串行方式发送一些二进制数据。我这样做:
接收
cat < /dev/ttyO5 >> $file
发送
cat < $file > /dev/ttyO5
当我检查文件时,有时接收方机器会在最后复制文件开头的一些字节。像这样的:
ce16 8fa7 bf54 dc6b 238a #Original file
ce16 8fa7 bf54 dc6b 238a ce16 8fa7 #Generated file on receive machine
最后添加的字节数不固定,有时是3个字节,有时是4个....而且我不知道为什么,我在发送和接收之前刷新内存......
有什么线索吗?
编辑:已解决;需要在端口配置上禁用选项 -echo。
【问题讨论】:
-
此平台的 UART 驱动程序有问题?除此之外,可能还有延迟、DMA 和其他问题。
-
我不这么认为。它仅在我测试通信时发生。我的意思是,如果我传输一个文件,就没有问题。当我尝试发送 100 个 1000 字节的文件时,问题就来了。
-
看起来就像驱动程序错误或上述列表中的任何内容。
-
您可能需要一点说明。上面的例子清楚地表明您在用户空间中的
read()从 UART 内核缓冲区获取了额外的字节(位置由于某种原因重置为 0,可能涉及 DMA 和错误 n 驱动程序实现)。 -
好的,让我们假设它是您建议的问题之一......然后解释一下,为什么如果我做我之前提到的相同测试但在 C/C++ 上,问题就消失了?为什么只有在 bash 上执行此操作时才会出现问题?
标签: bash serial-port embedded-linux