目前嵌入式视频监视系统已成为国内外视频监视系统应用的主流,但是在IPv4平台下存在地址不足、不能合理分配带宽、安全性能及移动性能差等诸多问题,而新一代IPv6协议不仅能很好地解决以上问题,还具有可以提高视频传输速度和传输质量等多方面的优点。如何使嵌入式监视系统与IPv6技术相结合已经成为当前监视系统研究的一个重要方向[1-2]。
嵌入式视频监视系统的实现方式一般有两种:ARM+通用DSP和ARM+专用视频处理芯片[3-4]。考虑到基于DSP的解决方案成本太高、开发难度大等特点,本文采用了成本低、开发周期短的第二种方案。
1 系统结构设计
本系统的主要芯片之间通过I2C总线相连接,这样设计不仅方便各主要芯片之间的通信,例如,ARM处理器可直接控制视频解码器SAA7113H,而且方便系统升级,例如扩展存储器、更新芯片。SAA7113H采集AV端子(Composite Video)的视频信号处理成ITU656格式的数据送到GO7007SB,MSM7716采集来自麦克风的音频信号处理成PCM格式数据送到GO7007SB,GO7007SB将采集到的音视频数据进行压缩,压缩后的数据流经过HPI(Host Parallel Interface)接口传输到ARM微处理器S3C2410,S3C2410将压缩数据发送给以太网接口运用IPv6协议传输到网络[5]。系统的结构图如图1所示。
2 视频采集模块设计
视频采集由Philips公司的视频捕获芯片SAA7113H完成。该芯片是可编程视频处理芯片,主要完成模拟视频信号的数字采样,将模拟彩色视频信号转换成符合ITU656标准输出格式的数字视频信号,前端输入的视频信号可以是PAL制式、NTSC制式或者SECAM制式。它不仅能够实现输入信号的幅度钳位和静态、动态增益自动调整,而且还包含一个可编程的亮度、对比度、饱和度及色度控制器,可实时地调整采集到的数字图像参数。片外只需提供一个24.576 MHz的晶振,片内时钟发生器自动产生内部电路所需的工作频率。SAA7113HH在GO7007SB的I2C总线时序的控制下,将处理后的ITU656 YUV 4:2:2格式的数字图像数据通过数据线传送到G07007SB[6]。在GO7007SB与SAA7113H之间的I2C总线空闲时,ARM处理器可以通过I2C总线对SAA7113H内部寄存器进行设置。GO7007SB的数据线PDATA是1个10位的并行输入接口,接口时钟由像素时钟(PCLK)提供。来自SAA7113H的视频源是8位的,应该连接到10位PDATA总线的高8位上,此时,低2位可以连接到高电平或低电平。本设计中的模拟视频输入端提供了复合视频信号接口[7]。
SAA7113H输出的同步信号包括LLC、RTS0、RTS1。LLC是行锁定系统时钟输出,与PCLK相连,取PCLK的最大值,即27MHz,用来同步数据采集,使得1个LLC周期输出1bit的图像数据。在图像数据有效时,其上升沿反相后作为帧存储器的WE#信号。RTS0、RTS1的功能是通过编程设置SAA7113H功能寄存器确定的。RTS0被设置为水平输出与HREF连接的参考信号(行有效信号)。RTS0高电平时表示采集一行有效像素,低电平时表示场消隐信号。RTS1被设置为垂直输出参考信号和奇偶场信号,与VREF连接。RTS1高电平时表示采集奇场图像所需要的有效数据,在RTS1上升沿时,开始采集奇场图像数据,同时它也被用来作为帧图像开始的信号;RTS1低电平时表示采集偶场中所需要的图像数据,在RTS1下降沿时,开始采集偶场图像数据[8]。
3 音频采集模块设计
音频采集是由OKI公司生产的音频解码芯片MSM7716完成的。MSM7716在部件模式下运行而GO7007SB在主机模式下运作。音频数据经MAIN 引脚输入,其内部和外部电路如图2所示。在内部,MAIN与op-amp的同项输入相连,而MAO与op-amp的输出相连。BCLK与GO7007SB的BCLK连接,其频率与数据率一致。SYNC作为同步信号与GO7007SB的LRCK连接。 这些同步信号启动了PLL并且使传送部分的所有调速信号同步化。接收部分的信号也被这些同步信号同步化。此信号必须在BCLK阶段被同步化[9]。
4 音视频压缩模块设计
GO7007SB是单片多式视频压缩芯片,它使用复合算法将原视频数据缓冲并压缩成视频流,输出视频流形式为MPEG-1、MPEG-2、MPEG-4或 H.263。
时钟系统视为带有适用低电平的MPLL_BP 和 UPLL_BP 引脚的内部PLL模式设计。主时钟由芯片振荡器和PLL产生。MCLK频率是96MHz。在这种情况下,MXI和MXO之间需要一个外部R-C-Crystal tank,如图3所示。
MT48LC2M32B2是64MB SDRAM (512K×32×4 backs), 被用作外部数据缓冲器。为了改进SDRAM的时钟定时功能,GO7007SB为SDRAM提供SDRAM信号以及时钟信号[10]。该时钟被设计为SDRAM_CLK.。SDRAM_CLK 引脚驱动SDRAM 装置并为SDRAM_CLK_LB 引脚提供反馈。在读取周期中,反馈时钟获得SDRAM数据。无需任何复杂的PCB设计SDRAM数据可以符合96 MHz的设计时间。SDRAM 时钟的设计如图4所示。
2KB EEPROM用于存储装置的启动设置,由I2C控制器进行控制。所以用户可以将定制的描述符ID、接口和端点设置存储在芯片上。另外,它还能存储定制内部寄存设置、启动码以及自动固件。
音频接口在主机模式下运作,一个简单的时钟生成器通过MXAUD参照主时钟24.576MHz生成样本速率,而位时钟与合成信号也通过MXAUD生成。
HPI接口用于连接微处理器,运行启动,控制数据,而压缩流也通过HPI接口。如果发生不可逆转的错误,XRISC或微处理器可以冻结前端模块并启动调试模式。然后外部主机就可以运用调试模式进入GO7007SB内部。
HPI接口被设计为异步模式,异步模式也是缺省的模式,可通过HPI_SYNC引脚以及以启动EEPROM设置的16位数据总线进行设置。
5 网络传输模块设计
AX88796的CPU[1:0]两个输入引脚用来设置与不同CPU总线连接时AX88796的工作模式,本系统设其为X86模式,即CPU0接3.3V电压,CPU1接地。由ARM的4个GPIO口引脚分别与AX88796的CS#、WR#、RD#和BHE#相连,完成对AX88796的控制功能。AX88796的地址总线SA[9:0]和数据总线SD[15:0]分别与CPU的地址/数据总线相连。
需要特别注意的一个引脚是PLL电源引脚(78脚),按照手册上说这个引脚必须要与其他的电源隔离,本设计一开始使用一个磁珠隔离,结果在后面调试时ping通率很小,使用10μH的电感再加一个104电容接地的方式后,大数据包完全可以ping通。
编写IPv6视频组播发送和接收函数部分,以供视频监视终端和客户端上位机应用程序调用。在编写函数时,可参照视频传输流的IPv4组播发送和接收,并且可以添加传输数据的加密解密模块。IPv6组播发送的真正实现是IPv6_multicast_send()函数,它主要是通过调用3个子函数:JoinMulticast(加入组播组)、LeaveMulticast(离开组播组)和Send(发送数据)来实现的。组播数据的接收是由IPv6_multicast_rev()函数实现的,接收到的数据存放在缓冲区中,等待进一步处理。在IPv6_multicast_rev()函数中,创建一个接收网络数据Socket并将其加入到指定的组播组中,开始接收组播数据。
通过接收组播数据函数Int revdata(char *buffer,int len)接收组播数据,并将接收到的视频数据存放在数据缓冲区中,提取视频数据包头,判定此包是否为一帧数据中的最后一帧,如果是最后一帧则对此帧进行解压处理并显示出来。
6 ARM与GO7007之间的通信设计
S3C2410和GO7007SB通过HPI通信。HPI物理上连接GO7007SB端口和ARM的总线控制器BUSC,S3C2410通过编程HPI在GO7007SB内存映射中打开一个32KB窗口,然后再访问GO7007SB内存。这样,S3C2410和GO7007SB都可以访问SDRAM,从而有效地共享大量的图像数据块。S3C2410和GO7007SB共享一种数据结构,用于命令请求、确认和数据的交互。
本系统通过调试和测试,已经成功实现了IPv6环境下的视频监视系统的基本功能,实现了嵌入式视频监视系统与IPv6技术的结合。此设计方案具有开发周期短、成本低、图像质量好的特点,具有广阔的市场前景。
评论
查看更多