基于ARM9的UDP协议栈的设计与实现
随着嵌入式技术和网络技术的迅速发展,以太网接口在嵌入式系统中的应用越来越广泛.以太网通信速度快.通用,可直接与Internet 相连接,提供更大范围的远程访问.目前在工控嵌入式领域,网络通信通常采用UDP 和TCP 协议.UDP 与TCP 相比,UDP 使用非连接的.不可靠的通信方式,因此网络传输速度快,实时性相对较好.文中设计实用S3C2440.以太网控制器DM9000
1 系统的硬件介绍该系统采用优龙科技公司YLP2440 作为开发的硬件系统,YLP2440 采用三星S3C2440A
硬件框图如图1 所示.
2 以太网软件的设计
2. 1 以太网卡控制器的初始化
首先DM9000A 自检,读取DM9000 的生产厂家ID和设备ID 与已经设定好的ID 进行比对,判断DM9000网卡是否存在,初始化DM9000A,它的过程就是适当配置DM9000A 寄存器的过程,具体过程分为以下几个步骤:
(1)启动DM9000A,设置CPCR[REG_1E] = 0×1,使DM9000 的GPIO3 为输出,GPR[REG_1F] =0×0,使DM9000 的GPIO3 输出为低以激活内部PHY.延时2ms 以上以等待PHY 上电.
(2)进行两次软复位,设置DM9000 为正常工作模式,根据芯片设计要求,要想使芯片在上电之后工作正常就要进行两次软复位,设置为NCR[REG_00] =0×01,NCR[REG_00] =0×00,这两步操作进行两次.
(3) 清除各种状态标志位和中断标志位,NSR[REG_01] =0x2c,ISR[REG_FE] =0x3f.
(4)设置接收和发送控制寄存器,并且设置FIFO的大小,RCR[REG_05] =0×39.TCR[REG_02] =0×00.FCTR[REG_09] =0×38.
(5)设置板子自身的MAC 地址.
(6)再一次清除各种状态标志位和中断标志位,NSR[REG_01] =0x2c,ISR[REG_FE] =0x3f.
(7)设置中断屏蔽寄存器,打开接收中断,IMR[REG_FF] =0×81.
当进行了以上步骤的设置之后,DM9000A 芯片就处于正常工作状态了.在以后进行通信的过程中,如果发生异常引起芯片重启,则再一次进行同样的设置.
2. 2 以太网卡数据的发送和接收
DM9000A 发送数据采用的是循环查询模式,接收数据采用的是中断模式,DM9000 内部有0x3FF 大小的SRAM 用于接收和发送数据缓存.在发送或接收数据包之前,数据是暂存在这个SRAM 中的.当需要连续发送或接收数据时,需要分别把DM9000 寄存器MWCMD 或MRCMD 赋予数据端口,这样就指定了SRAM 中的某个地址,并且在传输完一个数据后,指针会指向SRAM 中的下一个地址,从而完成了连续访问数据的目的.但当发送或接收一个数据后, 指向SRAM 的数据指针不需要变化时,则要把MWCMDX 或MRCMDX 赋予数据端口 .
发送数据比较简单,接收数据就略显复杂,因为它是有一定格式要求的.在接收到的一包数据中的首字节如果为0×01,则表示这是一个可以接收的数据包;如果为0×0,则表示没有可接收的数据包.因此在读取其他字节时,一定要先判断首字节是否为0×01.数据包的第二个字节为数据包的一些信息,它的高字节的格式与DM9000 的寄存器RSR 完全一致.第三个和第四个字节为数据包的长度.后面的数据就是真正要接收的数据了.
2. 2. 1 UDP 协议栈的裁剪实现
在系统中主要使用UDP 通信,只需要实现ARP协议.IP 协议,对TCP/ IP 协议进行部分的实现.UDP协议通信(即用户数据报协议)与TCP 一样都是属于传输层协议,位于IP(网际协议)协议的顶层.UDP 相对于TCP 是一种简单协议,提供的是最少的服务,编写的代码量也小,所需的程序和内存空间少,运行速度快.ARP 为IP 地址对应的硬件地址之间提供动态映射,发送终端把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit 的以太网地址来确定目的接口的.设备驱动程序从不检查IP 数据报中的目的IP 地址.IP 协议是TCP/ IP 协议中最为核心的协议,它提供不可靠.无连接的数据报传送服务 .
2. 2. 2 数据的发送过程
数据发送过程如图2 所示.发送终端在第一
ARM9UDP协议 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)