0 引言
随着嵌入式技术,网络技术以及多媒体技术的发展,视频采集系统在视频监控,工业控制自动化等领域得到了广泛的应用。本方案给出了在 S3C44B0处理器与嵌入式 UClinux操作系统的管理下, CMOS感光芯片 OV7620与视频处理芯片 ZC0302共同合作完成的视频采集系统。文中对系统硬件与软件的设计给出了具体实现,介绍了系统所用芯片的特点, UClinux内核移植和加载硬件设备驱动的软件设计,给出了软件实现图像采集的流程图,利用 V4L实现接口规范,完成视频的采集,处理与传输,供监控中心进行实时监控与处理。
1 系统硬件设计
本系统选用嵌入式 S3C44B0作为硬件平台。三星公司的高性能嵌入式处理器 S3C44B0,其内核为 16/32位 ARM7TDMI RISC处理器,为了降低成本,扩大应用范围,其提供了丰富的内置部件,包括 8kb cache ,内部 SRAM, LCD控制器,带自动握手的 2通道 UART, 4通道 DMA,系统管理器( FP/EDO/SRAM控制器), ADC, IIC, IIS, I/O端口等。满足很多应用场合的设备开发并且减少了硬件成本,性价比高。视频采集系统的硬件结构如图 1。
图像采集由处理芯片 ZC0302和感光芯片 OV7620合作完成。其中,处理芯片负责图像采集、压缩以及和主机的通信,感光芯片用于感应光信号转换为模拟或数字视频电信号。视频处理芯片 ZC0302实现了 JPEG压缩并且提供了 USB接口,扩展时无须外接 SDRAM,提供 CMOS图像传感器芯片接口, CIF图像处理速度达 3O frame/s,支持标准 JPEG数据流输出。经过 ZC0302处理的数据可作为 H.264等视频压缩编码标准的原始视频数据源。 CMOS图像传感器与 ZC0302压缩芯片能实现无缝连接。
CMOS图像传感器芯片 OV7620,是一种自带图像敏感阵列和 A/D转换元件、能直接提供 8/16 位 CCIR601、 CCIR656等格式视频数字信号,图像输出最高速度可达 60S/s,最大图像分辨率为 644× 492;可以利用 OV7620的 SCCB接口对 OV7620进行有关设置,输出信号的类型有 YUV, YCrCb和 RGB三种。
在硬件系统中,通过 USB接口将 ZC0302与 S3C44B0相接。利用 USB接口进行通信只需要在 UClinux内核中增加 USB支持和加载 ZC0302硬件驱动模块。这样的驱动设计可以有利于软件的设计和调试。
2 S3C44B0视频采集的工作原理
从硬件结构图上可以看出,单片的 S3C44B0可以通过 SCCB协议控制图像感光芯片 OV7620来完成图像的采集,处理与传输。本文所设计的视频采集系统旨在通过网络传输到 PC机上,并期望最终通过无线网络模块将视频传输到监控中心的 PC机上,而通过仅有 ARM处理器与图像感光芯片 OV7620这种方法采集的图像数据量较大,不利于网络传输。这里不予介绍其设计过程。
由于网络带宽有限,数据量大的码流不利于网络传输,因此需要对采集到的视频进行压缩编码。在 S3C44B0处理器的控制下,采用 ZC0302处理芯片与 CMOS感光芯片 OV7620完成图像采集。 ZC0302支持 JPEG压缩,压缩后的复合流可以存储 SDRAM中,供用户日后的检索回放使用;同时,视频数据流也可通过网络传输模块发送到监控中心的 PC机上,达到监控和实施处理的目的。
3 系统软件设计
在嵌入式系统的开发中,软件是实现各种系统功能的关键。本系统将 UClinux操作系统移植到 S3C44B0平台上,并将 UClinux操作系统自带的 USB摄像头驱动程序稍加修改,作为 ZC0302芯片与 OV7620完成图像采集的驱动程序,利用 Video For Linux(V4L)库所提供的 API函数,编写应用程序,完成视频采集的功能。
3.1 操作系统 UClinux的介绍
UClinux即“微控制器领域中的 Linux系统”,是 Lineo公司的主打产品,同时也是开放源码的嵌入式 Linux的典范之作。 UClinux主要是针对目标处理器没有存储管理单元 MMU的嵌入式系统而设计的。它秉承了标准 Linux的优良特性, 经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的嵌入式 Linux。它具有稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的 API等优点。
3.2 UClinux的内核移植
首先是对引导加载程序 U-boot的移植,移植 U-boot 到新的开发板上仅需要修改和硬件相关的部分。将 U-boot成功移植后,然后是 UClinux的内核移植。
首先是构建交叉编译环境。交叉编译环境是指运行在某一处理器上的软件可以编译出能在另一种处理器上执行的指令。本设计中的交叉编译环境安装在 PC机上,通过它,可以把程序编译成能在硬件平台 S3C44B0上执行的指令。交叉编译环境有一套用于编译,汇编和链接内核及应用程序的组件组成。通过编译可以使 UClinux内核和应用程序在目标设备上运行。其次是内核移植,需根据系统内核结构和系统外围接口的要求,有针对性的对 UClinux源代码包做部分修改。最后是内核的配置与编译, UClinux源代码修改完成后,需要对其进行配置与编译,生成最终可执行的文件。完成以上操作后,在 UClinux-dist/images/目录下将生成压缩内核 UClinux-rom.bin (二进制压缩文件 )了。
最终生成可以运行的压缩内核文件通过之前设计的 Bootloader程序,利用 TFTP协议将映象文件下载到 ARM板上的 SDRAM中,并将其写入 FLAsH存储器中。系统重新上电,通过超级终端,可以看到 UClinux内核程序能够很好的运行起来。
3.3 视频设备驱动的加载
UClinux内核成功移植后,将其自带的 USB摄像头驱动程序稍加修改,作 ZC0302芯片 USB摄像头的驱动程序。本系统中视频信号的采集工作是由 CMOS图像传感器芯片 OV7620和视频处理芯片 ZC0302共同来完成的。因 ZC0302与 S3C44B0是通过 USB连接的,所以在视频采集驱动模块中主要是实现 ZC0302在 ARM-UClinux下的 USB驱动。利用 spca5xx-Light-Edition实现了对 ZC0302的驱动, spca5xx-Light-Edition是 spac5xx针对嵌入式系统开发的轻量级视频设备驱动。编译生成后的目标文件 spca5xx.O就是支持 ZC0302的驱动模块,使用 insmod命令加载 spca5xx.O模块。加载成功后,系统便会在/ dev/下生成 video0文件,表明摄像头已经成功安装。
3.4基于 V4L的视频采集
利用 Video For Linux(V4L)库所提供的 API函数,编写图像采集应用程序。 V4L是 Linux中关于视频设备的内核驱动,可以利用该库快捷地实现视频的采集和处理。视频采集用到的主要函数:打开视频设备需调用 int V4L _open(“/ dev/ video0”, O-RDWR);获取视频设备信息调用 int V4L_get_capability(v41_device *vd);获取图像属性设置: int V4L _get_picture(v41_device *vd);初始化内存映射 int V4L _mmap_init (v41— device *vd, int format);图像捕捉函 V4L_frame_grab(v41_device *vd);视频采集的过程实质上就是对这些函数的调用过程。视频采集程序的流程图如 2。
以下给出了设置图像属性函数的实现:设置图像属性(主要是设置调色板)的应用程序代码:
#define video_palette_YUV420p 15
#define depth-YUV420p 12
int v4l-set-palette(v4l-device *vd){
vd->Picture.Palette=video_palette_YUV420p;
vd->Picture.depth=depth-YUV420p:
vd->formatin=video_palette_YUV420p;
vd->bppin=depth-YUV420p:
if(ioctl(vd->fd, videocspict,&vd->picture)<0){/*设置调色板 */
Perror("videocspict video_palette_YUV420p:");
return -1;
} if(ioctl(vd->fd, videocgpict, &vd->picture)<o){/*检查是否设置成功 */
Perror("videocgpict in v41_set_Palette:"):
return -1;
} if(vd->formatin!=vd->picture.palette||vd->bppin!=vd->picture.depth){
Printf("Error:Could not set video Palette!/n");
return -1;
}return o;
}
视频采集程序编写完成后,利用 PC机上的交叉编译器链接采集程序使之生成可执行的目标代码,并将其移植到目标平台上。在目标平台带网络支持的基础上,编写网络通信程序,将采集到得图像通过网络传输到 PC机上进行显示。
4 总结
从系统硬件设计讲采用 ZC0302主控芯片与 CMOS感光芯片 OV7620采集的图像,可直接作为 H.264等视频压缩编码标准的原始视频数据源,避免了对图像的重采样和色彩空间的变换等复杂的数字运算处理,提高了压缩编码的效率。软件上,根据所选择的硬件硬件平台,选择 UClinux作为操作系统,并选择了 UClinux库中有开源驱动的采集设备,缩短了系统开发周期,降低了系统成本。本设计方案具有性价比高,稳定性好,图像质量好等优点,可广泛应用于与视频监控,工业控制等领域中。