【问题标题】:duplicated data over serial通过串行重复数据
【发布时间】: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


【解决方案1】:

根据经验,您不应通过未知配置通过串行端口复制二进制数据。将数据编码为文本文件(uuencode、base64、引用可打印、实现您自己的)或确保将串行端口配置为传输 8 位原始数据。寻找this example 看看它是如何在C 代码中实现的。要从 shell 脚本或 CLI 操作串行端口配置,您可以使用 stty 命令。重要的是:设置 8 个数据位,禁用软件控制流并选择要传输的原始数据。确保在两侧设置相同的配置。

【讨论】:

  • 我使用 bash,我不能使用 C.. 我忘了说,两台机器都设置为原始模式。 stty 的选项我没有检查它们。但问题是有些文件没问题,有些是添加的字节......
  • @Lomezno:请参阅此跨站点副本unix.stackexchange.com/a/117064/112235,它提供了对需求的一些真实见解
【解决方案2】:

将 Lomezno 的解决方案转化为答案:

stty -F <DEVICE> -echo

(其中&lt;DEVICE&gt; 是串行设备)

【讨论】:

    【解决方案3】:

    Lomezno 提到不想使用 C。要重置所有端口设置,我使用以下 Python 脚本:

    #!/usr/bin/python2.7
    
    import os, time, termios, sys
    
    PORT = sys.argv[1]
    
    # reset the serial port configuration
    fd     = os.open(PORT, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
    iflag  = termios.IGNBRK
    oflag  = 0
    cflag  = termios.CS8 | termios.CREAD | termios.CLOCAL
    lflag  = 0
    speed  = termios.B115200
    cc     = termios.tcgetattr(fd)[-1]
    attr   = [iflag, oflag, cflag, lflag, speed, speed, cc]
    termios.tcsetattr(fd, termios.TCSANOW, attr)
    os.close(fd)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 2015-04-12
      • 1970-01-01
      • 2015-11-21
      • 2019-09-13
      相关资源
      最近更新 更多