本文最后更新于:June 30, 2023 pm
本文作者:[wangwenhai] # 概要:虚拟串口基本使用。
虚拟串口使用
前言
调试串口的时候一般用真实设备模拟,但是没有真实设备的时候也可以用模拟器来实现串口调试。本次使用 SOCAT来实现效果。UNIX自带了一个工具,可以直接使用,文档在这里:http://www.dest-unreach.org/socat/ 。
模拟串口
直接在shell中输入如下命令,表示启动两个虚拟串口,为什么是一对?可能大家有疑惑,想一下两个设备通过串口连起来,是不是要求两边都支持串口?
socat -ddd -v -v -v pty,raw,echo=1 pty,raw,echo=0
上述命令生成两个串口,你可以实现一个模拟两台串口设备收发数据。
输出类似下面的日志代表启动成功:
2021/03/08 18:44:56 socat[39731] I socat by Gerhard Rieger and contributors - see www.dest-unreach.org
2021/03/08 18:44:56 socat[39731] I This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
2021/03/08 18:44:56 socat[39731] I This product includes software written by Tim Hudson (tjh@cryptsoft.com)
2021/03/08 18:44:56 socat[39731] I setting option "raw"
2021/03/08 18:44:56 socat[39731] I setting option "echo" to 1
2021/03/08 18:44:56 socat[39731] I openpty({5}, {6}, {"/dev/ttys010"},,) -> 0
2021/03/08 18:44:56 socat[39731] N PTY is /dev/ttys010
2021/03/08 18:44:56 socat[39731] I setting option "raw"
2021/03/08 18:44:56 socat[39731] I setting option "echo" to 0
2021/03/08 18:44:56 socat[39731] I openpty({7}, {8}, {"/dev/ttys013"},,) -> 0
2021/03/08 18:44:56 socat[39731] N PTY is /dev/ttys013
2021/03/08 18:44:56 socat[39731] I resolved and opened all sock addresses
2021/03/08 18:44:56 socat[39731] N starting data transfer loop with FDs [5,5] and [7,7]
然后使用cat命令,监控你要接收的那个虚拟串口,上述案例我选择:"/dev/ttys013"
作为监控端,
cat /dev/ttys013
然后使用串口工具可连接你准备发送的一端,上面使用 cat /dev/ttys010
,本案例使用Erlang来模拟串口发送端:
%% 连接
{ok, FD} = serctl:open("/dev/ttys010").
%% 发送
serctl:write(FD, <<"ok">>).
观察cat挂起的终端:
-> % cat /dev/ttys013
ok
同时 socat 也会有日志:
> 2021/03/08 18:46:49.213306 length=2 from=2 to=3
ok2021/03/08 18:46:49 socat[39731] I transferred 2 bytes from 5 to 7
最前面的 ok
就是发送端发送的数据。
总结
socat 工具是一款很强大的工具,我们可以很容易实现数据转发功能,而串口模拟仅仅是其中一个功能,更多功能需要深入挖掘。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!