浅谈AT91RM9200的嵌入式网络摄像机的设计与实现
扫描二维码
随时随地手机看文章
1.引言
随着通信技术和网络技术的迅猛发展,通过网络远程实时监控重要场所已倍受人们关注,网络摄像机在此背景下产生,并成为人们关注的焦点。网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传至地球另一端,且远端的浏览者不需用任何专业软件,只要标准的网络浏览器(如"Microsoft IE或Netscape)即可监视其影像。网络摄像机要将高清晰度的实时视频信息通过互联网传送到监控终端,因其信息量巨大,所以必须压缩。通常人们采用DSP与MPEG-4算法相结合的方案来实现,不仅编程工作量大,而且产品的成本高。本文所介绍的网络摄像机采用专用的MPEG-4压缩芯片、以嵌入式Linux作为操作系统,不仅开发便捷、成本低廉,而且实时性好,适用范围广。
2.系统总体设计
系统总体设计包括硬件设计和软件设计两部分。这两部分工作是互相联系的,需要交叉进行,系统设计是开发人员进行的工作,他们将系统设计阶段得到的目标系统的逻辑模型转换为目标系统的物理模型,该阶段得到工作成果――系统设计说明书是下一个阶段系统实施的工作依据。硬件设计模块主要包括微控制器模块、微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机。
微控制器诞生于20世纪70年代中期,经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。例如电机控制、条码阅读器/扫描器、消费类电子、游戏设备、电话、HVAC、楼宇安全与门禁控制、工业控制与自动化和白色家电(洗衣机、微波炉)等。压缩编码模块、网络接口模块和相机控制模块四部分。
微控制器模块主要由主控芯片、DataFlash和SDRAM(1)组成。其中,主控芯片是整个控制系统的核心,它负责整个系统的调度工作。DataFlash里固化了嵌入式Linux内核、及其文件系统、应用软件和系统配置文件。压缩编码模块由视频数据采集芯片、MPEG-4压缩编码芯片、SDRAM(2)组成,负责将视频流转化为MPEG-4码流。网络接口模块主要是配合主控芯片传送MPEG-4码流。相机的控制模块主要由串口芯片组成,其完成转发控制相机命令的功能。当系统启动时,微控制器通SPI(Serial Peripheral Interface,串行外设接口)将Linux内核转入SDRAM(1)中,系统从SDRAM(1)中启动。系统启动后,微控制器通过HPI(Host Peripherial Interface,主机接口)控制MPEG-4编码模块。统结构如图1所示。
图1系统结构框图
软件设计部分主要包括嵌入式Linux移植、MPEG-4压缩编码模块、CGI控制程序和MPEG-4解码程序四部分。嵌入式Linux系统存放到由AT91RM9200控制的DataFlash里,它负责整个系统软件的调度工作。MPEG-4压缩编码模块主要负责模拟视频流的采集,并将数字视频流压缩为MPEG-4数据流。CGI控制程序主要负责对摄像机的控制和对MPEG-4视频流的相关设置。简称CGI.在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下"留言"(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到"留言结束"的字样。整个过程结束。MPEG-4解码程序主要负责对通过网络得到的MPEG-4数据流的解码工作。
3.硬件设计
3.1微控制器模块
微控制器是本系统的核心部件,选用的是ATMEL公司的AT91RM9200.它是一款基于ARM920T核的32位微控制器。其主频为180MHz,处理速度快,功能强,性价比高,能很好满足嵌入式Linux系统的需求。它在系统中的主要作用是在系统上电时配置其他芯片的功能寄存器,在正常工作状态下调度控制整个系统工作,通过片内以太网控制器控制物理层芯片发送码流。
AT91RM9200通过片内的SPI总线和SDRAM控制器实现对外围DataFlash和SDRAM的控制,利用片内的USART实现对串口芯片的控制,通过片内的以太网控制器对片外网络芯片进行控制。其控制原理图如图2所示。
图2控制原理图
3.2压缩编码模块
压缩编码模块包括模拟视频采集模块和MPEG-4压缩模块。视频采集芯片采用TI公司的TVP5150,数据压缩芯片采用映佳公司的MPG440.TVP5150输入端可是两种混合视频信号也可是S-Video端子的视频信号,支持NTSC、PAL、SECAM等3种制式,其输出的数据色彩格式可以为8bit 4:2:2数字信号或者8bit同步ITU-R BT.656数字信号。MPG440芯片具有符合工业标准的16b/32b的双向主机接口,分别用来与视频采集芯片和微控制器芯片通信。同时,具有移动侦测、防伪水印、动态调整IP画格比率、动态调整图像质量等特性,支持D1、VGA、CIF、QVGA、QCI等五种分辨率模式。微压缩编码模块的硬件设计原理如图3所示。
图3压缩编码电路
TVP5150的AI模拟输入口与模拟摄像头输出端连接,向视频处理芯片传送模拟视频信号。模拟信号经过采样处理之后通过YOUT0~YOUT7引脚送到MPG440,采样数据在PCLK的上升沿有效,MPG440的VIDEO_CLK在收到PCLK的上升沿时获得YOUT的信号。TVP5150分场同步脉冲和行同步脉冲,分别对应其输出端VSYNC、HSYNC.MPG440正是根据与之相连的VSYNC和HSYNC信号线来实现图像的场同步和行同步操作。MPG440的视频输入数据线DATA_TV0~DATA_TV7与TVP5150的YOUT0~YOUT7相连。MPG440在接收数据的同时,将其得到的数据流传送给MPEG-4压缩编码单元,编码后的MPEG-4数据流暂存到SDRAM(2)中。MPG440片内PDMA控制器根据配置寄存器的设置准确发起对SDRAM(2)访问,同时将得到的数据流输送往HPI(主机总线接口,Host Peripherial Interface),以等待AT91RM9200通过DMA通道将数据发送到网络。
MPG440通过HPI与AT91RM9200通信,AT91RM9200将MPG440的寄存器、存储空间等资源作为其本身内存寻址访问。MPG440由AT91RM9200选通线NCS4来选通,其在AT91RM9200寻址空间中的地址段为0X50000000到0X5FFFFFFF.通过对MPG440一系列寄存器的设置,可以访问MPG440系统存储空间。MPG440中断信号RSC_INT0从通用I/O引脚的PB29输入,当缓冲器填满时,RSC_INT0引脚置低提示AT91RM9200通过DMA通道提取MPEG-4数据流。编码后视频数据读取过程和MPG440与主机通信过程由AT91RM9200读信号CFRD和写信号CFWE控制。
3.3网络模块
网络模块硬件设计原理如图4所示。
图4网络模块电路
AT91RM9200的在片以太网卡端口和网络物理层芯片DM9161E的MII接口通信。发送数据时,首先置发送使能信号ETXEN有效。数据发送端ETX0~ETX1与DM9161的ETXO~ETX1引脚对应连接,作为数据发送通道,以DM9161E的时钟信号REF_CLK发送数据。数据接收端ERX 0~ERX1与DM9161E的RXDO~RXD1引脚对应连接,作为数据接收通道。管理时钟信号EMDC和管理数据输入输出信号EMDIO用来芯片控制参数的写入和读取。DM9161E的MDINTR端用来产生中断信号。
片内以太网卡通过DMA通道进行数据的发送,不影响AT91RM9200的正常运行。首先正确设置传送控制寄存器和传送地址寄存器的传送数据块字节数、数据块存储首地址等参数,随后依次从指定数据存储区地址读取1024b数据,送入内部发送缓冲器中,由MAC对数据进行封装发送,同时记录已传送字节数,直到数据块发送完毕。当发送完一组数据后,发出DMA中断请求,由AT91RM9200进行相应的处理。整个网络子系统电路由AT91RM9200控制和调度。
4.软件设计
嵌入式Linux系统主要由四个部分组成引导内核启动的文件(bootloader)、Linux内核文件(kernel)、虚拟磁盘文件(ramdisk)、用户空间文件(user)。它们分别被放在DataFlash内的四个分区模块中。根据不同模块的具体功能采用不同的文件系统:bootloader、kernel、ramdisk,移植完成后不需要动态改变,使用较节省空间的ROMFS只读文件系统;user模块内放置一些可以动态更新的配置文件等,需要进行较多的读写操作,所以使用支持动态擦写保存的JFFS2文件系统。inux做嵌入式的优势,首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者又是Linux开发者的强大技术支持;其次,Linux的内核小、效率高,内核的更新速度很快,linux是可以定制的,其系统内核最小只有约134KB.第三,Linux是免费的OS,在价格上极具竞争力。Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU.而且性能稳定,裁剪性很好,开发和使用都很容易。
Linux移植技术已经成熟,本文不作详细的阐述。下文主要介绍MPEG-4压缩编码模块和CGI模块的程序设计。
4.1 MPEG-4压缩编码模块程序设计
该模块主要完成MPG440和TI5150相关寄存器的配置,并保证MPEG-4码流的正常输出。当嵌入式Linux系统启动后,首先配置MPG440的相关寄存器,其初始化完成后,通过I2C总线对TVP5150进行初始化配置。当系统开始压缩编码时,MPEG-4码流接收存储程序由MPEG-440的数据流缓冲器标志信号控制。
MPEG-4压缩编码模块程序流程如图4所示。
图5 MPEG-4压缩编码模块程序流程图
4.2 CGI程序模块设计
CGI(Common Gateway Interface)是外部扩展应用程序与WWW服务器交互的一个标准接口。本系统CGI的工作过程:在PC机端的IE浏览器中输入网络摄像机IP地址,嵌入式网络服务器根据请求,将相应的控制页面反馈给IE浏览器,用户填写表单,然后提交,CGI程序提取表单的信息,根据不同信息来分别处理相应的事件,如调节MPEG-4相关属性、相机的相关操作等。CGI控制原理如图5所示。
图6 CGI控制原理图
CGI模块的设计主要包括三部分:嵌入式web服务器的配置、html页面的编写、CGI程序的设计。
嵌入式web服务器采用的是Apache,其配置是以配置文件的形式提供,放在Ramdisk中/etc/httpd/conf/目录下。其配置主要涉及以下三个方面:
1配置根文件的路径:"DocumentRoot /home/httpd/html",html页面必须放到此目录下。
2配置CGI外部程序所放的路径:"ScriptAlias /cgi-bin/ home/httpd/cgi-bin/".
3配置环境变量:"SetEenv D_LIBRARY_PATH=/lib:/usr/local/lib:/usr/lib",该变量将会被传送到CGI脚本和SSI页面,以保证CGI程序能正确找到所依赖的库。
网页编写采用html与shtml相结合的方式。html的解析速度较快,shtml可以在普通网页中嵌入外部CGI程序,通过这种方式将系统的默认配置反馈给客户端。
CGI程序采用的是C语言和shell脚本相结合的方式,C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。具体编写过程,与通常的了Linux下编程相同。
4.3 MPEG-4解码程序
MPEG4于1998年11月公布,原预计1999年1月投入使用的国际标准MPEG4不仅是针对一定比特率下的视频、音频编码,更加注重多媒体系统的交互性和灵活性。MPEG专家组的专家们正在为MPEG-4的制定努力工作。MPEG-4标准主要应用于视像电话(Video Phone),视像电子邮件(Video Email)和电子新闻(Electronic News)等,其传输速率要求较低,在4800-64000bits/sec之间,分辨率为176X144.MPEG-4利用很窄的带宽,通过帧重建技术,压缩和传输数据,以求以最少的数据获得最佳的图像质量。与MPEG-1和MPEG-2相比,MPEG-4的特点是其更适于交互AV服务以及远程监控。MPEG-4是第一个使你由被动变为主动(不再只是观看,允许你加入其中,即有交互性)的动态图像标准,它的另一个特点是其综合性。从根源上说,MPEG-4试图将自然物体与人造物体相溶合(视觉效果意义上的)。MPEG-4的设计目标还有更广的适应性和更灵活的可扩展性。映佳科技已提供供二次开发的MPEG-4解码插件OCX,OCX在PC机端注册后,OCX函数可方便地被网页调用,从而实现在PC机端观看实时图像。
5总结
本文介绍了一种利用AT91RM9200、TVP5150,MPG440和DM9161E等芯片设计的嵌入式网络摄像机。经测试,该系统稳定、可靠、实时性好、图像质量出色。该产品可广泛应用于交通监控和工业监控以及家庭监控、视频会议话等众多领域。