eri*_*n c 43 linux virtualbox serial-port
从Windows我可以使用以下命令与串口设备通信:
mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z
Run Code Online (Sandbox Code Playgroud)
设备启动请求的操作.
当我尝试从一个独立的debian盒子或同一个windows机器的debian virtualbox实例完成相同的操作时,到目前为止我没有运气.
这是等效的linux命令(至少我是这么认为的)
stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo '\x12\x02' > /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)
什么都没发生.
有人可以指引我走向正确的方向吗?
pra*_*oid 33
如果要使用十六进制代码,则应添加-e
选项以通过echo启用反斜杠转义的解释(但结果与其相同echo
CtrlRCtrlB).正如wallyk所说,你可能想要添加-n
以防止换行的输出:
echo -en '\x12\x02' > /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)
还要确保这/dev/ttyS0
是您想要的端口.
wal*_*lyk 17
echo '\x12\x02'
Run Code Online (Sandbox Code Playgroud)
将不会被解释,并将字符串写入\x12\x02
(并附加换行符)到指定的串行端口.而是使用
echo -n ^R^B
Run Code Online (Sandbox Code Playgroud)
您可以通过键入CtrlVCtrlR和在命令行上构建CtrlVCtrlB.或者使用编辑器输入脚本文件更容易.
该stty
命令应该有效,除非另一个程序在干扰.常见的罪魁祸首是gpsd
寻找插入的GPS设备.
屏幕:
注意:据我所知,屏幕实际上无法发送十六进制.为此,请使用echo
或printf
我正在使用这篇文章中的建议写入串口,然后使用另一篇帖子中的信息从端口读取,结果不一致.我发现使用屏幕是一种"更简单"的解决方案,因为它直接打开了与该端口的终端会话.(我把引号更容易,因为屏幕有一个非常奇怪的界面,IMO,并需要进一步阅读来解决它.)
您可以发出此命令以打开屏幕会话,然后您输入的任何内容都将被发送到端口,并且返回值将打印在其下方:
screen /dev/ttyS0 19200,cs8
Run Code Online (Sandbox Code Playgroud)
(更改以上内容以适应您对速度,奇偶校验,停止位等的需求.)我认识到屏幕不是"linux命令行",因为帖子特别要求,但我认为它是以同样的精神.另外,您不必每次都输入echo和引号.
回声:
按照praetorian droid的回答.但是,在我发送echo命令的同时,我也使用了cat命令(cat < /dev/ttyS0
),这对我不起作用.
PRINTF:
我发现也可以使用printf的'%x'命令:
c="\x"$(printf '%x' 0x12)
printf $c >> $SERIAL_COMM_PORT
Run Code Online (Sandbox Code Playgroud)
同样,对于printf,cat < /dev/ttyS0
在发送命令之前启动.
归档时间: |
|
查看次数: |
122905 次 |
最近记录: |