APP下载

一种基于STM32的CAN_Ethernet网关设计

2016-06-07李玉泽刘鹏

关键词:收发器网卡线程

李玉泽,刘鹏

(1.长春理工大学 电子信息工程学院,长春 130022;2.长春理工大学 空间光电技术研究所,长春 130022)



一种基于STM32的CAN_Ethernet网关设计

李玉泽1,刘鹏2

(1.长春理工大学电子信息工程学院,长春130022;2.长春理工大学空间光电技术研究所,长春130022)

摘要:随着工业自动化程度的提高,对实现工业现场设备的实时监控,完成工业现场信息与远程网络信息管理、共享的需求更加迫切。针对工业现场信息与以太网互联互通的问题,在研究TCP/IP协议基本原理基础上,将CAN总线数据转换为以太网数据传输,实现一种以STM32作为控制核心的CAN_Ethernet网关。该网关采用10/100M以太网控制器DM9000A作为物理层接口设备,利用RT-Thread实时操作系统的LwIP协议栈(Light weight Internet Protocol)将CAN数据转换为适合以太网传输数据帧,并传送至TCP服务器,可以实现对工业现场远程监测、管理。经实验验证,该网关工作正常,能够为工业设备接入互联网提供参考。

关键词:CAN总线;以太网;STM32F103ZET6;网关;RT-Thread

工业4.0的时代已经来临,智能化生产系统及过程是大势所趋,这就要求对工业生产过程进行实时监控,信息能够远程分析反馈。CAN总线具有较好的通讯实时性、可靠性、网络安全性并且结构简单[1-3],被广泛应用在工业生产中,但其传输距离有限,不能满足智能化生产的要求。现有工业设备有接入互联网的需求,然而更换新设备代价较高,因此本文设计一种可以方便工业设备扩展的CAN_Ethernet网关,来实现设备联网交互功能。

1 系统总体设计

网关由系统控制核心、CAN收发器单元、以太网控制器DM9000A单元,PC终端单元组成,如图1所示。系统以CAN子节点数据为数据源,遵循CAN总线协议经由CAN控制器控制的CAN收发器进入STM32芯片进行数据缓冲。STM32利用RT-Thread的可选组件LwIP协议栈将接收到的缓冲数据解析,并将其转换为DM9000A网卡格式数据包,然后驱动内部FSMC外设以并行数据传输方式与以太网控制器DM9000A通信。DM9000A数据流经过RJ45端口进入以太网链路,通过以太网网线传送数据至PC服务器。

图1 系统总体框图

2 硬件设计

2.1系统控制核心

系统控制核心采用ST公司的STM32F103 ZET6。它是基于Cortex™-M3内核的32位单片机,最高72MHz工作频率,能够实现存储器0等待周期访问,带有4个片选的静态存储器控制器即FSMC(Flexible Static Memory Controller),CAN控制器、SDIO控制器、USB设备控制器、11个定时器、3个ADC、13个通信接口(USART、II2C、SPI)以及大量可用I/O[2]。其丰富的外设及I/O接口为以后设备功能进一步升级扩展预留了空间。

2.2CAN收发器单元

本文选用飞利浦公司的TJA1050T型CAN收发器,实现CAN控制器与CAN总线数据交互功能。该收发器最高支持1Mbps总线速率,能够接入不少于110个CAN数据节点,最重要的是掉电节点不会对CAN总线造成影响。CAN子节点的数据经收发器变换电平送入CAN控制器,之后交由STM32对数据进行后期处理,接口电路如图2所示。

图2 CAN收发器单元

2.3以太网控制器DM9000A单元

STM32F103内部没有集成以太网控制器,因此必须外接网卡才能实现TCP/IP功能。本系统采用DAVICOM公司的DM9000A以太网控制器,它是一款高度集成的低功耗芯片,自身带有10/100M PHY和4K大小SRAM,允许微处理器以8位或16位模式访问内部存储器[4]。由于工业设备对实时性有一定要求,故DM9000A采用16位模式加快数据传输速率。STM32F103自身集成FSMC驱动器,可以方便的驱动各种SRAM、NorFlash、Nandflash等存储外设。FSMC以并行方式访问外部存储设备,配置正确的FSMC能够实现对存储外设访问过程的时序自动化,满足驱动16位模式DM9000A的同时,简化了程序设计复杂度,提高了数据传输速率。

RJ45为内部集成网络变压器网线接口,一端与DM9000A直连,另一端为网线接口。由于隔离网线连接的不同设备间电平不尽相同,考虑到保护DM9000A网卡不受隔离网线影响,内部集成网络变压器进行网络隔离,防止不同电压通过网线传输损坏设备。以太网控制器DM9000A和RJ45接口如图3所示。

3 系统软件设计与实现

本系统软件设计主要包括线程调度模型设计、RT-Thread实时操作系统移植、应用程序编写。本网关使用轻量级LwIP协议栈组件完成网络数据转换功能[6]。T-Thread负责网关各单元协同工作,包括前端CAN总线数据交互、多线程任务调度、LwIP协议栈线程数据解析、PC服务器端应用交互。以RT-Thread为核心,将程序模块化处理,有利后期修改调试。

图3 DM9000A以太网控制器和RJ45接口

3.1线程调度模型

系统以RT-Thread为核心,将CAN总线数据交互、LwIP协议栈、应用层程序模块化,每个单元分别建立独立线程,线程之间采取信号量、邮箱方式通信,简化程序复杂度,线程调度模型如图4所示。RT-Thread主要工作线程包括APP应用线程、CAN数据线程、LwIP协议栈线程、空闲线程。

系统初始化后,CAN数据线程挂起无限等待获取CAN_RX、CAN_TX信号量,CAN收发器接收到CAN总线数据释放CAN_RX信号量,发送系统缓冲数据则释放CAN_TX信号量,CAN数据线程获取信号量后唤醒进入就绪状态。LwIP线程挂起等待DM9000A_RX、DM9000A_TX信号量,当DM9000A网卡发送、接收数据时释放DM9000A_TX、DM9000A_RX信号量。LwIP线程获取信号量后唤醒进入就绪态,等待下一次内核线程调度,若LwIP线程为当前优先级最高线程,则获得MCU的使用权执行LwIP线程。若CAN线程、LwIP线程都处于挂起状态,则APP线程获取MCU使用权,执行APP线程。为了提高数据接收发送实时性,需设置CAN线程、LwIP线程优先级高于APP线程,即APP线程能够被CAN线程、LwIP线程抢占。CAN线程、LwIP线程、APP线程均处于挂起状态时,内核执行空闲线程,当其他任意一个线程唤醒时,该唤醒线程则抢占空闲线程执行。APP线程为用户应用程序线程,提供与CAN数据线程、LwIP协议栈线程间通信的API函数,用户可根据自身需求使用对应API函数。本文建立的网关系统为TCP客户端,使用部分套接字API函数如下:

int socket(int domain,int type,int protocol)

int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen)

int send(int sockfd,const void *msg,size_t len,int flags)

int recv(int socket,void *buf,size_t len,int flags)

图4 线程调度模型图

3.2RT-Thread与LwIP组件移植

RT-Thread是由中国开源社区开发的遵循GPLv2+许可证的一款实时操作系统,内核稳定高效,支持线程优先级抢占与时间片轮转混合模式,包括LwIP、RTGUI、Finsh、文件系统等众多组件[5]。RT-Thread使用scons构建工具组织工程文件,支持组件裁剪和可选择板级驱动包,修改板级驱动包中的rtconfig.h配置文件,即可实现不同组件、驱动包的选择。本文采用这种方式构建工程,修改STM32f10x板级驱动包中的rtconfig.h配置文件,添加宏定义:

#define RT_USING_LWIP

#define RT_USING_LWIP141

#define RT_USING_CONSOLE

使用安装好的scons工具,命令行下进入STM32f10x板级驱动包目录,输入命令即可构建工程。

Scons --target=mdk4 -s

构建完成工程中包含针对STM32F103ZET6移植完毕的RT-Thread内核、LwIP协议栈、串口调试终端。

板级驱动移植需添加DM9000a.h、DM9000a.c文件。主要工作对STM32的FSMC外设驱动初始化进行配置,完成网卡结构体回调函数功能,向系统注册当前网卡设备。回调函数包括网卡初始化、打开、关闭、读取数据、发送数据、控制传输、接收线程入口函数、发送线程入口函数,部分代码如下所示:

3.3应用程序编写

系统上电复位后,进行板级初始化、操作系统初始化,系统操作控制权交予RT-Thread内核。内核无限等待接收命令,若接收到命令,则判断命令类型。命令分为三种,分别为发送请求、接收请求、和其他用户指令。

发送请求命令,判定为发送请求后,唤醒CAN线程等待接收CAN总线数据,正确接收数据后将其存入缓冲区,向LwIP线程发送数据邮箱。LwIP协议栈负责解析缓冲数据、转换以太网帧格式,通过DM9000A以太网控制器发送至PC端TCP服务器。

接收请求命令,判定为接收请求后,唤醒LwIP线程等待接收以太网数据。LwIP线程接收数据邮箱后,经LwIP协议栈解析数据,存入数据缓冲区。CAN线程将已缓冲数据转换为CAN总线数据,通过CAN收发器发送至CAN节点。

图5 程序流程图

其他用户命令,若判断非发送请求、接收请求命令,则继续判断是否为其他用户命令。其他用户命令包括系统调试、串口通信等用户附加扩展功能。若非其他用户命令,则认为系统命令错误,进入错误处理程序,程序流程图如图5所示。

4 系统整体测试

本文在PC端建立了一个简单的TCP服务器来验证网关工作性能。测试系统使用3个CAN子节点组成小型CAN局域网络,每个CAN子节点分别连接一个STM32控制器,并使用其片上12位ADC采集固定电压值作为被测数据源。电压基准为3.3V,预设节点电压值分别为CAN1节点3.0V,CAN2节点2.0V,CAN3节点1.0V。

网关工作于TCP客户端模式,PC机作为TCP服务器接收CAN子节点传输电压值[7]。设置TCP服务器端口号为80,IP地址为192.168.0.3,网关192.168.0.1,并开启监听模式。LwIP协议栈初试化配置中,将TCP客户端IP地址设置为192.168.0.2,子网掩码255.255.255.0,网关192.168.0.1。网关初始化完成后,TCP客户端向TCP服务器端发送连接请求,TCP服务器端与客户端经过三次握手,建立稳定的TCP连接。

图6 TCP服务器接收数据图

表1 服务器接收统计表

5 结语

本文应对工业设备远程实时监控需求,实现了一种基于STM32的CAN_Ethernet网关。经测试该网关系统可以稳定运行,能够解决工业总线传输距离不足的问题。

参考文献

[1]韩成浩,高晓红.CAN总线技术及其应用[J].制造业自动化,2010,32(2):146-149.

[2]孙书鹰,陈志佳,寇超.新一代嵌入式微处理器STM32F103开发与应用[J].微计算机应用,2010,31 (12):59-63.

[3]张荣,安志勇,孙敏,等.基于CAN总线的足球机器人通讯系统设计[J].长春理工大学学报:自然科学版,2011,34(2):87-89.

[4]于春雪.基于STM32F107的高速以太网接口设计与应用[J].电声技术,2011,35(9):63-67.

[5]RT-Thread开发组.RT-Thread编程指南[EB/OL]. (2010-03-18).[2015-03-31].http://www.rt-thread. org/.

[6]赵研,谷弘毅.基于ARM的以太网通信控制器[J].长春理工大学学报:自然科学版,2010,33(2):147-150.

[7]杨林楠,李红刚,张素萍,等.基于ARM9的嵌入式Web服务器研究[J].计算机测量与控制,2008,16(12):1939-1942.

The Design of CAN_Ethernet Converter Based on STM32

LI Yuze1,LIU Peng2
(1.School of Electronics and Information Engineering,Changchun University of Science and Technology,Changchun 130022;2.Institute of Space Optoelectronics Technology,Changchun University of Science and Technology,Changchun 130022)

Abstract:With the improvement of industrial automation,the real-time monitoring of industrial field equipment is realized,and the demand of information and remote network information management and sharing is more urgent. For the problem of industrial field information exchange with Internet,in the study of TCP/IP protocol based on the basic principle,CAN data can be converted for the Ethernet data,and CAN bus and Ethernet interface gateway are implemented with STM32 as the core of the control circuit. The gateway uses 10/100M Ethernet controller DM9000A as a physical layer interface device,realizes remote monitoring and management of industrial field with RT-Thread and LwIP(Light weight Internet Protocol)protocol stack to complete the CAN data conversion,transmission to the TCP server. Through the experiment,the gateway is normal and can provide a reference for the industrial equipment access to the internet.

Key words:CAN;ethernet;STM32F103ZET6;gateway;RT-Thread

中图分类号:TN98

文献标识码:A

文章编号:1672-9870(2016)02-0120-05

收稿日期:2015-09-09

作者简介:李玉泽(1990-),男,硕士研究生,E-mail:147193813@qq.com

通讯作者:刘鹏(1982-),男,讲师,E-mail:louis585760@126.com

猜你喜欢

收发器网卡线程
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
光纤收发器故障排除经验谈
Server 2016网卡组合模式
Virtex5 FPGA GTP_DUAL硬核两个收发器独立使用的实现
浅谈linux多线程协作
挑战Killer网卡Realtek网游专用Dragon网卡
RHEL7 Network Teaming(网卡绑定)配置与测试
基于RocketIO 高速串行回环通信的实现
光纤收发器常见故障原因