基于TMS320DM642的嵌入式TCP/I P协议栈的实现(4)
扫描二维码
随时随地手机看文章
嵌入式视频通信系统由视频数据采集、处理和通信等部件组成,需要嵌入式网络协议栈的支持。中央处理器采用DSP,占用了大量资源,而网络协议栈能够使用的运算资源、内存资源有限,并且缺乏操作系统给网络协议栈的实现带来困难。针对视频监控应用,本文提出了在TI公司的高性能DSP芯片(以下简称DM642)上实现精简的TCP/IP协议栈的,阐述了其硬件的设计及软件实现。
1 TCP/IP协议栈分析
嵌入式TCP/IP协议栈具有TCP/IP协议栈的基本功能,它运行于以太网环境下,其软件模型如图1所示。
最底层是物理层,定义了以太网控制器的工作方式,实现以太网帧的封装、发送和接收。本系统使用公司的以太网收发器LXT97lA。
第二层是网络层,完成IP数据报的封装和转发,并根据帧的类型(、TCP或UDP等)进行相应处理。IP协议提供了一种高效、不可靠和无连接的传输方式。本系统不支持对IP包的分片和重组。地址解析协议ARP实现IP地址到MAC地址的动态转换。协议定义了一套差错报文和控制报文,在该系统用于测试网络的连通情况。
第三层是传输层,完成数据报的传输控制。该层主要包括TCP协议和UDP协议。TCP提供可靠的数据传输,而UDP提供不可靠的数据传输。与UDP相比,TCP的可靠性是通过非常复杂的措施以及由此增加的开销为代价获得的。监控终端传输的数据大部分是图像编码数据,这些数据对实时性和传输率的要求高,而对数据可靠性的要求相对较低,因此本系统将UDP协议作为传输层协议。
最上层是应用层,解决用户特定的应用,主要包括、FTP、、、、DNS等协议。在该层主要实现视频编码数据的传输。
作为一类特殊的计算机系统, 嵌入式系统通常由嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。嵌入式处理器是嵌入式系统的核心部件,它可分为嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor)和高度集成的嵌入式SoC(System on Chip)。嵌入式外围设备是指嵌入式硬件系统中除中心控制部件以外的存储、通信、保护、调试、显示等其它辅助部件。嵌入式操作系统一般在比较大型或需要多任务的应用场合才考虑使用,它可方便嵌入式应用软件的设计,大大提高嵌入式系统的功能,但同时也要占用宝贵的嵌入式资源。嵌入式应用软件和普通的应用软件有一定的区别,它是针对特定的实际专业领域、基于相应的嵌入式硬件平台、能完成用户预期任务的计算机软件。
嵌入式处理器有许多种流行的处理器核,本文主要介绍采用Samsung公司基于ARM公司32位RISC的ARM7TDMI核的S3C44B0X处理器来进行Socket通信的软硬件平台的设计和实现方法。
S3C44B0X是高性价比、高性能的微控制器,它采用ARM7TDMI核,可工作在66MHz。ARM7TDMI是一种32位嵌入式RISC处理器,但也配备了16位压缩指令集Thumb。它支持片上调试,允许处理器响应调试请求暂停,芯片内的增强型乘法器(multiplier)可进行两个32位数相乘从而直接产生64位结果,也可为嵌入式ICE硬件提供片上断点和调试点支持。此外,它还可以提供三级流水线及冯?诺依曼结构。实际上,S3C44B0X已在ARM7TDMI内容基础上扩展了一系列完整的通用外围器件。图1所示是一种嵌入式网络通信系统的硬件体系结构。
3 软件设计
3.1 TCP/IP协议栈在DSP上的实现
根据TCP/IP协议栈的软件模型,将LwlP(TCP/IP)协议栈移植到DSP上。LwIP是瑞士计算机科学院Adam Dunkels等开发的一套用于嵌人式系统的开放源代码TCP/IP协议栈。它既可以移植到操作系统上,又可以在无操作系统的情况下独立运行。LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,它只需要几十KB的RAM和40KB左右的ROM便可以运行。因此LwIP协议栈适合在低端嵌入式系统中使用。
使用该协议栈前,需要针对系统采用的底层网络硬件和操作系统作相关移植工作,并需对协议栈裁剪和优化,以适应嵌入式系统的特定网络应用需求。LwIP移植关键是底层硬件驱动函数和封装协议栈使用到的系统函数的编写,为DSP/提供API接口。协议栈软件结构如图4所示。
虚线框内是移植的LwIP协议栈,实现应用程序、操作系统及物理层设备驱动的API。在LwIP原有协议的基础上,实现底层网络驱动和硬件驱动API,将网络上层协议与通信链路的物理接口隔离。同时封装协议栈中用到的事件管理、任务管理、时间管理等系统函数实现系统API功能。通过DSP/可以实现任务线程操作、存储器分配、包缓冲管理、器管理等。
网络控制模块是协议栈控制的核心,控制TCP/IP协议栈与外界的交互,完成TCP/IP协议栈和底层设备驱动的初始化;并调用用户配置函数获取系统配置,为底层设备驱动提供接口,调度驱动事件进入TCP/IP栈;在退出时卸载系统配置并清除驱动。
3.2 协议栈接口设计
TCP/IP协议接口包括与实时操作系统的交互、驱动程序接口、进程间通信、存储管理、缓冲区管理、器和事件管理、配置与控制等。
3.2.1 操作系统接口
DSP/是为需要实时调度和同步以及主机/目标系统通信和实时检测的应用而设计的实时操作系统。在协议栈中,通过设计操作系统。API,为DSP/BIOS提供接口函数,完成操作系统的配置,提供任务、信号灯、存储器分配、缓冲区管理等支持。
在协议栈内部定义了一个配置结构用于操作系统的配置,通过它对协议栈的优先级及大小进行配置。
与一般的桌面系统不同,嵌入式实时系统需要用户根据需要分配存储区。在该系统中,将协议栈代码存储在外部,包缓冲区分配在外部。
TCP/IP栈和设备驱动使用包缓冲区发送及接收网络包数据。标准的以太网缺省帧为1518字节(包括帧头和循环冗余校验)。系统采用一个由32个缓冲区构成的缓冲池,每个缓冲区的大小为1664字节。这样分配可以对齐Cache边界,保证冲洗(flush)Cache时,不会与缓冲区发生冲突。
3.2.2 驱动程序接口
驱动程序完成芯片和器的初始化及各种参数设置,并提供发送、接收数据的接口。其软件操作流程有查询模式和中断模式。为提高响应速度采用中断模式,同时尽量把大部分操作放在主流程中执行,以缩减中断处理程序的操作。
3.2.3 事件管理
协议栈的事件调度管理在网络控制模块中实现,用于定时器到时、缓冲区入队列、接收数据包等管理。在协议栈完成设备初始化后调用调度程序。
该模块定义了一种内核模式的操作方式,该模式处于最高优先级。当网络事件发生时,进入内核模式运行。通过调用系统函数llEnter()和llExit()进入或退出内核模式。事件调度的基本流程如下:
Static void NetScheduler()
{
SetSchedulingPriority(); //设定调度程序的优先级
while(!NetHaltFlag)
{
WaitForEvents(); //中断模式下,等待事件中断
ServiceDeviceDrivers();//设备驱动服务,获取事件
//在内核模式下处理事件
If(StackEvents)
{
llEnter();//进入内核模式
ServiceStackEvents();// 处理事件
llExit();// 退出内核模式
}
}
}
3.3 网络控制初始化流程
由于TCP/IP栈需要操作系统完成其初始化,因此必须硬件诊断完成且DSP/BIOS初始化完成之后对网络控制进行初始化。
在调用TCP/IP协议相关函数前,先初始化操作系统环境,再创建一个新的配置,或从只读存储器中导出一个已存在的配置,然后把配置句柄及回调函数start、stop和IP地址变换操作传递给协议栈。直到网络关闭时,应用程序关闭在start中调用的操作并释放分配的资源,退出网络协议栈,网络控制初始化流程如图5所示。
图5 网络控制初始化流程
本文在DM642芯片上实现了一个高度精简的嵌入式TCP/IP协议栈,论述了协议栈的硬件接口设计和软件实现。可以方便地在DSP上实现网络视频的传输,本协议栈目前已成功应用于高速公路的数字视频中,运行状况良好,该协议栈的实现对数字视频广播系统、视频点播系统等实时多媒体处理的应用也有借鉴作用。