微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于LPC2294的CAN与以太网网关互联的设计

基于LPC2294的CAN与以太网网关互联的设计

时间:10-29 来源:互联网 点击:

最终,对DM9000E芯片进行驱动。该芯片的驱动主要由3部分完成:void InitNic()用以对芯片进行初始化,配置片内寄存器等;void Send_P-acket(struct_pkst*TxdData)为数据发送程序,uint8 Rec_Packet(uint8 num)为数据接收程序,上层协议通过调用这两个函数来发送以太网数据帧。

2 软件设计
2.1 报文结构
CAN总线与以太网互联的软件设计主要包括从以太网中提取CAN数据和将CAN总线的数据转换成以太网的数据。其中,CAN报文结构可分为两种不同的帧格式,而两种帧格式的区别在于其标识符的长度不同:标准帧中有11位标识符,扩展帧中有29位标识符。本设计中采用的是扩展帧,且在本网关模块收到CAN板卡的报文时,需按上述以太网数据传输报文格式对CAN数据进行封装及打包并通过以太网发送。在此过程中不必对CAN报文的13 Byte数据进行高低位转换和移位处理,采用透明转换方式。便可减少数据解析及处理的时间,并提高了数据在传输过程中的可靠性。

如图3所示,该网关中规定的以太网帧格式包括5部分,按照封装的先后顺序分别为:封装的数据(如本系统中的CAN数据帧等)、自定义UDP首部、标准UDP/TCP首部、IP首部、以太网首部和最终校验。本系统中主要采用的是UDP协议,目的是为了自定义控制字来区别不同类型的报文,包括有:CAN数据报文、时统报文、工作状态请求报文、心跳报文及设备故障诊断信息报文。其中时统报文是在开机时或每30分钟系统发送的对时请求。工作状态报文是在各设备开机或复位并正常工作后自动发送的,还有收到询问报文或状态改变后发送,主要发送时戳和设备ID信息。心跳报文是在各设备开机或复位并正常工作后,每5 s周期发送,作用是通知其所在的网络,是否工作状态正常。设备故障诊断信息报文是当接收到故障诊断请求报文或网关根据CAN板卡数据接收情况,自行检测到网关箱内该板卡故障情况的变化,一般网关在30分钟内未收到参数设置报文中指定的CAN板卡对应节点的数据和远程帧等,可认定此节点故障,并发送故障信息报文。这增添了系统的一些管理信息,根据不同的报文类型完成系统不同的通信功能。自定义UDP封装格式如图4所示。

在自定义UDP封装格式中,字节0~3为固定的帧头信息,用以识别本网关模块的数据报信息,无论是CAN报文、时统报文或工作状态请求报文均使用该格式,若不符合该帧头的数据报网关模块不进行处理。需注意的是,第20 bit开始才是真正的数据,每个信息单元均有各自的序号、标识和长度等信息。其中信元的序号表示该信元在UDP数据报中的位置;标识代表信息单元内报文的类型。
2.2 程序设计
网关模块的主要功能是以太网数据包与CAN数据帧之间的格式相互转换,进而完成以太网和CAN网络间通讯。本模块使用嵌入式μC/OS—II作为操作系统,通过裁剪、移植使其能顺利运行于LPC2294控制器。另外,在系统中移植了TCP/IP协议的核心功能函数,并编写了6个任务函数,使其分工合作实现了模块的各项功能,并通过μC/OS—II系统的任务调度管理机制来进行系统资源的分配。
系统首先建立设备初始化任务Task0,将该任务函数主要完成上电自检,两路CAN故障自检,网口断线检测,本机IP、两路CAN波特率及两路网口等网关参数的初始化。在完成以上工作后,创建5个子任务,按优先级由高到低依次为TaskB、TaskC、TaskF、TaskD、TaskE的5个子任务的具体功能如下:
TaskB:主要功能为接收UDP报文并解析,下发至CAN;若接收到时统报文,按照协议解析,并将时戳信息写入时钟芯片。
TaskC:主要功能为接收TCP报文,按照协议解析并下发到CAN。
TaskD:完成接收CAN1口或CAN2口的数据,根据规定的传输方式将数据封装成报文格式,并发送至以太网。
TaskE:完成接收CAN1口或CAN2口的数据,并按照TCP传输方式,将数据封装并发送到以太网。
TaskF:主要功能为定时发送特殊报文,如:心跳报文、时统报文、工作状态请求报文及设备故障诊断信息报文等,完成网关模块的工作状态检测及参数配置等功能。
5个子任务创建完成后,TaskB和TaskC进入阻塞状态,等待各自的信号量RecUdpQFlag和RecTcpQ一Flag,由于这两个任务的优先级较高,说明网关模块优先转换以太网向CAN总线方向的数据。因此,当以太网中有数据到来时根据报文的类型可得到相应的信号量,TaskB或TaskC立即进入就绪状态等待执行,若当前执行的任务优先级低于这两个任务,TaskB和TaskC可进行抢占执行。当网关模块未收到以太网数据或处理完成后,任务函数TaskF检测模块的定时器,判断是否需要发送工作状态报文和心跳报文等特殊报文。执行完成后,判断CAN节点是否有数据,并选择用UDP或TCP方式发送到以太网,即选择执行TaskD或TaskE,完成CAN向以太网方向的数据传输过程,在此期间允许TaskB和TaskC进行抢占执行。系统通过调度这5个任务函数完成以太网数据包与CAN数据帧间的格式转换与传输,该程序流程如图5所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top