【问题标题】:Read from serial port and store in hexadecimal从串口读取并以十六进制存储
【发布时间】:2015-12-25 16:17:55
【问题描述】:

我有一个甚高频收音机,它通过串行端口连续发送状态消息,我需要将我得到的消息作为十六进制数据存储在文本文件中

我尝试了如下所示的 hexdump 命令,并且我从 vhf 无线电获得的数据是正确的,但是这个脚本的问题是当我执行它时,它直到我按 ctrl-c 才结束

d -A n -t x1 -w128 /dev/ttyS0 > file.txt

所以我尝试了另一个命令,读取命令如下:

COUNTER=0
while [ $COUNTER -lt 10 ]; do
read -r -t1 -N128 DATA < /dev/ttyS0 
echo $DATA >> file1.txt
od -A n -t x1 -w128 file1.txt >> file2.txt
let COUNTER=COUNTER+1
done

但是file2.txt中存储的数据不正确。

我从收音机收到的消息不是我可以根据收音机协议文档解释的格式。所以当我说数据不正确时,我的意思是无法解释消息(它是随机接收的)

请注意,我在执行这两个脚本之前已经设置了串行端口,如下所示:

stty -g /dev/ttyS0 raw
stty -F /dev/ttyS0 9600

所以,请帮我解决这个问题。或者给了我另一种从串口读取的方式。

问候,

【问题讨论】:

  • 那么您希望脚本何时终止?一旦到达一定数量的字节,或者?
  • 是的,我希望脚本在收到一定数量的字节后终止。收音机的状态消息大约是 45 个字节,但由于收音机在连续传输,我想确保我收到了完整的状态消息。所以假设我需要接收 100 个字节然后终止脚本。
  • 对于您获取所需数据的第一个命令,您能否在您的问题中发布数据样本(比如 100 个字节)?
  • 数据是ASCII码吗?需要 CTRL+C 很可能是因为“数据”不包含 EOF(文件结尾)标记。如果您知道“消息开始”和“消息结束”标记是什么,那么您可以通过查找这些模式来提取。您也可以尝试 'tail -c (--bytes=K) 并将其通过管道传输到您的 hexdump 工具。 :)

标签: bash shell serial-port hexdump stty


【解决方案1】:

问题解决了:)

我尝试通过将 -N 设置为 KB 来使用 hexdump 命令,它成功运行

从串口读取到 1000 字节后停止

od -A n -N KB -t x1 -w128 /dev/ttyS0 > /tmp/filename.txt

所以,谢谢你们的合作。我真的很感激。

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 2018-09-11
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多