首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于OMAP的嵌入式TCP/IP开发(1)

基于OMAP的嵌入式TCP/IP开发(1)

随着人们对智能化产品需求的增加,未来的嵌入式产品,包括各种家电、通信、PDA、仪器仪表等设备正逐渐走向网络化,以共享互联网中庞大的信息资源,因此使嵌入式设备的网络化开发有广阔市场前景,由于嵌入式硬件资源有限,而传统的TCP/IP等网络通信协议对计算机存储器、运算速度的要求较高,所以不能直接应用,为此,必须开发一套适合嵌入式系统的、高度优化的、最为精简的TCP/IP协议栈。
开放式多媒体应用平台OMAP(Open Multimedia Application Platform)是美国德州仪器公司推出的高度集成的软硬件平台。OMAP具有独特的双芯结构,结合了DSP与RISC内核,可为无线多媒体设备提供独一无二的性能和功耗优势,OMAP可连接十分丰富的外围设备,包括USB、摄像头、声音设备、视频设备、网络设备等,OMAP拥有开放式体系结构,其应用环境完全可编程。
软件协议的设计与实现在很大深度上决定了通信终端的质量,基于OMAP的3G移动终端软件协议结构由信令协议栈和应用业务协议栈组成,如图1所示,TCP/IP协议栈位于应用业务协议栈的底层,为上层的H.323协议栈提供基础与服务,其性能质量将直接决定整个通信终端软件系统的运行质量。因此,针对嵌入式系统联网的发展方向,为OMAP系统其设计一套高效、简洁的TCP/IP协议,对其应用具有十分重要的意义。

1 开发方案
PC上有功能强大的VC平台和网络分析工具(如Sniffer)便于调试,其设计不针对任何一个嵌入式芯片,具有较好的通用性和可移植性,在PC机上实现的TCP/IP协议,除了以太网层要结合OMAP平台的网卡硬件重写外,基本上可以直接移植到OMAP平台上,不需要再做大的改动,作为一个通信程序,必须需要两端程序同时调试,在PC机上编好的程序能度OMAP平台上程序的调试提供可靠的帮助,因此,协议开发采用先模拟再移植、先整体再部分的设计思路,而协议各层实现的顺序为自下而上。具体步骤是:
(1)在PC机上的Windows操作系统及VC6.0开发平台上,实现嵌入式系统TCP/IP协议族的模拟器,该模拟器应该能实现TCP/IP协议的基本功能,包括以太网驱动程序、ARP、IP、UDP、TCP等,并且实现的ARP、IP、UDP、TCP层的程序应该通用于各嵌入式系统并可移植。
(2)将该模拟器移植到OMAP开发平台,用其以太网卡的驱动程序替换原模拟器的链路层程序,在TI提供的CCS平台上最终实现基于OMAP的TCP/IP协议。
2 开发平台
OMAP的多媒体开发平台Innovator主要由4个模块组成:PM(处理器模块)、IM(接口模块)、M(扩展模块)、BOB(主连接板)。OMAP处理器在PM上,以太网卡在BOB上,可以通过Innovator上的OMAP1510芯片的ARM微处理器对单片以太网控制器LAN91C96的工作进行控制,实现以太网帧的收发,并通过CCS对程序调试,图2为OMAP平台调试环境。

3 在PC上实现协议的基本模块
3.1 主要模块介绍
(1)主流程:首先对TCP/IP协议族的各层初始化,成功则进入主循环,主循环采用"中断+循环)"结构,简单且分层清晰,中断作为应用层发出命令,调用下层的入口。对于接收到的以太网帧,则由下到上分别进入各层进行处理。协议实现主流程如图3所示。

(2)PC上的以太网层:在内存中开辟接收和发送两个相同的循环缓冲区,用于存放接收和发送的以太网帧。 Winpcap软件是基于Windows平台的一个网络包工具,它提供一个系统内核级的动态链接库Packet.dll作为标准的API,具有独立于操作系统的编程接口。利用其提供的API可直接联系网卡驱动与已定义的循环缓冲区,将缓冲区中的数据发出,并将网卡接收的数据存入缓冲区。
(3)ARP层,在内存中开辟一块循环存储区域用于存放已知的IP-MAC对应表,该表可以由上层添加,在接收到ARP应答时会自动添加,也可以上层清空。处理ARP层函数的过程中:根据以太网首部协议字段过滤出ARP包,针对ARP请求与ARP应答进行不同的处理,应答对方的请求,记录对方的应答。
(4)IP层:根据以太网首部的帧类型标注判断接收到的是不是IP包来处理IP层函数,如果是:则调用IP包的接收函数,对给收到的IP包用各种条件进行过滤,对于满足条件的包获取其长度与指针信息供上层使用。本层另一个主要函数是IP包发送函数,由上层调用进行IP封装。
IP的检验和仅包括IP首部,长度一般为20字节(如果没有选项)。在接收端,丢弃检验和不为OxFFFF的包,在发送端,将计算所得值的反码填入检验和字节,由于主机和网络对数据中高低字节默认的顺序不同,在读写包中的16、32数据时,应该先进行高低字节的交换。
(5)UDP 层,处理UDP层函数应根据IP首部的协议字段判断是否UDP包。如果是:则调用UDP包接收函数,用各种条件对其进行过滤,提出UDP数据及各种有用信息,根据端口号提交给应用进程处理,本层的另一个主要函数是UDP发送函数,实现封装UDP包(包括载入UDP数据,计算并填入UDP首部信息),最后调用IP发送函数,较由IP层处理。
(6)TCP层:与UDP不同,TCP主机要进行数据通信之前,必须与对方建立连。与几个主机通信,就要建立几个连接。然而,若要知道接收到的TCP包属于哪个连接且使得几个不同的连接之间独立工作、互不干扰,则需要定义TCP的控制模块,这里用一个结构体数组实现,存放所有关于连接的信息。


返回列表