随着互联网中硬件的迅猛发展,网络用户呈指数增长。在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备也逐步地走向网络化,以便共享网络中庞大的信息资源。
本设计是以全电子化铁路车站控制系统为背景,任务是实现铁路车站执行机与远程监测机之间的信息交换。其中,执行机包括各个执行单元,采用CAN总线接口。监测机为远程的PC控制机,采用以太网接口。本设计指在实现CAN通信链路和以太网通信链路的透明连接,最终形成通用的CAN总线以太网网关。
CAN总线与以太网通信,通常采用两种方案,一种是采用工控机加网卡来实现。这种连接方式成本高,开发周期长。另一种是采用32位MCU+RTOS的方案,这种方案采用32位高档单片机,在RTOS(实时多任务操作系统)的平台上进行软件开发,在嵌入式系统中实现TCP/IP的协议处理。它的缺点是:单片机价格较高,开发周期较长,需要购买昂贵的RTOS开发软件,对开发人员的开发能力要求较高。鉴于上述方案的优缺点,笔者设计一种单独的以太网网关互连系统,成功地实现了以太网与CAN总线的直接互联。
1 硬件设计
本系统以单片机为界,为了两部分:CAN总线控制部分和以太网控制部分。系统提供RJ45接口连接Ethernet网络,并且提供一个CAN总线接口供用户使用。系统可以把从Ethernet上过来的IP数据报解包送给CAN总线接口,也可把从CAN总线接口过来的数据封装为IP包送到局域网中。
1.1 单片机及其外部存储器
单片机W78E58B为主要控制部分,实现对网络芯片和CAN控制器的控制。在微处理器内嵌入TCP/IP协议和CAN协议,完成两者之间的协议转换,实现CAN接口和以太网接口之间数据的透明传输。
62256是32K的外部RAM,用来缓存以太网数据包和CAN总线传来的数据,使用它的目的是提高单片机的数据传输速度和处理复杂的TCP/IP协议。由于以太网最大的数据包有1514字节,而单片机W78E58B只能256字节的RAM,无法存储这么大的数据包,只能放在外部RAM里,以使单片机能够高速地吞吐数据。P2.7为低电平时,62256被选通,因此其寻址范围为0000H~7FFFH。
单片机W78E58B内部有32K的EEPROM,可用来存储一些配置信息,如网关IP地址、MAC地址、SJA1000的ID网络标识符、网络掩码和总线定时(BTR0、BTR1)等。这样可以灵活方便地修改网关参数,适应不同的环境,同时也有利于以后的扩展。
1.2 以太网控制部分
RTL8019AS是台湾Realtek公司制造的一种高集成度的全双工10M/S以太网控制芯片,可实现基于Ethernet协议的MAC层的全部功能,内置16KB的SRAM、双DMA通道和FIFO,可完成数据包的接收和发送功能。
在该设计中,RTL8019AS使用跳线模式(JP置为高),数据线使用八位模式(IOCS16B用27kΩ电阻下拉接地),RTL8019AS的低五位地址线SA0~SA4对应接到单片机的P2.0~P2.4,SA6和SA9接VCC,其它地址线全部接地。当P2.6和P2.7同时为高电平时RTL8019AS的片选信号AEN使能。RTL8019AS的I/O地址需要映射为单片机的I/O地址,这样单片机才能操作RTL8019AS。根据电路设计,该系统中单片机的I/O地址与RTL8019AS的I/O地址之间的映射关系为:0XC000H~240H,0XC100H~241H…)XDF00H~25FH,共32个字节。RTL8019AS除与单片机连接外,还将其网络收发器的四根引脚HD、LD、TRIN+、TPIN-通过外部的隔离滤波器LPF与以太网相连,目的是提高网络通信的抗干扰能力。
1.3 CAN总线控制部分
SJA1000为CAN总线控制器,具有多主结构、总线访问优先权、广播报文功能及硬件滤波功能,具有简单总线连接的SJA1000可完成物理层和数据链路层的所有功能。它具有两种工作模式BasicCAN和PeliCAN。BasicCAN仅支持标准模式(本文仅介绍BasicCAN模式),支持错误分析功能,对CAN收发器进行控制,为微控制器提供控制CAN总线的简单接口。单片机对SAJ1000的读写就像读写自己的外部RAM一样。P2.7取反后作为其片选信号线。因此,SJA1000对应地址为8000H~807FH。SJA1000的/INT引脚接单片机的INT1引脚,使单片机能够实时响应CAN的中断请求。
TJA1050为CAN收发器,是CAN协议控制器和物理总线之间的接口,可以对CAN总线提供差动发送和接收能力。微控制器对CAN控制器进行相应配置后,收发器自动完成相应的CAN总线动作。有较强的抗干扰能力,最多节点数可达110个。
采用高速光耦6N137实现SJA1000与TJA1050之间的电气隔离,保护控制系统电路,以满足在最高速率1M/s下的电气响应。
2 软件设计
整个系统的软件分为两部分:CAN控制器协议转换模块和以太网控制器协议转换模块。其程序结构如图2所示。
当以太网应用层有数据要发送到CAN节点时,首先由以太网控制器协议转换模块从传输层数据报文中解析出完整的CAN协议数据包,存放在数据缓冲区A中,再通知总调度模块,由它调用CAN控制器协议模块将CAN协议数据包发送到CAN总线上。反过来,当CAN设备有数据要发送到用户层时,先由CAN控制器协议转换模块将完整的CAN协议数据包存放在数据缓冲区B中,再通知总调度模块,由它调用以太网控制器协议转换模块,将完整的CAN协议数据包作为应用层数据封装起来,再发送到以太网的应用。
2.1 CAN控制器协议转换模块
CAN通信协议有四种不同的帧格式,本系统中使用标准帧格式,其格式如表1所示。CAN首先接收仲裁域,根据仲裁域的内容判断所接收的信号是哪种帧格式,然后用户将相应的数据写入数据域中进行发送,或从数据域中读取接收到的数据。
表1 帧传送格式
CAN控制器协议转换模块主要由SJA1000的寄存器读程序CANRead()、写程序、CANWrite()、初始化程序CANInit()、发送程序Txdsub()和接收程序Rxdsub()组成。
选用CAN2.0A协议构建CAN总线控制网络,对SJA1000的初始化主要包括对控制寄存器CR、验收代码寄存器ACR、验收屏蔽寄存器AMR、总线定时寄存器BTR0/1和输出控制寄存器OCR的设置。初始化完成后,由总调度模块监控SJA1000控制器。当CAN总线上有数据到达时,通过中断方式调用接收子程序Rxdsub(),把这一帧数据存入数据缓冲区B中,然后翻译接收缓冲器。同样,当有按CAN2.0A协议格式组合成的一帧数据报文在数据缓冲区A中要发送到CAN总线上去时,总调度模块调用CAN发送子程序Txdsub()发送。
2.2 以太网控制器协议转换模块
一个标准的以太网物理传输帧如表2所示(单位:字节)。
表2 以太网的物理传输帧结构表
除数据段的长度不定外,其它部分的长度都固定不变。以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、SA、TYPE),最小大能小于60字节。除去DS、SA、TYPE14字节外,还必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符的个数不包括在长度字段里;超过1500个字节时,需拆成多个帧传送。
以太网控制器协议转换模块主要负责从UDP数据包中解析出完整的CAN协议报文,存入数据缓冲区A中。同时,也可以将数据缓冲区B中的完整CAN协议报文封装成UDP数据报,然后将其发送到以太网上。
主程序工作流程图如图3所示,单片机首先初始化网络设备。网卡IP地址和物理地址存于单片机的EEPROM中,单片机复位后首先读取这些数据以初始化网卡。
网卡初始化完成以后,当有数据从RJ45过来时,单片机对数据包进行分析,如果是ARP(物理地址解析协议)数据包,则程序转入ARP处理程序。如果是IP(网间协议)数据包且传输层使用UDP(用户数据报协议),端口正确,则认为数据报正确,数据解包后,送入数据缓冲区A,最后把数据部分通过CAN接口输出。反之,如果单片机从CAN接口收到数据,则将数据按照UDP协议格式打包,送入数据缓冲区B,由RTL8019AS将数据输出到局域网中。
本系统在通信传输层来采UDP协议是考虑到CAN协议数据报为短帧形式(每个数据帧最多为8字节)。如果采用TCP传输协议,要传输8个字节CAN协议数据,需先通过三次握手建立连接,再传输数据,之后还要通过握手释放连接。这样的传输效率对有限的网络资源来说无疑是一种浪费。而UDP是无连接的传输,可以提高网络传输效率,同时也可以减轻网关的处理任务压力。UDP传输协议可靠性的不足之处可以采用加传校验机制来改善。通过实验测试,表明这种方法是行之有效的。
本文介绍了种低成本、高可靠性、快捷的嵌入式CAN总线与以太网互连的软硬件实现方法。该互连方案保证了管理监控层与生产测控层之间的连接,方便了上下层信息交流,适用于现有的网络传输系统,有着广泛的应用前景。特别是在数据采集和数据传输 领域中,可以广泛地应用于嵌入式网络接口功能的设计中。