基于FPGA+DM36X的IP摄像机平台
的抓取电路,通过Nios2图像抓取电路向PC机中存入一帧图像用于图像效果的调试,其中抓取的图像每个像素位宽是12 bit裸数据,在Matlab中进行显示,如图5所示。
3 MT9M034驱动移植
3.1 传感器特性
MT9M034传感器是美光公司推出应用于安防领域的高动态范围图像传感器。该传感器具有全局运动补偿功能,最高可提供每秒45帧下1 280×960分辨率的视频拍摄,支持线性模式和高动态范围模式。传感器具有并行和串行差分两种数据输出接口。并行接口数据速率低,概念简单,便于实现,在本系统中采用并行接口,在后续开发中为了提高速度可考虑采用差分串行接口。
3.2 DM36X的I2C驱动移植
I2C(Inter-Integrated Cireuit)总线是由Philips公司开发的一种同步串行总线协议,其是一种多向控制线,可让多个芯片连接到同一总线结构上共同实施数据传输。DM36 X的I2C驱动架构如图6所示。
首先应用程序drv_i2c.c根据不同传感器的参数,将寄存器个数、寄存器地址位数寄存器值位数等配置信息存储在I2C_TRansferPrm结构中,其次通过I2C_IOCTL_CMD_MAKE()函数将这些具体的寄存器信息生成相应的命令。这些命令由ioctl()函数传递给内核空间中的设备驱动dev_i2c.c,在设备驱动程序中I2C_dev.Ioctl()函数对将对命令进行解析,根据不同的命令进行不同的操作,这里较为重要的两个命令是:(1)I2C_CMD_SET_DEV_ADDR,设置设备地址;(2)I2C_CMD_WRITE将用户空间的配置信息复制到内核空间,并存
储在I2C_TransferPrm结构中。最终通过I2C_write()、I2C_read()函数调用I2C_transfer()将数据发出。在I2C_write()、I2C_read()中都是以I2C_msg作为传输单元的。
struct I2C_msg {
_u16 addr;从设备地址
_u16 flags;标志位,区分读写等
_u16 len;消息单元长度
_u8 * buf;数据缓存,存储发送数据或者接收数据。
};
I2C_write()、I2C_read()函数的主要工作就是设置I2C_msg,将寄存器地址(regAddr)和寄存器值(regValue)写入I2C_msg的数据缓存buf中,并调用I2C_transfer进行数据传输,达到对传感器寄存器配置的目的。
根据以上分析可知,将I2C驱动移植到MT9M034上,只需修改应用程序drv_i2c.c和设备驱动程序dev_i2c.c即可,I2C_core及以下部分的内容属于内核部分,其接口都是统一针对Davinci平台下的,故无需进行分析和修改。由于MT9M034的寄存器是16 bit编址,故需增加16 bit寄存器读写函数DRV_i2cWrite16()、DRV_i2cRead16()。另外在I2C_Tra nsferPrm结构中增加16 bit寄存器地址指针;而且为了方便区分16 bit寄存器和8 bit寄存器,增加寄存器大小成员regSize。
在drv_i2c.c中增加I2C_write16()、I2C_read16()函数,这两个函数与I2C_write()、I2C_read()相似。只是在I2C_msg的数据缓存中存入regAddr[15:8]、regAddr[7:0]、regValue[15:8]、regValue[7:0],使I2C可读写16位数据。通过以上修改,I2C的驱动程序移植完成。
3.3 DM36X前端的驱动移植
I2C驱动移植完成后仅可使DM36X对图像传感器进行配置工作,为使DM36X成功接收来自传感器的视频数据,还需要对DM36X的视频处理前端(Video Processing Front End,VPFE)驱动进行相应的修改来添加新的传感器驱动程序。DM36X的DVSDK中已对VPFE驱动做了多次封装,将与图像传感器相关的代码隔离到了用户区,这样方便用户对源程序进行修改和移植,并根据不同的需要来添加已知型号的CMOS图像传感器驱动。通过对VPFE源程序的修改实现两个功能,一方面根据视频图像的分辨率和帧率等信息向DM36X驱动提供寄存器的配置信息,另一方面为MT9M034传感器提供以I2C为接口的控制和配置功能。
4 测试结果
确保硬件电路连接正确并上电后,将编译好的程序下载到DM36X中启动,打开远程PC机终端开启网页客户端或者VLC播放器输入用户名和密码,可显示1 280×720分辨率每秒30帧的视频图像,说明DM36X的驱动移植正确,并通过I2C总线将传感器配置成功。本系统的测试结果如图7所示,从图中可观察到在室内和室外光照强度相差较大的情况下,室内暗处和室外亮处的景物均可被观察到,具有较高的动态范围,保留了场景中绝大部分的细节,充分体现了本IP Camera的优势。
5 结束语
在安防领域,对于视频监控设备的要求不断的提高,本文是基于FPGA和DM36X联合硬件平台开发的一款高动态范围网络监控摄像机,通过对DM36X视频前端驱动的分析和移植,已完成DM36X对整个平台的控制工作,并实现1 280×720分辨率每秒30帧的实时播放。较传统的网络摄像机可更好地应对复杂光照场景,从而拍摄出较高动态范围的视频影像,使
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应用(06-21)
- 3DES算法的FPGA高速实现(06-21)
- 用FPGA实现FFT算法(06-21)
- FPGA的DSP性能揭秘(06-16)