在bash中将十六进制字节发送到串行

时间:2014-03-19 15:49:25

标签: bash command-line serial-port serial-communication

我可以使用

将hec字节发送到串口
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
echo -en '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > /dev/ttyUSB0

但是当我尝试从文件循环读取测试时,它不想工作

#!/bin/bash
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
while read line
do
    name=$line
    echo -en $name | tr -d ' ' > /dev/ttyUSB0
    sleep 0.04
done < $1

我像这样调用脚本

./sendData.sh file.txt

file.txt有一些像这样的简单内容

尝试1

\\ xFF\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00

尝试2

\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF

有人能指出我缺少什么。

1 个答案:

答案 0 :(得分:5)

问题是read默认解释转义序列,有效地删除了反斜杠。让您的文件包含例如\x01\x02\x03并使用read -r

while read -r line
do
  echo -en "$line" > /dev/ttyUSB0
done < "$1"