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

发布者:cocolang最新更新时间:2006-08-07 来源: 电子技术应用关键字:寄存器  以太网  函数 手机看文章 扫描二维码
随时随地手机看文章

随着人们对智能化产品需求的增加,未来的嵌入式产品,包括各种家电、通信、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的控制模块,这里用一个结构体数组实现,存放所有关于连接的信息。


?

处理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所示。

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中清除。

状态字可以从RCR寄存器中读取,它反应了接收过程出现的各种措施,如CRC错误、接收帧过长等,数据包的编号从FIFO_PORTS寄存器中获得,而数据指针可从POINTER寄存器中获得,数据信息从DATA寄存器中得到,根据这些信息将接收数据包复制到CPU内存,供上层使用,接收函数的主要流程如图6。

(3)发送:图7描述了发送数据包FIFO中的排队过程,首先MMU在RAM中分配一定字节的存储空间,然后,将分配结果寄存器中的编号放入PNR寄存器,写数据指针寄存器POINTER并将上层数据封装后拷入DATA寄存器,根据其编号放入发送FIFO,排队的包将自动发出,发出包的编号接着进入发送完成FIFO。如果发送成功,则存储空间自动释放;否则释放存储空间并将其重新排队。

5 实验结果

5.1 内存资源占用量

运行该TCP/IP协议栈需要3MB内存,而Innovator体32MB SDRAM 和32MB Flash,内存占用率为:3M/64M=4.7%,完全适用于嵌入式系统。

5.2 数据传输可靠性

TCP利用以下机制纠错。数据的传输过程中的误码:检验和机制与重传机制,数据的重复,在接收端会自动舍弃已经接收过的数据包,并且不发ACK,故不会发生一个数据包接收多次的情况,数据包的丢失,接收端在接收完一段数据后,会计算下一个预期数据的序号,如果不符合就不发ACK,从而导致发端重发,避免了数据包的丢失,经测试,在未发生拥塞情况下,传输的误码率几乎为0。

5.3文件最大平均传输速率

下面就本程序所实现的利用TCP进行文件传输功能,给出不同情况下的最大传输速率,实验环境为10Mbps以太网。

理想状态下的理论最大吞吐量:假定发送方传输两个背对背、满长度的TCP数据,接收方为其发出两个ACK,每包中用户数据量为1460位,总数据量为1538位,故最大的用户数据吞吐量为:

本实验测得文件的平均传输速率随着TCP连接数的增多有如图8所示的曲线变化,前半段随着连接数的增加成线性增长,后半段由于出现了网络拥塞,整体的平均速率反而有所下降。

实验结果与理论最大吞吐量有所差距,原因在于:

(1)理论上只是一种理想的状态,现实中难以达到。

(2)受CPU处理速度及文件传输过程的读、写文件操作的限制。

(3)本程序采用的数据传输机制是当收到上一个包的ACK之后再发送下一个数据包,这样避免了对接收数据的排序,提高了可靠性,但数据的传输速度会受到制约。

关键字:寄存器  以太网  函数 引用地址:基于OMAP的嵌入式TCP/IP开发

上一篇:基于DSP CCS 2.2实现指纹识别预处理系统
下一篇:基于DSP的智能电机保护器设计

推荐阅读最新更新时间:2024-05-02 20:25

基于并行流水线结构的可重配FIR滤波器的FPGA实现
1 并行流水结构FIR的原理 在用FPGA或专用集成电路实现数字信号处理算法时,计算速度和芯片面积是两个相互制约的主要问题。实际应用FIR滤波器时,要获得良好的滤波效果,滤波器的阶数可能会显著增加,有时可能会多达几百阶。因此,有必要在性能和实现复杂性之间做出选择,也就是选择不同的滤波器实现结构。这里运用并行流水线结构来实现速度和硬件面积之间的互换和折衷。 在关键路径插入寄存器的流水线结构是提高系统吞吐率的一项强大的实现技术,并且不需要大量重复设置硬件。流水线的类型主要分为两种:算术流水线和指令流水线。对FPGA设计,逻辑功能是面向特定应用的,因此,采用需要较少额外控制逻辑的算术流水结构。 流水线结构就意味着将数字处理算法分割成
[嵌入式]
是德科技推出千兆级车载以太网测试解决方案
推出千兆级车载以太网测试解决方案,为实现标准一致性和产品快速上市保驾护航 扩展车载以太网软件,为车载网络设计和验证团队打造管理车载以太网的千兆级标准 2021年4月21日,中国北京——是德科技公司(NYSE:KEYS)进一步扩充其高级车载以太网软件家族,帮助汽车行业的工程师、设计人员和制造商开发高质量、高性能的产品,从而提升驾驶安全性,并为新兴的先进驾驶辅助系统(ADAS)提供支持。是德科技提供先进的设计和验证解决方案,旨在加速创新,创造一个安全互联的世界。 全面覆盖车载以太网标准 新一代 ADAS 系统要求摄像头和雷达系统具备更高的分辨率,因此需要数据速率更高、带宽更大的网络连接。车载以太网支持高速数据通信,可以满足现
[测试测量]
是德科技推出千兆级车载<font color='red'>以太网</font>测试解决方案
ARM指针寄存器 -程序计数器PC、堆栈指针SP
堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆栈一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现。 堆栈的实现方法: 在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP---Stack Pointer)实现做一次调整,SP 总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。 堆栈
[单片机]
关于51单片机中C语言编写的精确延时函数
有些特殊的应用会用到比较精确的延时(比如DS18B20等),而C不像汇编,延时精准度不好算。本人经过反复调试,对照KEIL编译后的汇编源文件,得出了以下几条精确延时的语句(绝对精确!本人已通过实际测试),今天贴上来,希望对需要的朋友有所帮助 sbit LED = P1^0; // 定义一个管脚(延时测试用) unsigned int i = 3; // 注意i,j的数据类型, unsigned char j = 3; // 不同的数据类型延时有很大不同 //-----------------各种精确延时语句----------------------------------- while( (i--)!=1 ); //
[单片机]
51单片机的工作寄存器R0~R7位于内部RAM什么位置
51单片机的工作寄存器一共有32个,为RAM中的00H--1FH单元,分为4组,分别是 0组:00H--07H单元、 1组:08H--0FH单元、 2组:10H--17H单元、 3组:18H--1FH单元, 每组的8个单元分别对应R0--R7。这四组中只有一组是当前工作寄存器,程序中使用的就是当前工作寄存器中的8个单元。当前工作寄存器是由程序状态字PSW中的第三第四位决定的。在PSW中,的PSW4、PSW3两位组合的00、01、10、11四个状态,分别指定工作寄存器的0组、1组、2组、3组,只需要用指令改变PSW的这两位状态,就可以改变当前工作寄存器组。这样,实际上就是有32个工作寄存器可以选用。
[单片机]
【STM32+W5500】 21,移植说明,以太网关键函数,
0.移植说明,w5500移植文件 Ethernet和Internet里面包含的文件就是以太网五层模型中的应用层 应用层协议:HTTP,FTP,SMTP,TFTP,Telent, MQTT 支撑协议:DNS,SNMP HTTP使用TCP而不是UDP. MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。 0-1,Ethernet可以认为是对W5500芯片硬件的配置,全部添加
[单片机]
【STM32+W5500】 21,移植说明,<font color='red'>以太网</font>关键<font color='red'>函数</font>,
高功率以太网供电,让物联网新应用成为可能
电源和联接是物联网 (IoT) 的主要挑战,会影响各种电气和电子设备。以太网供电 (PoE) 的新标准可以同时解决这两大挑战,从而可以在网络边缘进行更多处理,并提高最新联接系统的性能。 物联网全都关乎联接。将传感器、执行器和监控系统联接到“云”,可以汇总从世界任何地方访问的数据。分析这些数据可以早期识别潜在的问题,提供优化系统并降低能源成本的新方法。在一条电缆中结合数据和联接性可以使整个过程更高效。 虽然较小的设备可以由电池供电并使用无线联接,但在有电噪声的工厂环境中,可靠性可能是个问题。随着IoT端点变得越来越耗电和越来越大数据量,它们将需要可靠的电源和数据联接。但是,将所有这些数据反馈回云,在所需的数据带宽以及对
[电源管理]
高功率<font color='red'>以太网</font>供电,让物联网新应用成为可能
常用的串口相关寄存器介绍
常用的串口相关寄存器: USART_SR状态寄存器: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); COPY USART_DR数据寄存器: void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); uint16_t USART_ReceiveData(USART_TypeDef* USARTx); COPY USART_ BRR波特率寄存器: void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef*
[单片机]
常用的串口相关<font color='red'>寄存器</font>介绍
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved