0

我正在尝试捕获连接到 USB 的设备的响应。使用此代码:

sudo stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
sudo stty raw; cat > /home/received.log < /dev/ttyUSB0
echo "Monitor started"

在端口就绪时,向设备发送命令请求

echo -en '\x5A\x00\x00\x0D\x0A\x71' > /dev/ttyUSB0

然后阅读日志并将响应粘贴到另一个文件中正确转换它 xxd -plain /home/received.log > /home/output.txt

所以我可以显示数据, cat -v < /home/output.txt

但是我需要更稳定的东西,该代码向我显示了这个错误:

stty: 'standard input': Inappropriate ioctl for device

这很奇怪,因为它正在工作......

我想捕捉响应并将其存储在变量中。

4

1 回答 1

0

我建议摆脱stty raw.

除非您发送/接收 tty 子系统将处理的特殊字符,这是不太可能的 - 因为您说它正在工作 - 您几乎肯定不需要它。

如果它确实有效,您可能会发现一些不良副作用,例如:

  • 退格键不会删除您输错的字符
  • control-c 不会终止你的进程

以及您在终端会话中可能依赖的其他内容。

FWIW,我正在使用 Arduino 到 Mac、Windows (cygwin) 和 Linux(从 USB/串行端口读取)做类似的事情,而且我stty raw在任何这些环境中都没有受到诱惑。

于 2019-07-04T02:53:45.980 回答