从 Windows 我可以使用以下命令与串行端口设备通信:
mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z
设备启动请求的操作。
当我尝试从一个独立的Debian框或同一个 Windows 机器的 DebianVirtualBox实例完成相同的操作时,到目前为止我没有运气。
这里是等效的 Linux 命令(至少我这么认为):
stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo '\x12\x02' > /dev/ttyS0
什么都没发生.
我该怎么做?
如果要使用十六进制代码,则应添加-e
选项以启用反斜杠转义符的 echo 解释(但结果与echo
Ctrl+R的输出可能添加Ctrla您
echo -en '\x12\x02' > /dev/ttyS0
还要确保/dev/ttyS0
是您想要的端口。
echo '\x12\x02'
将不会被解释,并将字面上写入字符串\x12\x02
(并附加一个换行符)到指定的串行端口。
echo -n ^R^B
您可以在命令行上通过键入CtrlVCtrlR和CtrlV来构造脚本。
stty
命令应该有效,除非另一个程序正在干扰。常见的罪魁祸首是gpsd
,它查找正在插入的 GPS 设备。
注意:据我所知,屏幕实际上无法发送十六进制。为此,请使用echo
或printf
。
我使用这篇文章中的建议写入串行端口,然后使用another post中的信息从端口读取,结果不一。我发现使用 Screen 是一个“更容易”的解决方案,因为它直接打开与该端口的终端会话。
您可以发出此命令来打开屏幕会话,然后您键入的任何内容都将发送到端口,并在其下方打印返回值:
screen /dev/ttyS0 19200,cs8
(更改上述内容以满足您对速度,奇偶校验,停止位等的需求)我意识到 Screen 不是帖子特别要求的“Linux 命令行”,但我认为它具有相同的精神。另外,您不必每次都输入 echo 和引号。
回声
它遵循praetorian droid's answer。然而,这对我不起作用,直到我在发送echo命令时还使用了cat命令 (cat < /dev/ttyS0
)。
printf
我发现一个也可以使用 printf 的“% x”命令:
c="\x"$(printf '%x' 0x12)
printf $c >> $SERIAL_COMM_PORT
同样,对于 printf,在发送命令之前启动cat < /dev/ttyS0
。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(56条)