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

Pav*_*n K 2 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
Run Code Online (Sandbox Code Playgroud)

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

#!/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
Run Code Online (Sandbox Code Playgroud)

我像这样调用脚本

./sendData.sh file.txt
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

试试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
Run Code Online (Sandbox Code Playgroud)

有人能指出我缺少什么.

tha*_*guy 5

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

while read -r line
do
  echo -en "$line" > /dev/ttyUSB0
done < "$1"
Run Code Online (Sandbox Code Playgroud)