CAN总线与以太网互连系统设计
3.1.1CAN控制器协议模块
CAN控制器协议转换模块程序主要由SJA1000的寄存器读程序CANRead()、写程序CANWrite()、初始化程序CANInit()、发送程序txdsub()、接收程序rxdsub()程序组成。之所以要编写单独的SJA1000的寄存器读、写子程序,这是由SX52芯片只有I/O端口决定的。
选用CAN2.0A协议构建CAN总线控制网络,对SJA1000的初始化主要完成控制寄存器CR、验收代码寄存器ACR、验收屏蔽寄存器AMR、总线定时寄存器BTR0,1和输出控制寄存器OCR的设置。初始化完成后,由总调度模块监控SJA1000控制器。当CAN总线上有数据到达时,它调用接收子程序rxdsub(),把这一帧数据包存入数据缓冲区B中,然后释放接收缓冲器。同样,当有按CAN2.0A协议格式组合成的一帧数据报文在数据缓冲区A中要发送到CAN总线上去时,总调度模块将调CAN发送子程序txdsub()发送。
3.1.2以太网控制器协议转换模块
以太网控制器协议转换模块主要负责从UDP数据包中解析出完整CAN协议报文,存入数据缓冲区A。同时,可能将数据缓冲区B中的完整CAN协议报文封装成UDP数据报,然后将其发送到以太网上。
在通信传输层采用UDP协议是考虑到CAN协议数据报为短帧形式(每个数据帧最多为8字节)。如果采用TCP传输协议,要传输8字节CAN协议数据,要先通过3次握手建立连接,再传输数据,之后还要通过握手释放连接。这样传输效率对有限的网络资源来说无疑是一种浪费。而UDP是无连接的传输,可以提高网络传输效率,同时,也减轻网关的处理任务。当然,UDP传输协议是不可靠的,对于控制网络来说,是不允许的。为了提高通信的可靠性,采用了回传校验机制。通过实验测试表明这种方式是行之有效的。
以太网控制器协议转换模块主要由以太网卡驱动、ARP、UDP协议的若干个API函数组成,如NICInit()、NICDMAInit()、NICInitTxFrame()、NICSendTxFrame()、NICReadAgain()、ARPCheckIfIs()、ARPSendResponse()、ARPSendStPacket()、ICMPProcPktIn()、UDPAppInit()、IPGenCheckSum()、、UDPAppProcPktIn()、UDPStartPktOut()和UDPEndPktOut()等。所使用的变量有:remoteIP[3:0]、myIP[3:0]、UDPRxSrcPortMSB、UDPRxSrcPortLSB、UDPRxDataLenMSB、UDPRxDataLenLSB、UDPTxSrcPortMSB,UDPTxSrcPortLSB、UDPTxDestPortMSB、UDPTxDestPortLSB、DPTxDataLenMSB,UDPTxDataLenLSB等。
系统首次执行或复位时,以太网控制器协议转换模块将首先调用NICInit()和UDPAppInit()等进行NIC、ARP、IP、UDP和应用程序的初始化。初始化完成后,即进入主循环。在主循环中,SX52将反复检测RTL8019AS是否接收以太网帧。当有数据被接收时,SX52调用NICDMAInit()和NICReadAgain()读入以太网帧首部?再调用ARPCheckIfIs()判 《CAN总线与以太网互连系统设计(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/168467.html
CAN控制器协议转换模块程序主要由SJA1000的寄存器读程序CANRead()、写程序CANWrite()、初始化程序CANInit()、发送程序txdsub()、接收程序rxdsub()程序组成。之所以要编写单独的SJA1000的寄存器读、写子程序,这是由SX52芯片只有I/O端口决定的。
选用CAN2.0A协议构建CAN总线控制网络,对SJA1000的初始化主要完成控制寄存器CR、验收代码寄存器ACR、验收屏蔽寄存器AMR、总线定时寄存器BTR0,1和输出控制寄存器OCR的设置。初始化完成后,由总调度模块监控SJA1000控制器。当CAN总线上有数据到达时,它调用接收子程序rxdsub(),把这一帧数据包存入数据缓冲区B中,然后释放接收缓冲器。同样,当有按CAN2.0A协议格式组合成的一帧数据报文在数据缓冲区A中要发送到CAN总线上去时,总调度模块将调CAN发送子程序txdsub()发送。
3.1.2以太网控制器协议转换模块
以太网控制器协议转换模块主要负责从UDP数据包中解析出完整CAN协议报文,存入数据缓冲区A。同时,可能将数据缓冲区B中的完整CAN协议报文封装成UDP数据报,然后将其发送到以太网上。
在通信传输层采用UDP协议是考虑到CAN协议数据报为短帧形式(每个数据帧最多为8字节)。如果采用TCP传输协议,要传输8字节CAN协议数据,要先通过3次握手建立连接,再传输数据,之后还要通过握手释放连接。这样传输效率对有限的网络资源来说无疑是一种浪费。而UDP是无连接的传输,可以提高网络传输效率,同时,也减轻网关的处理任务。当然,UDP传输协议是不可靠的,对于控制网络来说,是不允许的。为了提高通信的可靠性,采用了回传校验机制。通过实验测试表明这种方式是行之有效的。
以太网控制器协议转换模块主要由以太网卡驱动、ARP、UDP协议的若干个API函数组成,如NICInit()、NICDMAInit()、NICInitTxFrame()、NICSendTxFrame()、NICReadAgain()、ARPCheckIfIs()、ARPSendResponse()、ARPSendStPacket()、ICMPProcPktIn()、UDPAppInit()、IPGenCheckSum()、、UDPAppProcPktIn()、UDPStartPktOut()和UDPEndPktOut()等。所使用的变量有:remoteIP[3:0]、myIP[3:0]、UDPRxSrcPortMSB、UDPRxSrcPortLSB、UDPRxDataLenMSB、UDPRxDataLenLSB、UDPTxSrcPortMSB,UDPTxSrcPortLSB、UDPTxDestPortMSB、UDPTxDestPortLSB、DPTxDataLenMSB,UDPTxDataLenLSB等。
系统首次执行或复位时,以太网控制器协议转换模块将首先调用NICInit()和UDPAppInit()等进行NIC、ARP、IP、UDP和应用程序的初始化。初始化完成后,即进入主循环。在主循环中,SX52将反复检测RTL8019AS是否接收以太网帧。当有数据被接收时,SX52调用NICDMAInit()和NICReadAgain()读入以太网帧首部?再调用ARPCheckIfIs()判 《CAN总线与以太网互连系统设计(第3页)》