TM1300嵌入式多媒体网络通信系统的设计与实现
摘要:提出了一种利用TriMedia嵌入式微处理器TM1300为CPU的多媒体网络系统的整体硬件设计方案。介绍了利用设备库和BSP分层概念在系统中音视频外设编程的应用,重点介绍基于pSOS实时操作系统网络部件pNA+的网络驱动程序的基本设计方案及网络编程模型。
关键词:嵌入式微处理器 实时操作系统 BSP(Board Suppport Package) 网络驱动
多媒体技术与网络技术的有机结合满足信息化社会人们对各种信息的大量需求。网络多媒体技术的迅速发展,加速了多种网络多媒体技术的应用,如:视频会议系统、数字视频监控系统、多媒体电子邮件、视频点播(VOD)、远程多媒体数据库等。
随着微处理器技术的发展和嵌入式操作系统的日益广泛的应用,嵌入式系统以其高速响应、高度自动化、功能易于扩展等独特优势已成为计算机工业新的增长热点。而且,嵌入式设备接入Internt已经成为不可避免的趋势,并显示出美好的应用前景。嵌入式系统在多媒体通信应用领域同样得到了很好的应用,各种基于嵌入式Internet技术的频服务器、多媒体远程监控系统已经成功应用于多种场合。
本文论述一种具有网络通信和多媒体处理功能的嵌入式系统的设计实现方法。
1 系统总体框架设计
基本的多媒体通信系统一般应该具有各种音视频输入输出设备,并具有高速网络通信功能。本系统采用Philips公司TriMedia系列的TM1300媒体处理器作为主核来构造。其系统设计的各个功能模块如图1所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1.1 TM1300媒体处理器简介及其系统设计特点
TM1300是一种具高质量数字视频和音频应用处理能力的媒体处理器。它拥有接线员大的超长指令字(VLIW)核DSP CPU,独立于DSP CPU的DMA方式工作的音视频输入输出接口,32位高带宽数据总线将所有的片上模块单元连接,如PCI、SDRAM、图像协处理器(ICP)等,使数据处理极为快速方便。另外,其强大的面向多媒体应用的指令系统和丰富的库函数使开发者能快速完成软件编程。
TM1300的PCI/XIO接口控制和复用逻辑使其可以用于为PC机环境设计的PCI音视频处理加速卡,也可以用于独立工作的嵌入式系统。在系统设计中,既可以访问PCI外设,如PCI网络接口芯片,又可以访问各种8位外设,如ROM、8位MCU、程序存储器Flash Memory等。
1.2 系统框图说明及芯片典型选型
本系统是一种嵌入式系统,它能完成视频和音频数据的采集与输出功能,并能通过高速网络传递压缩编码后的音视频数据流。TM1300具有强大的多媒体数据处理能力,它在系统中可以完成音视频数据的压缩编码或解码,同时处理网络数据的收发,并可以通过pSOS实时操作系统协调和调度整个系统的任务,从而形成强大的多媒体音视频数据处理和传输系统。
当然,本系统框图仅旨在一般意义上的系统,在实际应用中可以按照具体要求裁剪或添加其他外设,如UART控制器、Modem控制器模块等,使系统具有用户特定的功能。
(1)TM1300的视频输入接口提供8~10位视频A/D转换接口,其最高采样率可以达81MHz。可以采用Philips公司SAA7113、SAA7114等视频解码芯片(Video Decoder)来完成系统各种格式的视频信号采集。
(2)视频输出接口提供8位的视频数据输出口,可以完成解码后的视频数据输出,可以采用Philips公司的视频编码芯片(Video Encoder)完成视频数据的D/A转换。
(3)音频信号采集和输出的数据都是通过TM1300的标准I2C总线接口来传输的。可以用Philips公司的UDA1344音频编解码器(Audio Codec)完成音频数据的A/D和D/A转换。
(4)基于网络接口芯片可以采用常用的Realtek公司的RTL8139C,它是具有10/100Mbps自适应功能的以太网收发控制器,是目前应用最为广泛的一种网络接口芯片。设计时,应为其配置启动EEPROM,如93LC46、93LC56等。javascript:window.open(this.src);" style="cursor:pointer;"/>
(5)启动EEPROM一般使用符合I2C的器件,如24LC16、24LC32等。因为除了要存放系统启动设置信息外,还要存放用于系统自举L1代码,EEPROM不得小于2K字节空间。EEPROM具体内容格式参照TM1300芯片资料文档。
特别值得注意,设计本系统PCI总线与设计PCI卡时不同的是,TM1300使用PCI总线访问时总线仲裁需仲裁器。这是因为在基于PC机主板和PCI桥接芯片上已经有总线仲裁逻辑,不需要另外再作处理。嵌入的TM1300系统则需要仲裁来处理PCI总线的请求和应答,具体的逻辑设计应参考PCI规范相关内容。另外,嵌入式系统需要通过JTAG口进行调试和仿真,并要在系统中加入程序代码存储器Boot Flash。
2 音视频外设编程的分层模型及应用
系统中的视频A/D、D/A芯片单元通常连接在TM1300的I2C总线上,其初始化和设置是通过I2C总线访问其内部寄存器实现,音频处理芯片则通过I2C接口总线与TM1300连接。TM1300正是通过这些总线对其进行初始化设置。
在软件上,TriMedia层次化软件架构TSA引入设备库层(Device Library Layer)概念,该层为板级库到应用程序之间提供了一个公共接口。设备库输出两个接口,其架构由图2所示。
在设备库中,基本的API调用函数和功能描述在表1中给出。
表1 设备库API
函数名 | 功能说明 |
devGetCapabilities | 设备兼容性请求,如版本、数据格式等 |
devOpen | 请求设备实例 |
devInstanceSetup | 设备实例设置 |
devStart | 开始运行当前设备实例 |
devStop | 停止运行当前设备实例 |
devClose | 释放当前设备实例 |
例如,视频输出的设备库函数有voCapabilities、voOpen、voInstanceSetup等。在TriMedia的软件开发环境TriMedia SDE 2.2对音视频等设备库函数都有定义,因此使用时只需加入相应的头文件即可。
TriMedia软件架构中,设备库由板级欢欣鼓舞。板级库以板级支持包(BSP)的形式实现,BSP函数由设备库调用,它负责完成对硬件设备的所有初始化设备,高层软件不必深入到底层硬件设备细节就能完成对音视频等硬件设备的编程。BSP允许设计者对底层的接口硬件设备(如Audio D/A)改动,而不必改动该设备的上层编程。如要使用AD1847作为音频A/D、D/A设备,仅需要修改该部分的BSP即可。
在TriMedia SDE2.2中已经附带很多典型器件的BSP,如SAA7113、SAA7121、UDA1344等。开发音视频应用程序时,只需要调用设备库API、设置好数据缓冲区指针、指定相应的断服务程序来处理音视频设备接口到主存储器SDRAM的数据传递即可。用户也可以根据具体硬件自己开发BSP。
3 面向pSOS网络驱动设计与网络编程模型
网络设备的驱动程序,按照网络协议栈分层概念,在这其将其称为网络接口(Network Interface,简称NI),其主要功能是其将最底层的物理网络细节和上层应用程序隔离开,编程时用考虑网络硬件、网络传输介质和网络拓扑等。
在TriMedia软件架构中,可以将网络驱动设计成pSOS网络部件pNA+访问网络接口。这样设计的优点是:上层软件可以使用pSOS系统的pNA+软件部件丰富的系统调用函数,这些函数不但可以操作网络接口,而且可以操作套节字(Socket)进行高级TCP/IP网络编程,而不需用软件来实现TCP/IP协议栈。javascript:window.open(this.src);" style="cursor:pointer;"/>
本节内容旨在论述基本pNA+部件的网络接口设计和网络编程的基本概念模型,对其中存储配置管理没有作很多具体介绍。论述时按照由底层到高层的顺序进行。
3.1 pSOS简介及TriMedia SDE对pSOS的支持
pSOS系统是一个模块化、高性能的实时操作系统,它提供了一个基于开放系统标准的多任务环境。PSOS系统采用模块化结构,围绕pSOS实时多任务内核,集成了基于标准结构的各种功能模块。其系统架构主要由实时多内核pSOS+、多任务及多处理器的内核pSOS+m、TCP/IP管理部件pNA+、远程过程调用部件pRPC+、文件系统管理部件pHILE+、ANSI C标准库部件pRPEC+等组成。
TriMedia在得到pSOS系统开发商集成系统公司(IIS)许可权的前提下,已经对pSOS进行了移植和标准化,并在TriMedia SDE中发布,因此使用时不需要独立安装。在TriMedia软件架构中,pSOS也是通过库链接到应用程序中。pSOS内核的配置通过包含头文件(sys_conf.h)的形式来完成,头文件和内核编译后形成pSOS板级支持包,即pSOS BSP。
3.2 在系统中设计面向pNA+服务的网络接口
网络接口提供pNA对网络的访问,并将其与物理网络隔离开来。一个pNA+节点可以连接一到多个网络接口,每个网络接口都分配独立的IP地址和接口号。
在设计时,网络接口须为pNA+提供7种不同的网络接口功能调用,在表2中将其列出。
表2 网络接口功能
服 务 | 功能号 | 功能描述 |
NI_INIT | 1 | 初始化网络接口 |
NI_GETPKB | 2 | 分配网络接口包缓冲区 |
NI_RETPKB | 3 | 返回网络接口包缓冲区 |
NI_SEND | 4 | 网络接口发送包 |
NI_BROADCAST | 5 | 网络接口广播包 |
NI_POLL | 6 | 查询包收发及缓冲区状态 |
NI_IOCTL | 7 | 执行I/O控制 |
(1)几种接口功能详细说明
NI_INIT:在pNA+初始化时,自动调用该功能,也可以通过pNA+的系统调用add_ni()来激活该功能。在NI_INIT中初始化网络硬件、包缓冲池,设置网络接口的中断服务程序入口,并保存pNA+传递的Announce_Packet入口参数(包接收通知处理函数入口)及一些其他网络接口参数;
NI_POLL:该功能用来查询网络是否有接收包,当有接收包时,它通过Announce_Packet入口点将包传递到pNA+;
NI_IOCTL:该功能通过pNA+传递的不同命令执行网络的I/O控制操作,主要有调协IP地址、多播主机地址的增加、删除等。
另外几个接口功能不再详细介绍。
(2)网络接口功能调用接口主函数NIMain设计
上述各种网络接口功能通过一个接口主函数调用,它提供pNA+和网络接口之间功能调用的接口。
调用时,pNA+必须为NIMain函数提供两个参数:一个整型的功能号;一个定义为nientry联合体指针的网络接口参数。其中nientry是由niinit、nigetpkb…niioctl等结构体构成的联合,分别对应上述各功能的参数结构。所以,NIMain函数的一般形式:
long NIMain(int function,union nientry *p)
{/*注:NI_INIT到NI_OCTL常数及本文所用到各种数据结构及系统函数在TriMedia SDE pSOS头文件pna.h中定义*/
int rc;
switch(function)
{ /*NI_INIT调用处理*/
/*网络芯片及缓冲区初始化,记录网络接口号...*/
Lan_chip_Init();InitBuffer();
number=p->niinit.if_num;
ni_init(); …
case NI_GETPKB:… /*NI_GETPKB调用处理*/
case NI_RETPKB:… /*NI_RETPKB调用处理*/
case NI_SEND:… /*NI_SEND调用处理*/
case NI_BROADCASE:… /*NI_BROADCAST调用处理*/
case NI_POLL: /*NI_POLL调用处理*/
case NI_IOCTL:… /*NI_IOCTL调用处理*/
default:… /*返回错误代码*/
}
return rc;
}
可以看出,pNA+在调用网络接口功能时,只需传递参数指针,其具体动作都是由NIMain函数完成,NIMain起到了隔离网络底怪和pNA+的作用。
(3)pSOS系统中加入网络接口的方法
在pSOS系统添加网络接口增添其它的设备驱动程序类似,采用InstallNi函数完成。其函数定义格式如下面程序片段所示:
struct ni_init *pna_Init; /*用于传入pNA+配置表的nc_nni字段*/
void InstallNi (int (*entry)(),int ipadd,int mtu,int hwalen,
int flags,int subnetaddr,int dstipaddr)
{
pna_Init ->entry=(int (*)())entry;/*NI接口函数入口*/
pna_Init ->ipadd=htonl((ULONG)ipadd); /*IP地址*/
pna_Init ->mtu=ntu; /*大传输量,以太网为1518字节*/
pna_Init ->hwalen=hwalen; /*硬件地址长度,以太网为6*/
pna_Init ->flags=flags; /*接口标志*/
/*子网掩码、目的IP、缺省变量*/
ni_ptr->subnetaddr=htonl((ULONG)subnetaddr);
ni_ptr->dstipaddr=htonl((ULONG)dstipaddr);
ni_ptr->reserved[0]=0;
}
3.3 pNA+部件的配置及初始化
pSOS系统中,各个部件的配置都定义成一个结构体,并存放在结点配置表中(Node Configuration Table),结点配置表可以驻留在系统存储区的任意地址处。
PNA+部件配置表结构为pNAConfigTable。它用于定义pNA+所需的硬件和特定应用信息。如pNA+代码入口、网络接口初始化信息、初始ARP表、套字节数量、pNA后台程序优先级等。
PNA+使用时,需要通过pNA+配置表结构进行初始化。在初始化设置网络接口时,需调用前面所述的InstallNi,调用时必须将其第一个函数指针变量参数entry用NIMain代入,系统自动执行NI_INIT功能调用,使pNA+和特定网络接口实例关联起来。
应用程序在进行pSOS系统初始化时,需要将pNA+配置表加入结点配置表,以后就可以通过pNA+访问网络接口了。
3.4 使用pNA+部件进行网络编程
pNA+部件提供了pSOS系统对TCP/IP协议的支持。PNA+可以通过工业标准网络编程套节字Socket对TCP/UDP、IP、ICMP、IGMP、ARP等进行访问。PNA+还提供NFS、Telne、RPC(远程过程调用)的支持。可见pNA+可以满足绝大多数的网络编程。
pNA+的软件架构可用图3表示。
pNA+定义了很多系统调用函数进用户编程使用,包括与Windows Socket编程完全兼容的众多Socket API函数,如:socket、close、bind、recvfrom、sendto、listen、accept、connect等。另外,还定义了套节字Socket的属性选项设置和控制、消息块的分配、网络接口国入等API函数,如setsockopt、ioctl、pna_allocb、add_in等。
4 系统应用
设计的目的是将本系统用于银行监控系统中,作为多媒体音视频数据采集和网络传输的终端服务器。这种基于嵌入式技术监控系统的优点是:由于这种系统的硬件是一个与处理和操作系统捆绑较为紧密、功能专一、专门设计的独立设备,不像插卡系统那样受通用计算机系统中其它软硬件的影响,因此性能更稳定,且便于安装,省掉各种复杂的电缆,配置简单方便,仅设置一个IP地址即可以使用了。
本系统是基于具有开放性的IP网络来实现,具有通用性。而音视频数据处理可以按照实际应用采用各种不同的编解码标准,如MPEG、JPEG、H.263等。它可以用于多媒体远程监控系统、Web Camera(网络摄像机)、视频服务器、可视电话、视频会议终端等。