echo和cat测试串口回环异常问题

本文介绍了在进行串口回环测试时遇到的问题,即使用cat和echo命令导致的无限循环。问题源于'echo'、'onlcr'和'icrnl'设置。通过分析串口配置,发现这些选项在消息循环回自身时造成了数据异常。解决方案是使用stty命令禁用'echo'和'onlcr'选项,从而避免无限循环和数据错误。

echo和cat测试串口回环异常问题

现象描述

将/dev/ttyS1节点对应的硬件TX与RX连接,输入下面的测试命令:

cat /dev/ttyS1 &
echo "shit" > /dev/ttyS1

输出有问题,cat接收没有停止,直到杀死cat进程或断开物理上TXRX的连接

原因分析

在运行stty -a -F /dev/ttyS1之后,我发现有3个选项导致了这个问题:“echo”, “onlcr”,和"icrnl".由于这个串行端口被循环回自身,以下是运行echo “hi” > /dev/ttyS1后发生的情况:

  1. 默认情况下,echo命令在消息末尾附加一个换行符,因此“shit”+ LF将被发送到/dev/ttyS1.
  2. 由于设置了“onlcr”,串行设备将LF转换为CRLF,因此发送的Tx物理消息为“shit”+ CRLF.
  3. 由于设置了“icrnl”,Rx收到的物理消息将CR转换为LF。所以’cat’输出的消息是"shit" + LFLF.
  4. 因为设置了“echo”,在Rx上接收到的消息(“shit”+ LFLF),然后在Tx上被发送出去
  5. 由于"onlcr",“shit”+ LFLF变成了“shit”+ CRLFCRLF
  6. 由于"icrnl",“shit”+ CRLFCRLF 变成了“shit”+ LFLFLFLF
  7. 由于"echo",“shit”+ LFLFLFLF 被发送到了TX.
  8. 如此循环…

解决方案

利用stty命令去掉默认的回显参数:

stty -F /dev/ttyS1 -echo -onlcr

禁用“echo”可防止无限循环的消息,禁用“onlcr”可防止串行设备在输出时将LF转换为CRLF

附加

CR = carriage return (ASCII 0x0D); LF = line feed or newline (ASCII 0x0A)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值