基于TMS320DM642的嵌入式TCP/I P协议栈的实现
扫描二维码
随时随地手机看文章
嵌入式视频通信系统由视频数据采集、处理和通信等部件组成,需要嵌入式网络协议栈的支持。中央处理器采用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等协议。在该层主要实现视频编码数据的传输。
2 硬件设计
2.1 系统结构
硬件系统结构如图2所示。
DM642从以太网物理层设备PHY接收MAC帧,实现TCP/IP协议栈的网络层、传输层和应用层的相关协议。以太网物理层设备完成以太网帧的发送和接收,包括MAC数据帧的收发、CRC(循环冗余检测)编码/校验、曼彻斯特编解码、载波监听、错误和冲突检测等。以太网PHY通过隔离和 接口连接至以太网。用来存放本地MAC地址。
2.2 DSP以太网接口设计
DM642是TI公司推出的一款面向数字多媒体应用的DSP,因集成了以太网MAC接口,所以需要一个物理层网络处理芯片。本文采用了公司的芯片。DM642的MII接口不支持TXER,它通过CRC包指出网络?砦螅?虼私獿XT97lA的TXER引脚直接接低电平置为无效。
DM642与的连接如图3所示。
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 接口。
虚线框内是移植的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中调用的操作并释放分配的资源,退出网络协议栈,网络控制初始化流程如图4所示。
图4 网络控制初始化流程
本文在DM642芯片上实现了一个高度精简的嵌入式TCP/IP协议栈,论述了协议栈的硬件接口设计和软件实现。可以方便地在DSP上实现网络视频的传输,本协议栈目前已成功应用于高速公路的数字视频中,运行状况良好,该协议栈的实现对数字视频广播系统、视频点播系统等实时多媒体处理的应用也有借鉴作用。