注释:配置方法由其他博文复制整理而来,不是个人原创,感恩原作者
图像传感器(sensor)概述:
现在用的传感器主要有两种:一种是CCD,另一种是CMOS,现在主流的是CMOS
对于CCD传感器,其输出的是带制式的模拟信号,需要经过视频解码后得到数字信号
对于CMOS传感器,其直接输出数字信号,可以直接与控制器连接
像素部分
那么对于像素部分,我们常常听到30万像素,120万像素等等,这些代表着什么意思呢?图37.5解释了这些名词。
图37.5
那么由上面的介绍,可以得出,我们以30万像素为例, 30万像素 ~= 640 * 480 = 30_7200;可见所谓的像素数也就是一帧图像所具有的像素点数,我们可以联想图像处理的相关知识,这里的像素点数的值,也就是我们常说的灰度值。像素数越高,当然显示的图像的质量越好,图像越清晰,但相应的对存储也提出了一定的要求,在图像处理中,我们也会听到一个概念,叫做分辨率,其实这个概念应该具体化,叫做图像的空间分辨率,例如72ppi,也就是每英寸具有72个像素点,比较好的相机,能达到490ppi。
1、OV7725的引脚以及驱动
OV7725的引脚很多,但本系统中用到的OV7725模块只包含以下一些引脚:
D0~D9: CMOS输出的10位数据口.本实例只用到D2~D9。
RESET: CMOS输入信号,复位引脚,低电平有效。本实例将其置空
PWDN: CMOS输入信号,休眠模式选择,0为正常模式,1为休眠模式。本实例将其置空
PCLK: CMOS输出的像素时钟
XCLK: CMOS输入的时钟信号,本实例采用25MHz。
HREF: CMOS输出的行同步信号
VSYNC: CMOS输出的帧同步信号
SIOC: CMOS寄存器的IIC时钟输入
SIOD: CMOS寄存器的IIC数据输入/输出
因为用到的引脚数量并不多,因此我们选择用Zedboard上JA,JB两组Pmod接口与OV7725模块相连。OV7725的驱动包含两个操作:1.配置寄存器 2.根据传入的时序信号(PCLK,HREF,VSYNC),对传入数据进行拼接,组合成RGB像素。
n 配置寄存器
OV7725的正常工作需要寄存器的正确配置。寄存器的配置遵从IIC协议,在PL提供的IIC时钟驱使下,向不同功能的寄存器地址写入数据。本实例构建了一个IIC的主模块,寄存器配置指令只需要两条即可:
0x1100;//11为CLKRC寄存器,设置为00值,采用内部时钟
0x1206;//分辨率设置为VGA 640x480,像素输出格式设置为RGB565
n 拼接数据得到像素RGB565
OV7725像素格式为RGB565时,时序图如下:
当帧同步信号VSYNC出现有效边沿之后,在HREF为高电平时,第一个PCLK上升沿读取第一个byte(D7~D0)。此时要注意,这个byte并不代表第一个像素,而是第一个像素的R[4:0]以及G[5:3],第二个PCLK上升沿读取的byte则是第一个像素的G[2:0]以及B[4:0]。当第二个PCLK上升沿到来时,将这两个byte组合成一个完整的像素,就得到了第一个像素。以此类推,采集一行数据(640x2个数据),就得到640个像素值。当采集完480行的时候,就完成了一帧数据的采集。
由OV7725的VGA时序可知,每一行有效时间为640x2个pclk,无效时间为144x2个pclk,每一行花费时间为784x2个PCLK时钟;而每一帧总行数是510(有效行数是480);因此采集一帧数据的时间是784*510x2个pclk的时间。