一种低成本的Ehternet嵌入式系统的设计
:CAN控制器协议转换模块和以太网控制器协议转换模块。其程序结构如图2所示。
图2 主程序结构图
当以太网应用层有数据要发送到CAN节点时,首先由以太网控制器协议转换模块从传输层数据报文中解析出完整的CAN协议数据包,存放在数据缓冲区A中,再通知总调度模块,由它调用CAN控制器协议模块将CAN协议数据包发送到CAN总线上。反过来,当CAN设备有数据要发送到用户层时,先由CAN控制器协议转换模块将完整的CAN协议数据包存放在数据缓冲区B中,再通知总调度模块,由它调用以太网控制器协议转换模块,将完整的CAN协议数据包作为应用层数据封装起来,再发送到以太网的应用。
(一)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 以太网的物理传输帧结构表
除数据段的长度不定外,其他部分的长度都固定不变。以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、SA、TYPE),最小大能小于60字节。除去DS、SA、TYPE14字节外,还必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符的个数不包括在长度字段里;超过1500个字节时,需拆成多个帧传送。
以太网控制器协议转换模块主要负责从UDP数据包中解析出完整的CAN协议报文,存入数据缓冲区A中。同时,也可以将数据缓冲区B中的完整CAN协议报文封装成UDP数据报,然后将其发送到以太网上。
主程序工作流程图如图3所示,单片机首先初始化网络设备。网卡IP地址和物理地址存于单片机的EEPROM中,单片机复位后首先读取这些数据以初始化网卡。
图3 主程序工作流程图
网卡初始化完成以后,当有数据从RJ45过来时,单片机对数据包进行分析,如果是ARP(物理地址解析协议)数据包,则程序转入ARP处理程序。如果是IP(网间协议)数据包且传输层使用UDP(用户数据报协议),端口正确,则认为数据报正确,数据解包后,送入数据缓冲区A,最后把数据部分通过CAN接口输出。反之,如果单片机从CAN接口收到数据,则将数据按照UDP协议格式打包,送入数据缓冲区B,由RTL8019AS将数据输出到局域网中。
本系统在通信传输层来采UDP协议是考虑到CAN协议数据报为短帧形式(每个数据帧最多为8字节)。如果采用TCP传输协议,要传输8个字节CAN协议数据,需先通过三次握手建立连接,再传输数据,之后还要通过握手释放连接。这样的传输效率对有限的网络资源来说无疑是一种浪费。而UDP是无连接的传输,可以提高网络传输效率,同时也可以减轻网关的处理任务压力。UDP传输协议可靠性的不足之处可以采用加传校验机制来改善。通过实验测试,表明这种方法是行之有效的。
本文介绍了种低成本、高可靠性、快捷的嵌入式CAN总线与以太网互连的软硬件实现方法。该互连方案保证了管理监控层与生产测控层之间的连接,方便了上下层信息交流,适用于现有的网络传输系统,有着广泛的应用前景。特别是在数据采集和数据传输领域中,可以广泛地应用于嵌入式网络接口功能的设计中。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)