基于OMAP平台的TCP/IP开发及实现
如果是:则调用UDP包接收函数,用各种条件对其进行过滤,提出UDP数据及各种有用信息,根据端口号提交给应用进程处理,本层的另一个主要函数是UDP发送函数,实现封装UDP包(包括载入UDP数据,计算并填入UDP首部信息),最后调用IP发送函数,较由IP层处理。
(6)TCP层:与UDP不同,TCP主机要进行数据通信之前,必须与对方建立连。与几个主机通信,就要建立几个连接。然而,若要知道接收到的TCP包属于哪个连接且使得几个不同的连接之间独立工作、互不干扰,则需要定义TCP的控制模块,这里用一个结构体数组实现,存放所有关于连接的信息。
![](../img/eep/emb/emb-45554vsqb0drnjyw.jpg)
处理TCP层函数,判断接收包的类型,如果是TCP包,则调用TCP接收函数,TCP接收函数用指定条件进行过滤,找到该包所属的连接或完成一个新连接的被动打开,根据TCP的状态转换则完成11种状态的转移,并且实现了多路数据同时、双向的传输。
TCP的发送函数包括主动打开、主动关闭(由上层调用完成新连接的主动打开,或主动关闭一个已建立的连接)和发送控制包(用于TCP连接的建立与终止,会在TCP接收函数中调用,从而实现TCP的转换)三个函数。
TCP层还实现了两个定时器,TCP重传定时器函数可提供服务可靠性的有效保障;TCP保活定时器能够避免资源的浪费。
3.2 程序特点分析
(1)简单性:4.4BSD-Lite版的完整TCP/IP内核实现大约有15 000行,而本程序源代码约有1 400行,更适合嵌入式系统的应用。
(2)可重用性:本程序分层清晰。对于不同的嵌入式系统,可能使用的CPU和以太网卡不同,这就需要针对其特点的以太网层设计,而ARP、IP、UDP、TCP则不需要改动。
(3)可拓展性:TCP/IP协议是底层网络协议,本程序留有很好的接口,可在其上构件更高层的网络协议,包括H.323协议、ftp、telnet。
4 在OMAP平台上的移植
4.1 单片以太网控制器LAN91C96
LAN91C96是SMSC公司生产的专门用于嵌入式产品的10Mbps以太网控制器,具有性能优良,功耗低及尺寸小的特点,如图4所示。
![](../img/eep/emb/emb-45555cb41fyerz5c.jpg)
6KB的RAM:用来存放数据包。
MMU:对RAM进行有效管理,为接收和发送包在RAM中分配存储空间。
ARBITE:使MMU和RAM与CPU、CSMA很好地连接。
CSMA/CD模块:集成了IEEE 802.3 MAC层协议,负责监听网络情况和地址过滤。若目的地址是LAN91C96的地址、广播地址或多播地址,则接收此数据包,否则抛弃。
ENDEC:负责与10Mbps为以太网物理媒体的连接。
LAN91C96 采用地址映射方式,通过访问Innovator为的指定地址对其存储器访问。LAN91C96的寄存器在Innovator内存中的地址分配为:0x08000300-0x0800030F。寄存器共有4组(BANK0-BANK3),使用相同的地址,通过BANK_SELECT寄存器选择。
4.2 移植过程
先实现该网卡芯片的驱动程序,再用它替换PC模拟器的以太网层,程序驱动主要包括以下三个部分:
(1)初始化:主要为Lan91C96的各寄存器填入正确的初始值使其正常工作。
(2)接收:如图5所示,由CSMA(载波侦听模块)接收到符合地址要求的后,MMU(存储器管理单元)为其请求在RAM中分配存储空间并分配一个编号,DMA 将其存入RAM。接着在接收数据的前面封装STATUS的化COUNT字节信息,如果CRC检测正确,则将其编号放入接收FIFO,如果接收FIFO不为空,则RCV_INT(接收中断标识)被设置。检查接收中断寄存器状态,如果就接收中断,对应其编号,上层协议便可以取出数据了,取出后,将该数据编号从 FIFO中清除。
![](../img/eep/emb/emb-455560saeluaqawl.jpg)
状态字可以从RCR寄存器中读取,它反应了接收过程出现的各种措施,如CRC错误、接收帧过长等,数据包的编号从FIFO_PORTS寄存器中获得,而数据指针可从POINTER寄存器中获得,数据信息从DATA寄存器中得到,根据这些信息将接收数据包复制到CPU内存,供上层使用,接收函数的主要流程如图6。
![](../img/eep/emb/emb-45557vzkjabykwuw.jpg)
(3)发送:图7描述了发送数据包FIFO中的排队过程,首先MMU在RAM中分配一定字节的存储空间,然后,将分配结果寄存器中的编号放入PNR 寄存器,写数据指针寄存器POINTER并将上层数据封装后拷入DATA寄存器,根据其编号放入发送FIFO,排队的包将自动发出,发出包的编号接着进入发送完成FIFO。如果发送成功,则存储空间自动释放;否则释放存储空间并将其重新排队。
![](../img/eep/emb/emb-45558uumvwnb22bc.jpg)
5 实验结果
5.1 内存资源占用量
运行该TCP/IP协议栈需要3MB内存,而Innovator体32MB SDRAM 和32MB Flash,内存占用率为:3M/64M=4.7%,完全适用于嵌入式系统。
5.2 数据传输可靠性
TCP 利用以下机制纠错。数据的传输过程中的误码:检验和机制与重传机制,数据的重复,在接收端会自动舍弃已经接收过的数据包,并且不发ACK,故不会发生一个数据包接收多次的情况
- MiniGUI在OMAP5912上的移植(07-27)
- 基于ARM核与DSP核组成的OMAP5910嵌入式系统(02-28)
- 基于移动应用处理器OMAP3530的视频解决方案(06-04)
- 基于DSP硬解码的低成本高清屏媒系统(05-14)
- 基于OMAP3530平台的车道线识别检测的实现(01-28)
- 基于OMAP的设计汇总,包括示波器、监护仪、人机接口等(01-28)