基于赤菟V307 MCU的八串口服务器设计

描述

简介

串口服务器,提供串口转网络的功能,将串口转换成TCP/IP协议网络接口,实现串口和网络接口的数据双向透明传输,扩展串口设备的通讯距离。

赤菟V307是搭载沁恒自研RISC-V内核青稞V4F的高性能互联型MCU,主频支持144MHz,支持硬件浮点运算(FPU),提供八个UART接口、USB2.0高速接口(480Mbps)并内置了PHY收发器、千兆以太网MAC并集成10M PHY、2个CAN接口等丰富的外设资源。

串口服务器

基于八个UART接口、10M以太网的强大外设,通过单片赤菟V307即可实现八串口服务器,每个串口独立工作。

串口服务器

源码仓库地址:https://github.com/openwch/ch32v307/tree/main/Application/8_uarts_server

网口端设计

网口端采用的是开源的轻量级TCP/IP协议栈LwIP,可以轻松实现赤菟V307网口端的TCP、UDP通信。

例程中默认开启的是TCP Client模式,采用单向循环链表的方式接收TCP Server发过来的数据。

串口服务器

当串口端接收到数据时,直接启动TCP Client的发送函数,并更新队列的读指针。

串口端设计

串口端为了加快数据的收发,采用DMA循环队列的方式接收数据,通过查询接收DMA 传输数据数目寄存器CNTR,与上一次该值进行比较,有变化则说明串口接收到数据,此时便更新队列写指针,并计算队列中数据长度。

串口服务器

根据网口接收端的链表中的数据地址及长度,启动串口端的发送DMA进行数据发送。

多任务设计

通过RT-Thread操作系统,创建两个线程,分别为用于网口端接收数据的“eth_rev”线程和用于串口端接收数据的“uart_rev”线程。

采用时间片轮转方式进行这两个线程的调度,当“eth_rev”线程收到网口端的数据时,启动串口端的发送DMA将数据通过串口发送出去;当“uart_rev”线程收到串口端的数据时,启动网口端的发送函数将数据通过网口发送出去,这样就实现了串口和网络接口的数据双向透明传输。

串口服务器

验证

串口默认波特率为115200,实测八个串口独立工作,可以实现收发10+KB/s的速度。

串口服务器

该例程目前仅实现了TCP Client的收发,还有TCP Server、UDP Server/Client等需要完善,希望各位开发者能够积极提交pr,一起完善该项目。可添加微信15950380583为好友,注明:赤菟V307,邀请您进入沁恒RISC-V MCU开发者微信交流群,一起玩转RISC-V MCU。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分