0 引 言
跟着嵌入式技能和网络技能的迅速发展,以太网接口在嵌入式体系中的运用越来越广泛.以太网通讯速度快.通用,可直接与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 所示.发送终端在第一次发送数据的时分,要知道接纳端的IP 地址和端口号,还要得到对方的物理MAC 地址,由于两个终端最终通讯是经过寻觅对方的MAC 地址来进行的,因而首要得经过ARP 协议,把对方的IP 地址转换为MAC 地址,得到了物理地址之后才干通讯.假如长期不能得到这个物理地址,则只能阐明恳求失利,需求从头发送ARP 恳求,ARP 的封装进程如图3(b)所示.
2. 2. 3 数据包的封装进程
UDP 协议数据包的封装在运送层进行,打好包的UDP 数据将送往网络层进行IP 协议的打包,UDP 要完结进程到进程的通讯,把报文交付给正确的进程.当进程有报文要经过UDP 发送时,它就把这个报文连同一对套接字地址以及数据长度传递给UDP.UDP 收到数据后就加上UDP 首部,也便是UDP 数据包的封装如图3(c)所示.然后UDP 就把该用户数据包连同IP 加上自己首部,在协议字段运用值17,指出该数据是从UDP 协议来的,这个进程便是IP 数据包的封装进程如图3(a)所示.这个IP 数据包再传递给数据链路层.数据链路层收到IP 数据包之后,加上自己的首部(或许还有尾部),再传递给物理层.物理层把这些位编码为电信号或许光信号,然后把它发送到长途的机器.