3 软件系统的设计
3.1主程序的设计
本系统主要是在嵌入式系统中实现TCP/IP协议栈,主要采用以太网IEEE802.3、IP、UDP、ARP等协议作为通信协议,传输数据通过以太网控制器完成。其主程序主要完成从UDP数据包中解析出完整的CAN协议报文,并存入数据缓冲区A中。同时,也可以将数据缓冲区B中完整的CAN协议报文封装成UDP数据报,然后将其发送到以太网上。
在数据发送前,先要对待传输的数据进行协议封装。以UDP数据报为例,首先对原始数据添加UDP头,包括源端口、目的端口、UDP数据长度和校验和4个字段,然后再添加IP头(包括源IP地址、目的IP地址)、校验和等字段,最后封装以太网IEEE802.3帧,包括目的CRC地址、源MAC地址和以太网帧总长度。其中源MAC地址为本地物理地址,由程序在初始化时设定。而IEEE802.3帧结构中的CRC校验由以太网硬件自动完成。至此,构造了一个完整的UDP数据报,就可以交给RTL8019AS进行发送了。对于接收到的数据包,主处理器对其进行拆解,将解包得到的IP地址与本地IP地址相比较,同时进行校验和验证,如果IP一致,则接收该数据包,否则将其丢弃;如果校验和不正确,则表示数据包传输过程中发生差错,但不产生差错报文,由应用层发现丢失的数据包并请求重传。
3.2 主程序流程图
主程序流程图如图3所示,DSP首先初始化网络设备。当有数据从RJ45传过来时,DSP对数据包进行分析,如果是ARP(物理地址解析协议)数据包,则程序转入ARP处理程序。如果是IP(网间协议)数据包且传输层使用UDP(用户数据报协议),端口正确,则认为数据报正确,数据解包后,送入数据缓冲区A,最后把数据部分通过CAN接口输出。反之,如果DSP从CAN接口接收数据,则将数据按照UDP协议格式打包,送入数据缓冲区B,由RTL8019AS将数据输出到局域网中。
3.3 中断服务子程序的设计
本系统采用中断方式来处理RTL8019AS 的收发。当主程序响应RTL8019AS的中断时,根据中断寄存器(ISR)的值来判定程序的走向,中断流程图如图4所示。