2012-01-16 164 views
39

串行端口从Windows我可以使用下面的命令的串行端口设备通信:写入从Linux命令行

mode com1: baud=9600 data=8 parity=n stop=1 
copy con com1 
alt+18alt+2ctrl+z 

设备启动所请求的操作。

当我尝试从独立的debian盒子或同一个Windows机器的debian virtualbox实例完成相同的操作时,我到目前为止没有运气。

这里有相应的Linux命令(至少我是这么认为的)

stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb 
echo '\x12\x02' > /dev/ttyS0 

什么也没有发生。

请问有人能指引我走向正确的方向吗?

回答

16
echo '\x12\x02' 

将不被解释,并且将逐字写入字符串\x12\x02(和追加一个新行)到指定的串行端口。代替通过键入Ctrl键VCtrl键- [RCtrl键VCtrl键使用

echo -n ^R^B 

它可以在命令行上构建。或者使用编辑器键入脚本文件更容易。

stty命令应该工作,除非另一个程序干扰。一种常见的罪魁祸首是gpsd这看起来对GPS设备中被插入。

+0

非常感谢您的回复,我尝试了命令行中的echo -n CTRL + VCTRL + RCTRRL + VCTRL + B,但我无法使其工作,我想尝试其他命令,因此我想知道如何你拿出这些翻译(0x12 =^R,0x02 =^B),这些都不是ascii翻译我想。 – 2012-01-16 08:46:50

+0

@erincarikan:使用'man ascii'来查看0x12与Ctrl-R的关系。他们纯粹ascii。有可能某些ctrl组合不起作用,如ctrl- @(NUL)。编写一个程序来执行这样的二进制协议可能会更容易。 – wallyk 2012-01-16 08:56:52

+0

谢谢我完全了解它,但不幸的是它不起作用,我怀疑有些东西干扰stty,我没有运行gpsd。我必须更多地考虑这一点。 – 2012-01-16 09:39:21

31

如果要使用十六进制代码,您应该添加-e选项可启用反斜线的解释由回声逃脱(但结果是一样的与echoCTRL- [RCTRL)。而作为wallyk说,你可能要添加-n防止换行的输出:

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

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

+0

谢谢,我确定它是我想要的端口,是否有一种简单的测试串行连接的方式,echo总是返回成功。 – 2012-01-16 10:27:07

+0

+1用于提示-e选项 – Arunas 2013-01-11 18:57:13

+1

如果您使用'bash',请使用'$'''引用:'printf $'\ x12 \ x02'>/dev/ttyS0' – 2015-06-08 17:00:46

5

SCREEN:

:屏幕实际上是无法发送十六进制,据我所知。要做到这一点,使用echoprintf

我用的建议,在这篇文章中写到串行端口,然后使用另一post的信息从端口读取,结果好坏参半。我发现使用屏幕是一个“更容易”的解决方案,因为它直接与该端口打开终端会话。 (我放在引号中比较容易,因为屏幕有一个非常奇怪的界面,海事组织,并需要一些进一步的阅读来弄清楚。)

可以发出此命令可以打开屏幕会话,然后您输入的任何将被发送到端口,加上返回值将被打印在它下面:

screen /dev/ttyS0 19200,cs8 

(更改以上,以适应您对速度,奇偶校验,停止位等的需求)。我认识到屏幕不是“linux命令行”,因为帖子专门要求,但我认为它是在相同的精神。另外,您不必每次都输入回显和引号。

ECHO:

按照腐败的Droid的答案。但是,直到我还使用cat命令(cat < /dev/ttyS0而我发送了echo命令之前,这对我没有用。

PRINTF:

我发现,人们也可以用printf的 '%X' 命令:

c="\x"$(printf '%x' 0x12) 
printf $c >> $SERIAL_COMM_PORT 

再次,printf的,发送命令之前启动cat < /dev/ttyS0

+0

没有为我工作,直到我作为MrUser说:你必须在/ dev/ttyS0上进行监听,然后才能写入它。 – Gouda 2015-07-22 16:02:34