从linux命令行写入串口
在Windows中,我可以使用以下命令与串口设备进行通信:
mode com1: baud=9600 data=8 parity=n stop=1 copy con com1 alt+18alt+2ctrl+z
设备启动请求的操作。
当我试图从一个独立的debian盒子或从同一个windows机器的debian virtualbox实例完成相同的操作时,我到目前为止没有运气。
这里是相当的Linux命令(至less我是这么认为的)
stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb echo '\x12\x02' > /dev/ttyS0
什么都没发生。
有人可以指导我正确的方向吗?
echo '\x12\x02'
将不会被解释,并将字面上写入string\x12\x02
(并追加一个换行符)到指定的串行端口。 反而使用
echo -n ^R^B
您可以通过在命令行上键入Ctrl + Ctrl + R和Ctrl + Ctrl + B来构build它。 或者使用编辑器键入脚本文件更容易。
stty
命令应该工作,除非另一个程序干扰。 一个常见的罪魁祸首是gpsd
寻找GPS设备插入。
如果要使用hex代码,则应添加-e
选项以通过echo启用对反斜杠转义的解释(但结果与使用echo
Ctrl Ctrl B的结果相同)。 正如wallyk所说,你可能想要添加-n
来防止换行符的输出:
echo -en '\x12\x02' > /dev/ttyS0
还要确保/dev/ttyS0
是你想要的端口。
屏幕:
注意 :屏幕实际上不能发送hex,据我所知。 要做到这一点,请使用echo
或printf
我正在使用这篇文章中的build议来写入串行端口,然后使用另一篇文章中的信息从端口读取,结果是混合的。 我发现使用屏幕是一个“更容易”的解决scheme,因为它直接打开与该端口的terminal会话。 (因为屏幕上有一个非常奇怪的界面,IMO,所以我把它放在引号里面,并且需要进一步的阅读来弄清楚。)
你可以发出这个命令来打开一个屏幕会话,然后你input的任何东西都会被发送到这个端口,并且下面会打印返回值:
screen /dev/ttyS0 19200,cs8
(改变上面的内容,以适应速度,奇偶校验,停止位等的需求)我意识到屏幕并不是“linux命令行”所特别要求的,但我认为它是一样的精神。 另外,您不必每次input回显和引号。
回声:
按照praetorian机器人的答案。 但是,直到我还在发送echo命令时使用cat命令( cat < /dev/ttyS0
) 时 ,这也不起作用。
PRINTF:
我发现也可以使用printf的'%x'命令:
c="\x"$(printf '%x' 0x12) printf $c >> $SERIAL_COMM_PORT
再次,对于printf,在发送命令之前启动cat < /dev/ttyS0
。