CH9114应用:基于IocHub跨网段透传的远程串口方案

前言

该远程方案已上传至GitHub:
项目地址:
https://github.com/ZhiyuanYuanNJ/SerialToIocHub
演示视频:

CH9114应用:基于IocHub跨网段透传的远程串口方案演示

远程串口

串口通信由于结构简单在物联网等场景下被广泛运用,但与网络传输相比通讯距离较短,而远程串口通 过网络可对串口数据进行距离拓展。
传统远程串口通过TCP通讯实现远程透传,多适用于局域网。这时需要一款跨网段透传的程序来帮助我们 实现真正意义上的远程串口。

IocHub简介

IocHub(Internet of Chip Hub)为开发者提供了多平台的MCU接口联网透传开发库,该方案来自于南京沁 恒微电子公司(WCH),开发库包含Windows、Linux、MCU等多平台的的接口,实现了多平台跨网段的 透传。重点:经向厂商咨询,该方案不涉及中间服务器,意味着透传数据安全得到保障!
IocHub库地址:https://www.wch.cn/downloads/WCHIoCHubLib_MultiOS_ZIP.html

CH9114介绍

由于IocHub在局域网中速率可接近配置上限,因此非常适合搭配一款波特率较高的串口使用来尽量减少 带宽浪费。 本次使用的USB转四路串口芯片CH9114,厂商驱动下该U串连续通信最高波特率为15Mbps,支持CDC 免驱、24路GPIO输入输出等功能。
使用串口助手传输文件测试: 设置波特率为15Mbps,8数据位,1停止位,无校验位,无流控。

文件大小104996709B137487454B
耗时71S93S
实际波特率14.788Mbps14.783Mbps

经过测试可以看出,设置波特率与实际波特率近乎相同,且经过对比,未发现文件错误。

在这里插入图片描述
实际测试15Mbps波特率下,一位数据耗时84ns,很接近理论值。
芯片详情:

CH9114-高速USB转四串口,最高连续波特率达15Mbps
高速USB转4串口芯片 CH9114

方案介绍

本文远程串口方案名为SerialToIocHub,顾名思义就是将串口数据与IocHub进行透传,实际应用场景有:
1、远程采集数据,如温湿度传感器数据通过SerialToIocHub传输至远程上位机,或借助CH9114的高波特率特点进行较大文件传输。
2、对远程电机等设备进行控制;
3、对远程设备进行控制,如远程调试交换机。
在这里插入图片描述
其中的IocHub上位机可使用IocHub库中的Demo程序,也可使用功能更加强大的TcpIpDebug网络调试工具:
TcpIpDebug:https://www.wch.cn/downloads/TcpIpDebug_exe.html
该上位机支持除了支持IocHub,还支持创建TCP服务器,自定义发送IP包等,是一款在网络开发中的调试利器。

实现逻辑

代码逻辑为设置串口参数,并利用两个环形缓冲区做FIFO,作为IocHub与串口之间的桥梁。
1、IocHub初始化

// 初始化IocHub库
IoCHub_Init();
// 注册IocHub事件的回调函数
IoCHub_RegisterEvent(IochubEvent);
// 启动IoCHub_Start
IoCHub_Start(ServerAddr, DEFAULT_IOCHUB_START_TIMEOUT, true);
// 设置iochub访问模式,是否需要验证密码
IoCHub_SetAccessMode(&mode);
// 打开会话
Session_Open(iochubInfo.opId, iochubInfo.opPassword, \
 DEFAULT_IOCHUB_START_TIMEOUT, true);

2、串口初始化
Windows平台下的串口编程有一整套的接口函数,这里不再赘述。

// 串口初始化,输入要设置的波特率、数据位、停止位等参数
g_serial.init_port(index, serialInfo.Baud, serialInfo.checkBit,\
 serialInfo.dataBit, serialInfo.stopBit,                       \
 (unsigned int)serialInfo.flowCtrl);
// 开启数据接受监听
g_serial.start_monitoring();

3、使用两个线程去分别处理IocHub的读写

iocwt = std::thread(IocWriteRun);
iocrt = std::thread(IocReadRun);

使用方法及效果

首先使用-h参考下使用方法:

SerialToIoCHub.exe -h
  Usage:
 -h, --help                          display this message
 -c, --comname <COM num>             specify serial name, like:COM32
 -b, --baud <baud rate>              specify serial baud rate, default: 115200
 -d, --databit <date bit>            specify serial databit(5, 6, 7, 8), default: 8
 -s, --stopbit <stop bit>            specify serial stopbit(1, 1.5, 2), default: 1
 -v, --checkbit <check bit>          specify serial checkbit(N(None), O(Odd), E(Even), M(Mask), S(Space)), default: N
 -f, --flowctl <flow ctrl>           specify flow ctrl way(0(None), 1(RTS/CTS), 2(DTR/DSR), 3(XON/XOFF), default: 0)
 -i, --peerid <Peer ID>              specify the ID number of the iochub peer
 -ip, --ipaddress <local ip address> specify local NIC ip address
 -p, --peerpw <xxxxxxxx>             specify the password of the iochub peer
 -l, --list                          show all current serial ports and friendly names

例如要将CH9114(假设为COM4)实现远程串口,波特率设置为15000000,对端的IocHub的ID为7671A67F59F97732,那么命令为:

Example: SerialToIoCHub.exe -b 15000000 -i 7671A67F59F97732 -c COM4
指定对端id:SerialToIoCHub.exe -b 115200 -i 7671A67F59F99332 -c COM4
局域网自动搜索iochub设备并连接: SerialToIoCHub.exe -ip 192.168.50.2 -c COM15 -b 15000000

实测在百兆局域网环境下,SerialToIocHub搭配CH9114传输文件速率如下:

文件大小104996709B137487454B
耗时75S96S
实际波特率14.788Mbps14.783Mbps

注:若在Windows系统下需实现远程串口,也可直接使用串口调试软件COMTransmit,支持多串口调试通讯、串口数据波形显示、十六进制数据输入、自定义帧格式等。
软件截图:
详见:xxxxxxxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值