以太网数据通信接口的设计(精品).docx
以太网数据通信接口的设计以太网是应用特别广泛的计算机网络技术,它以低成本、易集成和较远传输距离等的优势获得了广泛的使用1。一般的以太网传输方案是使用主控芯片与物理层接口相连接,而后将以太网协议写入在主控芯片内来完成以太网的通信,但是这种的开发周期很长,难度也很大,是由于有着比拟复杂以太网协议的程序,并且运行起来不太稳定2;另一种就是使用以太网协议栈芯片,只需要经过一些简单的寄存器配置以及外部连线便能够实现以太网的通信,并且这种方法开发难度较小,集成度较高而且运行很稳定,已成为实现以太网通信的最佳方案3。鉴于此,笔者提了一种基于以太网协议栈芯片W5300,以UDP为协议为基础的的以太网数据通信系统。FPGA完成对W5300的配置,而TCP/IP协议栈的处理交由W5300完成。1系统硬件设计在硬件系统中时选取FPGA做为主控芯片,完成W5300各个寄存器的读、写配置以及功能的配置,硬件构造如图1.1所示。W5300与FPGA通过数据总线、地址总线,以及一些其他的控制信号线(如/RESET、/CS、/RD、/WR、/INT)相连接。W5300与控制器的接口形式分为直接和间接地址形式,数据总线又分为16位和8位。在本文中采用的是16位数据总线的直接地址形式,BIT16EN引脚需连接到高电平,但是该引脚有内部上拉电阻,所以直接将其悬空。物理层便采用W5300内部的PHY,TEST_MODE3:0的4个引脚全部接地,配置为内部集成的PHY形式,将OP_MODE2:0的三个引脚接地,配置为自动握手形式。FPGA能够经过地址总线直接访问W5300内的各个寄存器和存储器,通过进行相应寄存器的描绘,完成对W5300的配置,当配置完成后,由媒体独立接口的两路差分信号对与计算机的网络接口直接连接。当W5300从网络上接收到控制命令后,W5300模块便从其中把接收到的控制指令取出,并将其存入FIFO中,通过进行指令解析来读取产生的相应控制信号,进而完成数据通信功能。2系统软件设计W5300内部集成了TCP/IP协议,故我们只需要设计Socket接口。这样能够大大简化设计流程,同时使得微控制器的处理能力和系统资源的使用率减少。软件流程图如图2.1所示。2.1W5300的初始化W5300初始化就是根据写时序的要求对应的寄存器进行相关的描绘。首先,设置socket1中断,即将0x01写入中断屏蔽寄存器,然后设置网关IP地址,W5300硬件地址,IP地址和子网掩码等参数,详细配置如表2.1所示。W5300的形式寄存器采用的是默认值(0x3800),此时与W5300与FPGA的接口形式为直接寻址方式,使用8位数据总线。重复发送计数寄存器RCR采用默认值(0x0008),即重复发送的九次,重复发送超时寄存器RTR也采用默认值(0x07d0),即重复发送超时时间为200ms。在UDP协议形式下,W5300传输超时指的是ARP超时,所以默认情况下,ARP超时为1.8s。TX/RX寄存器空间的分配也使用默认值,即8个独立的socket平均分配128k字节存储空间。2.2SOCKET1的初始化W5300完成初始化后,接着对socket1进行初始化。本设计中W5300工作在UDP形式下。先将0x02写入socket1形式寄存器设S1_MR,此时socket1处于UDP单播形式下。然后把socket1的端口号设置为8000,即将0x1f40写入socket1源端口寄存器。然后执行打开命令,即将0x01写入socket1的命令寄存器写S1_CR。最后,读取socket1状态寄存器S1_SSR的值,并判定能否为0x22,假如S1_SSR值为0x22,便讲明已经进入了UDP协议形式,socket1初始化完成,假如该值不为0x22,便讲明socket1没有进入UDP形式,此时,将0x10写入socket1的命令寄存器S1_CR,关闭socket1。然后重复上述操作,直至初始化完成。2.3W5300接收数据状态机进入socket1接收数据状态后,根据接收到的UDP数据报格式,通过读取S1_RX_FIFOR寄存器,从socket1的RX存储器中将接收到数据报的目的IP地址、目的端口号和数据报长度值读取出来。继而再通过S1_RX_FIFOR不断的将真正的UDP数据报从socket1的RX读出,每次读取完一个字节,便增加了1字节计数变量,并比拟变量i和数据包长度值。若变量i的值小于包长度值,表明UDP数据报并没有收完,然后继续接收。若变量i的值等于包长度值,则表明这个包接收到了一个完好的UDP数据报。最后便是执行RECV命令,将0x40写入socket1命寄存器令S0_CR,通知W5300已完成数据接收,此时,socket1完成数据接收,程序流W5300接收的程序流程图如图2.2所示。2.4W5300发送数据状态机进入状态后socket1发送数据状态后,先访问socket1的发送存储器剩余空间寄存器S1_TX_FSR,读取它的值,然后判定socket1的发送存储器能否包容一个完好的包数据。若发送缓冲区剩余的空间比发送数据长度大,则从FIFO中取出需要进行传输的数据,并把需要发送的数据复制至socket1的TX存储器,而后在socket1的写长度寄存器S1_TX_WRSR写入发送数据的长度值,告知W5300要上位机发送的数据字节数。最后便是执行发送命令,将命令值0x10写入socket的命令寄存器S1_CR,W5300接收到这个命令后便对收到数据惊醒处理,并将其发送至网络。完成数据发送后,socket1的中断寄存器产生发送完成中断(SEND_OK=0x10),该中断去除以后,再读取S1_RX_RSR寄存器的值,并判定改制能否为0,进而能够知道状态机能否进入数据接收状态或者数据发送状态,W5300发送数据的程序流程如图2.3所示。3系统功能验证在测试工具中填入发送端(W5300)和接收端(计算机)的IP地址,点击连接网络,会弹出“网络连接成功窗口,并且以太网连接指示灯D4点亮,讲明与计算机网络层连接成功。利用UDP调试助手,根据UDP数据报的格式给W5300发送10个字节的网络控制命令(C0A800031F40000255AA),然后接收W5300的回传数据。数据发送成功后,开场接收从W5300回传的数据,在低电平将数据从FIFO中读取出来,再把读出的数据发送回计算机,在上位机上显示。经太多次测试,并采用UltraEdit数据查看软件可知本系统能够正确的完成数据通信功能。查看结果如图3.1所示。左图数据从00递增至F9,帧计数有4个字节,每帧的帧计数是连续递增的;帧尾有两个字节,分别是EB、90。右图为为了进一步验证通信的正确性,将FIFO中的数据格式更改,此时,W5300从FIFO中读取的为递减的数据,数据从FF递增至06,帧计数有4个字节,每帧的帧计数是连续递增的;帧尾有两个字节,分别是EB、90。4结语本文对基于太网协议芯片W5300的以太网接口设计方案进行了具体的介绍,该设计方案的有开发周期短、低成本、易施行等的优势,通过验证,系统很好的实现了基于UDP协议的数据通信,并且在有着很好的稳定性和实时性,速率方面也有着良好的表现。