为满足以太网与CAN总线网络的互联,设计了一种以LPC2294为控制芯片,嵌入式μC/OS—II为操作系统的网关模块,实现了以太网协议与CAN总线协议的相互转换。给出了网关模块的软硬件设计,重点阐述了网关模块使用的自定义UDP报文结构,该报文结构可提供更多的管理信息,有利于网络的管理测试表明设计的网关模块具有一定的实用性和可靠性。
关键词 CAN;以太网;协议转换;嵌入式
控制器局域网(Controller Area Network,CAN)最先由德国BOSCH公司开发,并成为一种国际标准(IS011898)。由于CAN总线具有灵活、可靠、实时、开放性好、纠错能力强等优点,成为目前最有前途的现场总线之一。但任何事物都具有两面性,CAN总线也有不足之处,由于其收发器驱动能力有限,导致总线上可连接的最大节点数和最远直接传输距离受到了限制,无法进行远程控制,这给系统组网带来了一定的制约条件。相较而言,以太网凭借着成本低、易于组网、拥有众多应用软硬件的支持且根据网络需求的实际情况,不断地进行完善和改进,并逐步发展了标准以太网(10 Mbit/s)、快速以太网(100 Mbit/s)千兆以太网和万兆以太网等,成为目前应用最为广泛的局域网络技术。若将以太网与CAN总线互联,可降低成本,增加系统的最大CAN节点数,扩大系统的组网范围,还可实现不同传输速度的现场总线子网的相互通信,及其设备层到管理层的一体化。所以,文中提出一种以太网与CAN总线互联的通信网关设计方案。
1 硬件设计
图1所示为本网关模块设计与实现的整体方案框图,网关模块使用LPC2294作为主控制器,μC/OS—II操作系统为平台,扩展了两个网卡接口和CAN接口,并通过软件设计完成CAN总线协议与以太网协议相互转换,最终实现CAN网络与以太网之间的双冗余通信。
硬件电路可划分为5个部分:控制电路、存储电路、辅助电路、以太网接口电路和CAN总线接口电路。下面主要对控制电路、以太网接口电路和CAN总线接口电路进行分析。
1.1 系统控制器
系统选用ARM处理器LPC2294作为控制芯片,主要是LPC2294具有超强的功能、功耗低及丰富的片上资源,更重要的是集成了4个支持CAN 2.0B协议的CAN控制器,并带有先进的验收滤波器,提供了系统的集成度和复杂度,还提供了系统的稳定性。为满足系统的程序和数据存储需要,外扩了1 MB的16位Flash芯片SST39VF16 0,用于存储程序代码。其中Flash的地址线A1~A20连接至LPC2294的A1~A20,数据线ED0~ED15通过一个双电源供电的双向收发器连接至LPC2294的DQ0~DQ15,CE#接至LPC2294的CS0,将其分配到Bank0单元,其地址范围0x8000 0000~0x8000 1000。OE#、OW#分别连接至LC2294的OE#和WE#。同时外接了1 MB的16位SRAM存储器IS61LV25616AL,用于堆栈和数据的存储。其中SRAM的地址线A1~A20连接至LPC2294的A0~A19,数据线IO0~IO15通过一个双电源供电的双向收发器连接至LPC2294的D0~D15,CE#接至LPC 2294的CS1,将其分配到Bank1单元,该地址范围0x8100 0030~0x8100 1000。LB#、UB分别与BLS0、BLS1相连,用于控制8位或16位读写数据。OE#、OW#分别连接至LC2294的OE#和WE#。
1.2 CAN接口电路设计
系统有两个CAN接口,其中一个是主接口,另一个是冗余接口,均接入同一个CAN网络,其目的是增加系统的可靠性。CAN2.0B控制器由LPC2294直接集成,无需外加独立的CAN控制器,且LPC2294中集成了4个CAN控制器,在此系统中选用第1个和第2个CAN接口。CAN收发器选用了CAT8250T,主要作用是将CAN控制器的逻辑电平转换为CAN总线的差分电平,但与常用的CAN收发器TJA1050T不同的是该CAN收发器将CAN节点的收发与高速光耦、电源隔离集成在一个电路模块中,且隔离电压高达DC2 500 V,接口简单、使用方便,并对CAN总线有过电压保护作用。同时还要在CANH和CANL与地之间并联一个120 Ω的电阻,来匹配传输阻抗,吸收总线回波,确保有较低的电磁辐射和通信可靠性。
1.3 以太网接口电路设计
系统由DM9000E以太网控制器,HR601860网卡变压器,及RJ45接口,组成以太网接口电路。同样选用了两个网口电路,一个是主网口,另一个是冗余网口。其中,LPC2294使用16位总线方式对DM9000E进行控制,并使其工作在100 MHz全双工模式下。对两个网口的选用,是通过LPC2294的CS3、A22引脚来控制主网口的片选信号,即这两个引脚与74AC32的引脚1和2相连,而引脚3连接主网口的ANE引脚。同理将LPC2294的CS3、A23,经74AC32与冗余网口的ANE引脚相连。再将DM9000E的CMD引脚与LPC2294的A2连接。可将主网和冗余网卡芯片的数据端口地址与索引端口地址分别配置成0x8380000、0x83800004和0x83400000、0x83400004。DM9000E的物理层发送和接收端口TXO+、TXO-、RXI+、RXI-经网络变压器芯片HR601680接到RJ45接口。对于DM9000E的其余引脚可根据Datasheet中的说明,按要求连接即可,如图2所示。
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所示。
3 测试
将该上位机IP地址设置为192.1.1.11,打开网关参数设置界面对一些参数进行设置,如:网关参数回复IP地址、网关参数回复端口、网关模块IP地址、网关接收端口号和CAN数据目标IP地址等参数。随后将CAN总线数据报文测试软件ZLGCANTest打开,设置CAN总线的波特率为250 khit·s-1,将CAN报文发出后用ZLGCAN—Test、Tcp&Udp测试工具及EtherPeek NX软件来查看网络的通信情况。图6便是由ZLGCANT est软件所得到的,从图中可知,CAN发送数据的帧类型是扩展帧,帧格式是数据帧,帧ID为0x0000 0000,每个CAN协议中发送8 bit的数据。而图7是通过Tcp&Udp测试工具得到的数据,并已在图中标出,此报文头由Etherner协议报文头、IP协议报头、UDP协议报头和自定义UDP报头组成,并从自定义UDP报头中的报文标识可判别出CAN报文,而后面的数据正是图6中CAN报文中的13 bit数据,即对CAN报文采用透明转换方式,将CAN网络数据成功发送到以太网。同样方法可测试到以太网中数据也成功发送至CAN。网络中其他类型的报文也同样如此。
4 结束语
文中阐述了以ARM7系列LPC2294为核心的以太网与CAN总线网络互联的通信网关实现过程,概述了本网关中采用的以太网和CAN总线的报文格式及其自定义UDP数据报文的结构。并提出了网关的软、硬件实现方法。通过实验该网关模块实现了以太网与CAN总线间的数据传递,且具有稳定性和较高的可靠性。
最终,对DM9000E芯片进行驱动。该芯片的驱动主要由3部分完成:void InitNic()用以对芯片进行初始化,配置片内寄存器等;void Send_P-acket(struct_pkst*TxdData)为数据发送程序,uint8 Rec_Packet(uint8 num)为数据接收程序,上层协议通过调用这两个函数来发送以太网数据帧。 |