从Windows我可以使用以下命令与串口设备通信:
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
什么都没发生。
有人可以指引我走向正确的方向吗?
答案 0 :(得分:33)
如果要使用十六进制代码,则应添加-e
选项以启用echo对反斜杠转义的解释(但结果与echo
Ctrl 相同 - [R 控制 乙)。正如wallyk所说,你可能想添加-n
来阻止换行的输出:
echo -en '\x12\x02' > /dev/ttyS0
还要确保/dev/ttyS0
是您想要的端口。
答案 1 :(得分:17)
echo '\x12\x02'
将不会被解释,并且会将字符串\x12\x02
(并附加换行符)字面写入指定的串行端口。而是使用
echo -n ^R^B
你可以在命令行上输入 Ctrl V Ctrl R 和 Ctrl V 控制 乙。或者使用编辑器输入脚本文件更容易。
stty
命令应该有效,除非另一个程序在干扰。常见的罪魁祸首是gpsd
,它会查找插入的GPS设备。
答案 2 :(得分:6)
<强>屏幕:强>
注意:据我所知,屏幕实际上无法发送十六进制。为此,请使用echo
或printf
我正在使用这篇文章中的建议写入串口,然后使用另一个post的信息从端口读取,结果不一致。我发现使用屏幕是一种“更简单”的解决方案,因为它直接打开了与该端口的终端会话。 (我更容易引用引号,因为屏幕有一个非常奇怪的界面,IMO,并需要进一步阅读才能弄明白。)
您可以发出此命令以打开屏幕会话,然后您输入的任何内容都将被发送到该端口,并且返回值将打印在其下方:
screen /dev/ttyS0 19200,cs8
(更改以上内容以适应您对速度,奇偶校验,停止位等的需求。)我认识到屏幕不是“linux命令行”,因为帖子特别要求,但我认为它具有相同的精神。另外,您不必每次都输入echo和引号。
<强> ECHO:强>
关注praetorian droid的回答。但是,在我发送echo命令的 之前,我也使用cat命令(cat < /dev/ttyS0
),这对我不起作用。
<强> PRINTF:强>
我发现也可以使用printf的'%x'命令:
c="\x"$(printf '%x' 0x12)
printf $c >> $SERIAL_COMM_PORT
同样,对于printf,在发送命令之前启动cat < /dev/ttyS0
。