基于RT-Thread与兆易创新GD32F527的工业级网络-CAN透传网关设计与实现 | 技术集结

描述

目录

 

系统概述
 

RT-Thread使用情况
 

硬件框架

 

软件架构


 

软件模块详解

 

功能展示
 

链接地址
 

1 系统概述

本系统是一个基于GD32F527I_EVAL和RT-Thread实时操作系统开发的工业级网络-CAN总线透传网关。该系统实现了TCP/UDP网络协议与CAN总线之间的双向透明数据传输,支持Web配置管理、固件在线升级(暂未验证)、SD卡配置存储等功能,适用于工业自动化、车联网、智能设备等需要网络与CAN总线互联的应用场景。

1.1 核心功能特性
 

双向透明传输: 网络数据与CAN总线数据的无缝双向转发

多协议支持: TCP Server/Client、UDP通信模式

灵活CAN配置: 支持标准帧/扩展帧、可变波特率(5Kbps~1Mbps)

智能ID管理: 固定ID、自增ID、数据提取ID三种模式

Web配置界面: 现代化响应式Web UI,支持实时配置修改

配置持久化: 基于SD卡的配置文件存储系统

固件OTA升级: 支持通过Web界面上传固件并安全升级

系统监控: 实时显示网络状态、CAN状态、传输统计

2 RT-Thread使用情况
 

2.1 操作系统版本与组件
 

系统基于RT-Thread master版本构建,充分利用了其丰富的组件生态:

已启用的核心组件:

内核: 多线程调度、信号量、互斥锁、消息队列

文件系统: DFS + ELM-FAT,用于SD卡配置存储

网络协议栈: LwIP 2.03,支持TCP/UDP、DHCP、DNS。RT-Thread最新版可能会与LWIP2.03中cc.h文件的变量类型定义冲突,修cc.h文件的内容。

设备驱动框架: CAN驱动、SDIO驱动、EMAC以太网驱动

Shell组件: MSH (Module Shell),用于命令行调试

FAL: Flash抽象层(可选),用于固件分区管理

2.2 线程资源使用
 

系统采用多线程并发架构,主要线程包括:

CAN

2.3 IPC应用
 

消息队列: 用于网络与CAN数据的异步传递(net_to_can_queue, can_to_net_queue)

信号量: 用于消息队列的同步通知(net_to_can_sem, can_to_net_sem)

互斥锁: 保护配置文件访问(config_lock)、固件升级状态(upgrade_mutex)

2.4 内存管理
 

采用动态内存分配策略:

消息缓冲区: 动态分配最大2048字节数据缓冲

Web缓冲区: 请求4KB,响应34KB(扩展缓冲区)

网络缓冲区: 各服务独立分配1KB缓冲

3 硬件框架
 

微控制器: GigaDevice GD32F527IST7

内核: ARM Cortex-M33 @ 200MHz

Flash: 7680KB

SRAM: 512KB

外设: 本次使用CAN、10/100M以太网MAC、SDIO等

CANCANCAN

4 软件架构

4.1 系统分层架构
 

  •  

     Application Layer(应用层)

┌─────────┐ ┌─────────┐ ┌─────────┐

│Web Server│ │ Bridge │ │ Network │

│ 管理 │ │ 透传 │ │ 服务 │

└─────────┘ └─────────┘ └─────────┘

  •  

    Service Layer(服务层)                      

┌──────────┐ ┌──────────┐ ┌──────────┐

│Config Save│ │ Firmware │ │ System │

│ 配置管理 │ │ 固件升级 │ │ 系统管理 │

└──────────┘ └──────────┘ └──────────┘

  •  

     RT-Thread Components(组件层)              

┌────┐ ┌─────┐ ┌─────┐ ┌────┐ ┌────┐

│LwIP│ │ DFS │ │ MSH │ │CAN │ │SDIO│

└────┘ └─────┘ └─────┘ └────┘ └────┘

  •  
  •  
  •  
  •  

     RT-Thread Kernel(内核层)                  线程调度 | IPC通信 | 内存管理 | 定时器               Hardware Drivers(驱动层)                  EMAC | CAN | SDIO | USART | GPIO | SPI       

关键设计点:

异步解耦: 接收线程与转发线程通过消息队列解耦

双向流控: 使用信号量控制队列消费速率

动态内存: 消息体动态分配,避免大栈空间占用

CAN重组: CAN帧自动重组为完整网络数据包

5 软件模块详解
 

5.1 Bridge透传引擎 (user_bridge.c/h)

核心功能:

网络与CAN双向数据转发,支持网络协议自定义。

CAN帧分段/重组(8字节限制)

CAN ID智能管理(固定/自增/提取)

统计信息:

网络→CAN: 数据包数、字节数

CAN→网络: 数据包数、字节数

错误计数、丢包计数、内存分配失败计数

5.2 Web配置服务器 (user_web_*.c/h)

架构特点:

单线程服务器: 串行处理请求(简化设计)

页面生成: 服务器端动态生成完整HTML

响应式设计: 现代化CSS,支持桌面/移动端

页面模块:

user_web_network.c: 网络IP配置(DHCP/静态IP)

user_web_can.c: CAN总线参数配置

user_web_bridge.c: 透传桥接配置

user_web_server.c: 主服务器 + 系统页面 + 固件页面

扩展响应缓冲区以容纳完整的多页面HTML(~34KB)。

UI设计亮点:

渐变色侧边栏导航

卡片式内容布局

开关按钮、进度条、徽章等现代组件

悬停动画、状态指示点

表单验证与提示信息

5.3 配置管理
 

存储方案:

介质: MicroSD卡,16GB,由于外部扩展FLash的SPI与网络接口冲突,所以使用SDIO存储配置,后续可扩展存储数据日志和操作日志,方便进一步分析

路径: /gd32_net.cfg (使用虚拟文件系统挂载)

格式: 二进制结构体 + CRC32校验

健壮性措施:

写入临时文件→重命名→删除旧备份

读取失败自动创建默认配置

CRC32完整性校验

设备健康检查(几何信息、扇区读取测试)

5.4 固件升级 (user_firmware.c/h)待验证

5.5 网络应用服务 (user_net_app.c)

可单独测试四种网络模式:

CAN

控制命令:

tcp_server start/stop

udp_server start/stop

tcp_client start/stop

udp_client start/stop

net_status: 查看所有服务状态

5.6 系统管理 (user_system.c/h)

提供功能:

系统信息查询(内存、运行时间、版本)

设备重启(reboot [delay])

恢复出厂设置(factory_reset)

配置导出为JSON格式

6 功能展示
 

1.1 实现功能
 

1.设备网络配置界面

CAN

2.CAN配置界面

CAN

注意:透传需要启动CAN(当前参数默认启动)

3.透传桥接界面

CAN

4.设备信息界面

CAN

可以查看当前固件版本,并在配置后利用按钮进行软件重启设备,以实现配置生效。

5.固件升级

CAN

固件升级界面暂未验证,可进一步拓展。

6.2 数据传输功能展示

1.设备内部默认为TCP_server,当前IP地址为192.168.1.50,CAN一侧波特率设置为1Mbps,标准帧。

CAN

实现了双向数据发送。

6.3 接口连接

连接了网口和CAN口,SD卡也插入接口中。

CAN

7 链接地址
 

代码地址:https://gitee.com/wujunc/gd32-f527_rtthread

 

 

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

全部0条评论

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

×
20
完善资料,
赚取积分