我正在尝试与位于 的设备进行通信/dev/ttyACM0
。我需要编写一个命令,并在发送下一个命令之前等待响应(ACK)。
我发现了以下内容文章关于如何实现这一点,但我无法完全让它适合我的用例。我的猜测是我对收到的数据缺乏了解,并且它没有被新行终止。
我打开一个终端并使用 cat:
cat -v /dev/ttyACM0
然后我在另一个终端中打印:
printf 'S0100000FF\x0d' > /dev/ttyACM0
我在终端读取 tty 时得到的响应是^F
.发送另一个命令会在同一行上打印另一个命令,例如该行现在显示^F^F
,所以我猜测它不会被新行终止。
当使用上面链接的文章中的读取命令(在单独的终端中)时:
(read -n 60 -t 20 RESP < /dev/ttyACM0; echo $RESP)&
[1] 21028
然后来自写入终端的后续写入不会触发读取终端显示任何其他内容。
我还尝试通过简单地打印然后尝试读取 tty 来进行完全同步写入:
printf 'S0100000FF\x0d' > /dev/ttyACM0
cat -v /dev/ttyACM0
# Blank, nothing in file
我的问题归结为三个问题:
- 实际上代表什么
^F
?我知道^M
是回车符,但我不知道这种类型的字符叫什么(例如以 为前缀的字符^
)。 - 我以为 tty 只是一个文件,那么为什么在我的上一个示例中该文件是空的(互相打印和读取)
- 如何调整链接的文章以适合我的同步读/写脚本的目的?