嵌入式视频通信系统由视频数据采集、处理和通信等部件组成,需要嵌入式网络协议栈的支持。中央处理器采用dsp,占用了大量资源,而网络协议栈能够使用的运算资源、内存资源有限,并且缺乏操作系统给网络协议栈的实现带来困难。针对视频监控应用,本文提出了在ti公司的高性能dsp芯片tms320dm642(以下简称dm642)上实现精简的tcp/ip协议栈的解决方案,阐述了其硬件接口电路的设计及软件实现。
1 tcp/ip协议栈分析
嵌入式tcp/ip协议栈具有tcp/ip协议栈的基本功能,它运行于以太网环境下,其软件模型如图1所示。
最底层是物理层,定义了以太网控制器的工作方式,实现以太网帧的封装、发送和接收。本系统使用intel公司的以太网收发器lxt97la。
第二层是网络层,完成ip数据报的封装和转发,并根据帧的类型(icmp、tcp或udp等)进行相应处理。ip协议提供了一种高效、不可靠和无连接的传输方式。本系统不支持对ip包的分片和重组。地址解析协议arp实现ip地址到mac地址的动态转换。icmp协议定义了一套差错报文和控制报文,在该系统用于测试网络的连通情况。
第三层是传输层,完成数据报的传输控制。该层主要包括tcp协议和udp协议。tcp提供可靠的数据传输,而udp提供不可靠的数据传输。与udp相比,tcp的可靠性是通过非常复杂的措施以及由此增加的开销为代价获得的。监控终端传输的数据大部分是图像编码数据,这些数据对实时性和传输率的要求高,而对数据可靠性的要求相对较低,因此本系统将udp协议作为传输层协议。
最上层是应用层,解决用户特定的应用,主要包括http、ftp、telnet、smtp、snmp、dns等internet协议。在该层主要实现视频编码数据的传输。
2 硬件设计
2.1 系统结构
硬件系统结构如图2所示。
dm642从以太网物理层设备phy接收mac帧,实现tcp/ip协议栈的网络层、传输层和应用层的相关协议。以太网物理层设备完成以太网帧的发送和接收,包括mac数据帧的收发、crc(循环冗余检测)编码/校验、曼彻斯特编解码、载波监听、错误和冲突检测等。以太网phy通过隔离变压器和rj45接口连接至以太网。eeprom用来存放本地mac地址。
2.2 dsp以太网接口设计
dm642是ti公司推出的一款面向数字多媒体应用的dsp,因集成了以太网mac接口,所以需要一个物理层网络处理芯片。本文采用了intel公司的lxt971a芯片。dm642的mii接口不支持txer,它通过crc包指出网络包错误,因此将lxt97la的txer引脚直接接低电平置为无效。
dm642与lxt971a的连接如图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/bios提供api接口。协议栈软件结构如图4所示。
虚线框内是移植的lwip协议栈,实现应用程序、操作系统及物理层设备驱动的api。在lwip原有协议的基础上,实现底层网络驱动和硬件驱动api,将网络上层协议与通信链路的物理接口隔离。同时封装协议栈中用到的事件管理、任务管理、时间管理等系统函数实现系统api功能。通过dsp/bios可以实现任务线程操作、存储器分配、包缓冲管理、定时器管理等。
网络控制模块是协议栈控制的核心,控制tcp/ip协议栈与外界的交互,完成tcp/ip协议栈和底层设备驱动的初始化;并调用用户配置函数获取系统配置,为底层设备驱动提供接口,调度驱动事件进入tcp/ip栈;在退出时卸载系统配置并清除驱动。
3.2 协议栈接口设计
tcp/ip协议接口包括与实时操作系统的交互、驱动程序接口、进程间通信、存储管理、缓冲区管理、定时器和事件管理、配置与控制等。
3.2.1 操作系统接口
dsp/bios是为需要实时调度和同步以及主机/目标系统通信和实时检测的应用而设计的实时操作系统。在协议栈中,通过设计操作系统。api,为dsp/bios提供接口函数,完成操作系统的配置,提供任务、信号灯、存储器分配、缓冲区管理等支持。
在协议栈内部定义