《基于ARM9和DM9000芯片解决UDP协议的通信问题.doc》由会员分享,可在线阅读,更多相关《基于ARM9和DM9000芯片解决UDP协议的通信问题.doc(5页珍藏版)》请在三一文库上搜索。
1、基于ARM9和DM9000芯片解决UDP协议的通信问题引 言随着嵌入式技术和网络技术的迅速发展,以太网接口在嵌入式系统中的应用越来越广泛。以太网通信速度快。通用,可直接与Internet 相连接,提供更大范围的远程访问。目前在工控嵌入式领域,网络通信通常采用UDP 和TCP 协议.UDP 与TCP 相比,UDP 使用非连接的。不可靠的通信方式,因此网络传输速度快,实时性相对较好。文中设计实用S3C2440.以太网控制器DM9000 和经过自行裁剪的TCP / IP 协议栈,构成嵌入式系统的以太网接口,实现UDP 通信。1 系统的硬件介绍该系统采用优龙科技公司YLP2440 作为开发的硬件系统,
2、YLP2440 采用三星S3C2440A 作为CPU,最高主频400MHz,带有64MB SDRAM 和64MB NANDFlash 的外部存储器,有两个五线异步串行口,波特率高达115200bps,一个10M / 100M DM900AEP 网络接口卡,带有连接和传输指示灯.DM9000A 是一个全集成。功能强大。性价比高的快速以太网MAC 控制器,它带有一个通用处理接口.EEPROM 接口.10/ 100MPHY 和SRAM,采用单电源供电,可兼容3. 3V.5V 的IO 接口电平.DM9000A 同样支持MII (Media IndependentInterface,介质无关接口),它包
3、含一系列可被访问控制的状态寄存器,这些寄存器是字节对齐的,在硬件或者软件复位时被设置成初始化。硬件框图如图1 所示。2 以太网软件的设计2. 1 以太网卡控制器的初始化首先DM9000A 自检,读取DM9000 的生产厂家ID和设备ID 与已经设定好的ID 进行比对,判断DM9000网卡是否存在,初始化DM9000A,它的过程就是适当配置DM9000A 寄存器的过程,具体过程分为以下几个步骤:(1)启动DM9000A,设置CPCRREG_1E = 01,使DM9000 的GPIO3 为输出,GPRREG_1F =00,使DM9000 的GPIO3 输出为低以激活内部PHY.延时2ms 以上以等
4、待PHY 上电。(2)进行两次软复位,设置DM9000 为正常工作模式,根据芯片设计要求,要想使芯片在上电之后工作正常就要进行两次软复位,设置为NCRREG_00 =001,NCRREG_00 =000,这两步操作进行两次。(3) 清除各种状态标志位和中断标志位,NSRREG_01 =0x2c,ISRREG_FE =0x3f.(4)设置接收和发送控制寄存器,并且设置FIFO的大小,RCRREG_05 =039.TCRREG_02 =000.FCTRREG_09 =038.(5)设置板子自身的MAC 地址。(6)再一次清除各种状态标志位和中断标志位,NSRREG_01 =0x2c,ISRREG_
5、FE =0x3f.(7)设置中断屏蔽寄存器,打开接收中断,IMRREG_FF =081.当进行了以上步骤的设置之后,DM9000A 芯片就处于正常工作状态了。在以后进行通信的过程中,如果发生异常引起芯片重启,则再一次进行同样的设置。2. 2 以太网卡数据的发送和接收DM9000A 发送数据采用的是循环查询模式,接收数据采用的是中断模式,DM9000 内部有0x3FF 大小的SRAM 用于接收和发送数据缓存。在发送或接收数据包之前,数据是暂存在这个SRAM 中的。当需要连续发送或接收数据时,需要分别把DM9000 寄存器MWCMD 或MRCMD 赋予数据端口,这样就指定了SRAM 中的某个地址,
6、并且在传输完一个数据后,指针会指向SRAM 中的下一个地址,从而完成了连续访问数据的目的。但当发送或接收一个数据后, 指向SRAM 的数据指针不需要变化时,则要把MWCMDX 或MRCMDX 赋予数据端口 。发送数据比较简单,接收数据就略显复杂,因为它是有一定格式要求的。在接收到的一包数据中的首字节如果为001,则表示这是一个可以接收的数据包;如果为00,则表示没有可接收的数据包。因此在读取其他字节时,一定要先判断首字节是否为001.数据包的第二个字节为数据包的一些信息,它的高字节的格式与DM9000 的寄存器RSR 完全一致。第三个和第四个字节为数据包的长度。后面的数据就是真正要接收的数据了
7、。2. 2. 1 UDP 协议栈的裁剪实现在系统中主要使用UDP 通信,只需要实现ARP协议.IP 协议,对TCP/ IP 协议进行部分的实现.UDP协议通信(即用户数据报协议)与TCP 一样都是属于传输层协议,位于IP(网际协议)协议的顶层.UDP 相对于TCP 是一种简单协议,提供的是最少的服务,编写的代码量也小,所需的程序和内存空间少,运行速度快.ARP 为IP 地址对应的硬件地址之间提供动态映射,发送终端把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit 的以太网地址来确定目的接口的。设备驱动程序从不检查IP 数据报中的目的IP 地址.IP 协议是TCP/ IP 协议
8、中最为核心的协议,它提供不可靠。无连接的数据报传送服务 。2. 2. 2 数据的发送过程数据发送过程如图2 所示。发送终端在第一次发送数据的时候,要知道接收端的IP 地址和端口号,还要得到对方的物理MAC 地址,因为两个终端最后通信是通过寻找对方的MAC 地址来进行的,因此首先得通过ARP 协议,把对方的IP 地址转换为MAC 地址,得到了物理地址之后才能通信。如果长时间不能得到这个物理地址,则只能说明请求失败,需要重新发送ARP 请求,ARP 的封装过程如图3(b)所示。2. 2. 3 数据包的封装过程UDP 协议数据包的封装在运输层进行,打好包的UDP 数据将送往网络层进行IP 协议的打包
9、,UDP 要完成进程到进程的通信,把报文交付给正确的进程。当进程有报文要通过UDP 发送时,它就把这个报文连同一对套接字地址以及数据长度传递给UDP.UDP 收到数据后就加上UDP 首部,也就是UDP 数据包的封装如图3(c)所示。然后UDP 就把该用户数据包连同IP 加上自己首部,在协议字段使用值17,指出该数据是从UDP 协议来的,这个过程就是IP 数据包的封装过程如图3(a)所示。这个IP 数据包再传递给数据链路层。数据链路层收到IP 数据包之后,加上自己的首部(可能还有尾部),再传递给物理层。物理层把这些位编码为电信号或者光信号,然后把它发送到远程的机器。2. 2. 4 数据的接收系统
10、接收数据采用的是中断模式。当网卡接收到数据时,就触发一个中断,启动中断服务程序。在中断服务程序中首先清除中断标志位,以防在接收数据的时候再次引发中断,然后判断寄存器MRMDX 的值,确定网卡是否接收到了数据,如果接收到了数据就要进行数据处理,也就是对数据包的解封,得到应用程序发送来的数据,如果没有得到数据则说明网卡初始化失败,重新初始化网卡。中断接收程序的流程图如图4所示。在接收到以太网数据帧中,首先判断数据类型字段,如果是ARP 协议,则进入ARP 处理流程,如果是IP 协议,则进入IP 协议流程.ARP 协议处理过程:首先判断ARP 包目的IP 地址是否与本地IP 地址一致,如果不一致,丢
11、弃不处理;如果一致,再判断ARP类型,操作类型字段为1 时表示ARP 请求,调用ARP发送函数发送ARP 响应包。操作类型字段为2 时,记录下对方的MAC 地址,以后通信就是根据这个MAC传送数据的。IP 协议处理过程如下所述:首先判断IP 包目的IP地址是否与本地IP 一致,如果不一致,丢弃不处理,如果一致,则再判断协议类型,是否为UDP 数据包,是就进入UDP 处理过程,不是就进入其他协议处理过程。3 实验结果和分析3. 1 ARP 通信测试实验中测试了ARP 请求和UDP 通信,设置ARM开发板的IP 地址为219. 243. 50. 187,MAC 地址为052,054,0x4c,03
12、8,0xf7,042,PC 机的IP 地址为219. 243. 50. 188,MAC 地址为000,023,0x5A,015,073,0xF4.经过测试当开板向PC 发送ARP 请求时,PC 能够正确应答响应包,并且多次请求都能够得到正确的响应,证明ARP 协议能够稳定运行,实验结果如图5 所示。当开发板得到了PC 机的MAC 地址之后,就可以与它进行正常的UDP 通信了。在中断程序之中判定协议类型,接收到的数据包是ARP 协议还是UDP 协议,当接收的是ARP 协议,则进行ARP 协议处理,得出图5 的实验结果,当得到的是UDP 协议,则进行UDP 协议处理,得出的实验结果如图6 所示。经
13、过长时间的通信可以发现,传输的数据没有出现误码,可以说明这种通信方式比较稳定可行。3. 2 UDP 通信测试在UDP 通信实验中,设置两个数据终端的IP 地址和通信端口分别为219.243.50.187:6000,219.243.50.186:10005,然后发送数据,用抓包工具sniffer 抓包的结果如图6 所示。通过图中结果可以看出,SrcIP 为219. 243. 50. 87,Src Port 为6000,DestIP 为219. 243.50. 186,Dst Port 为10005,这都与设置的相同.Protocol为0800 表示为UDP 协议类型,而且能够正确地接收到发送的数据,并且经过多次的实验,结果都是正确的,这证明系统通信稳定可靠,通过移植的协议栈能够正常的工作,达到了预期的目标。4 结束语文中实现了基于ARM9 和DM9000 芯片的UDP通信,成功地对TCP/ IP 协议栈裁剪移植实现UDP.ARP 等协议通信。详细介绍了DM9000 网卡驱动程序过程,并且实现了网口接收发送数据的功能,通过对大量数据的传输实验,证明了ARM9 和DM9000 构成的通信系统性能的稳定性。能够较好地解决大量数据通过UDP 协议通信的问题.
链接地址:https://www.31doc.com/p-3409236.html