Linux删除UART额外字符

时间:2014-12-05 01:01:26

标签: linux bash terminal uart tty

在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,其他选项对我没用。

2 个答案:

答案 0 :(得分: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的链接可以为您提供其他一些想法。

答案 1 :(得分:-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