【问题标题】:Linux Remove UART extra charactersLinux 移除 UART 多余字符
【发布时间】:2014-12-05 01:01:25
【问题描述】:

在 linux 上工作,以 115200 波特率向串口发送数据:

echo -e "\x1B\x11\x00\x00" > /dev/ttyAMA0

接收端正在读取以下数据:

\xF8\x1B\x11\x00\x00\x0D\x0A

我不希望 \xF8 作为起始字节和 \x0D\x0A 作为尾部(回车和换行字节)。 我怎样才能删除它们?到目前为止,我发现的是

stty raw -F /dev/ttyAMA0

这会停用\x0D,但我想摆脱\xF8\x0A 并且没有其他选项对我有用。

【问题讨论】:

    标签: linux bash terminal uart tty


    【解决方案1】:

    您可以使用echo -en 消除换行符。或者改用printf

    您是从树莓派发送的吗?每次打开连接时都会发送0xF8 似乎是一个已知问题(例如,通过调用echo)。我不知道是否有修复,但您可以通过使用串行终端程序保持连接打开以防止进一步的0xF8

    这里的第三篇文章中有一个示例,展示了如何在 bash 中使用重定向来保持连接:exec 9> /dev/ttyAMA0
    http://www.raspberrypi.org/forums/viewtopic.php?t=34528&p=293067

    根本问题:
    有人说这是驱动程序问题(请参阅this answer),但据我了解,以下表明它与硬件相关:

    http://elinux.org/RPi_Serial_Connection#Glitch_when_opening_serial_port
    当串行端口打开时,TXD 上的电压为负脉冲大约 32 us(无论波特率如何)。此脉冲可能会被解释为连接到 TXD 引脚的设备的传输,这可能会产生意想不到的影响。

    这也意味着您收到的垃圾取决于波特率。我不会依赖修复并寻找解决方法。

    如果你可以控制接收器,你可以让它等待一个自定义的字节序列,只有在接收到这个序列后才开始操作。

    上面的 elinux.org 链接可以给你一些其他的想法。

    【讨论】:

    • 感谢@1000ml,这将完成工作。我正在研究运行最新 raspbian 的树莓派。我相信博通芯片负责管理UART。你认为博通有可能修复这个错误吗?
    • 我不会依赖它。请查看我的更新答案。
    • 这绝对是我希望的最完整的答案。谢谢 1000 毫升
    【解决方案2】:

    已编辑*

    使用 stty 来改变你的设备终端如何解释回车符和换行符呢?

    链接

    http://www.computerhope.com/unix/ustty.htm

    ********************旧答案********************

    使用 sed 删除“\xF8”和“\x0D\x0A”怎么样?

     sed -e 's/\\x0D\\x0A$//g' -e 's/^\\xF8//g' my_file > new_file
    

    实际例子?

    echo '\xF8\x1B\x11\x00\x00\x0D\x0A' |sed -e 's/\\x0D\\x0A$//g' -e 's/^\\xF8//g'
    

    输出

    \x1B\x11\x00\x00
    

    【讨论】:

    • 我认为你没有正确理解这个问题。
    • 我正在努力提供帮助。对移植和波特了解不多,但是我发现了一篇有趣的文章。链接在我编辑的答案中。希望这会有所帮助
    • stty 手册页?很抱歉,但我认为这也无济于事。 OP 已经发现了这一点。
    • 很好,因为你很擅长批评我试图提供帮助......为什么不给我们解决方案呢?或者你不知道答案??...说起来容易做起来难。。
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多