从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 + RCtrl + Ctrl + B来构build它。 或者使用编辑器键入脚本文件更容易。

stty命令应该工作,除非另一个程序干扰。 一个常见的罪魁祸首是gpsd寻找GPS设备插入。

如果要使用hex代码,则应添加-e选项以通过echo启用对反斜杠转义的解释(但结果与使用echo Ctrl Ctrl B的结果相同)。 正如wallyk所说,你可能想要添加-n来防止换行符的输出:

 echo -en '\x12\x02' > /dev/ttyS0 

还要确保/dev/ttyS0是你想要的端口。

屏幕:

注意 :屏幕实际上不能发送hex,据我所知。 要做到这一点,请使用echoprintf

我正在使用这篇文章中的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