一种嵌入式网络视频监控系统的硬件设计
时间:11-11
来源:互联网
点击:
图3 Flash存储器接口设计框图
SDRDM存储器选用的是Hynix的HY57V281620ET,它的容量位是16MB(4Banks×2M×16bits),单片数据宽度是16位,为了增大数据吞吐能力,选取两片SDRAM构成32位地址宽度,存储容量为32MB。HY57V281620ET的工作电压为3.3V,常见封装为54脚TSOP,兼容LVTTL接口。支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh)。HY57V281620ET与Hi3510的接口连接框图如图4所示。
图4 SDRDM存储器接口设计框图
3、视频采集模块设计
视频采集芯片选用Philips公司生产的SAA7113H,它是一款功能强大且操作简单的9位视频输入处理芯片,采用CMOS工艺,通过I2C总线与处理器或DSP连接可方便地构成应用系统。它内部包含四路模拟处理通道,可以选择视频信号源并可抗混叠滤波,同时还可以进行模数转换、自动箝位、自动增益控制(AGC)、时钟产生(CGC)、多制式解码,另外还可以对亮度、对比度和饱和度进行控制。设置SAA7113H芯片的工作时钟为24.576MHz,数据输出格式为4:2:2,帧频为25fps。视频采集芯片SAA7113H在上电后,并不是立即采集模拟视频信号进行A/D转换,它必须由Hi3510通过I2C总线对其内部寄存器进行初始化设置后,才能正常工作。视频采集芯片SAA7113H与Hi3510的接口连接框图如图5所示。
图5视频采集电路原理框图
4、外围电路模块
本设计用到的外设有USB接口,网卡接口,串行接口和JTAG接口。同时为保证系统将来的可扩展性,系统还预留了PC104接口和大量的GPIO接口。AT91RM9200处理器的片内以太网卡端口和网络物理层芯片DM9161E 的MII 接口通信。而且片内以太网卡内置了独立的双缓冲的读写DMA 通道,这样大大提供了数据的发送速度,同时不影响AT91RM9200 的正常运行。
为保证视频采集质量,监控系统选用了罗技等高端品牌的产品,然后摄像头通过专用的USB集线器与处理器单元的USB接口连接。在实时监控状态下,各个摄像头上捕获的图像数据通过USB集线器传输到视频监控系统的USB主控制器模块上,然后再由USB主控制器模块交由AT91RM9200处理器集中处理。AT91RM9200对采集到的图像进行实时编码压缩,编码之后的码流直接传输到发送缓冲区中,等候发送。最后由上层应用程序将处理后的视频数据通过以太网口进行发送。
四、软件方案
系统的应用软件建立在Linux操作系统之上,嵌入式Linux具有许多优点,如开放源码,功能强大的内核,支持多用户、多线程、多进程、实时性好、功能强大稳定;大小功能可定制等。本系统采用的嵌入式Linux系统是基于2.6.21的内核,支持了内核抢占式调度,同时调度周期为1ms,因此大大保证了系统的实时性。此外,系统内嵌的嵌入式Linux系统实现了对所有硬件设备的驱动支持,如基于Flash的文件系统、网卡驱动程序、USB驱动程序等等,完全保证了系统的可用性。
在本系统中,软件设计可分为3部分:视频图像数据采集、图像数据的JPEG压缩以及系统平台的网络通信。
1、视频图像数据采集的实现
首先加载USB摄像头驱动程序,接着就是编写一个对视频流采集的应用程序。摄像头中的各种I/O口的控制主要依靠Vide04Linux提供的应用程序接口函数实现,主要有Open、Read、Write等。V4L下的视频采集1。在本系统中,将有关摄像头的各种数据和结构封装成了一个类,主要用到的一些系统调用函数定义如下:
open(“/dev/vide00”,O—RDWR):设备的打开。
close(fd):设备的关闭。
mmap(void+addr,size—t len,int prot,int flags,int fd,off__t offset):
设备缓冲区到内存空间的映射。
munmap(void*addr,size t len):采集工作结束后取消mmap和mbuf的绑定。
ioctl(int Rl,jnt cmd...,):控制I/O的通道。
2、Linux下图象数据的JPEG压缩
由于视频信息数据量过大,因此必须在视频传输前对图像数据进行压缩处理。在本系统中,摄像头采集过来的图像数据格式为RGB24,通过调用Linux下的Libjpeg库来实现视频数据的编码,把RGB24图像数据转换为JPEG格式。下面简述下整个压缩处理过程:
首先初始化JPEG压缩的图片格式,调用jpeg_set—defauhs(&cmjpeg),接着初始化JPEG压缩图片质量,通过jpeg_set—ratio(&cmjpeg,ratio,7rURE)实现。
开始压缩:jpeg_start—compress(&cmjpeg,TURE);for(i--0,line--buf;
i<_height;i++,line+=_width*3)jpeg_write—seanlines(&cmjpeg,&line,1);
压缩完成:jpeg_finish—eompress(&cmjpeg);
将压缩得到的数据拷贝到jpeg数据变量中:
memepy(new一>buf 0。((_dst_ptr)cmjpeg.dest)一>buffer,size);
释放内存并销毁cmjpeg变量:jpeg_destory_compress(&cmjpeg)
jpeg_buff_free(&emjpeg);
最后返回return size;返回值size标记了缓冲区中视频数据的实际长度。
嵌入式 电子 自动化 视频监控 Linux 电路 ARM 总线 电源管理 收发器 电压 稳压电源 电流 电容 CMOS DSP USB 相关文章:
- 蓝牙无线电调制解调器Siw1701原理与应用(02-19)
- 嵌入式移动数据库的关键技术(03-20)
- 在嵌入式SQL中怎样使用游标(08-12)
- 嵌入式Linux系统软件开发学习思路详细介绍 (08-20)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 嵌入式系统设计中的存储碎片收集策略(05-04)