二、OV2640数据读取过程
- OV2640模块初始化
- 初始化IO口
- 上电并复位
- 读取传感器ID
- 执行初始化序列
- 完成初始化
2. OV2640数据读取
如图2.1 OV2640行输出时序图所示,OV2640图像数据(D[9:0]同Y[9:0])输出是由HREF和PCLK控制的。图像数据在 HREF 为高的时候输出,当 HREF 变高后,每一个PCLK 时钟,输出一个 8 位/10 位数据,在一行数据输出完后HREF输出一个电平跳变信号。我们采用8位接口,所以每个 PCLK 输出 1个字节,且在 RGB/YUV输出格式下,每个tp=2个Tpclk,如果是 Raw 格式,则一个tp=1个Tpclk。比如我们采用 UXGA时序, RGB565 格式输出,每 2个字节组成一个像素的颜色(高低字节顺序可通过0XDA寄存器设置),这样每行输出总共有1600*2个PCLK 周期,输出1600*2个字节。在UXGA模式下PCLK最高可达36Mhz。
图2.1 OV2640行输出时序图
上述行数据读取过程在RGB565格式输出下,如图2.2 RGB565输出格式下行数据读取流程图所示。
如图2.3 UXGA模式图像帧同步时序图,UXGA(1600*1200),一行1600个像素,共有1200行,在HERF为高电平时,读取每行数据,一帧数据读取完后VSYNC输出一个电平跳变信号,VSYNC的高有效还是低有效自行设定。
图2.2 RGB565输出格式下行数据读取流程图
图2.3 UXGA模式图像帧同步时序图
OV2640 的图像数据格式,我们一般用 2 种输出方式:RGB565和JPEG。当输出RGB565 格式数据的时候,时序完全就是上面两幅图介绍的关系。以满足不同需要。而当输出数据是JPEG数据的时候,同样也是这种方式输出(所以数据读取方法一模一样),不过 PCLK数目大大减少了,且不连续,输出的数据是压缩后的 JPEG 数据,输出的JPEG数据以:0XFF,0XD8 开头,以 0XFF,0XD9结尾,且在 0XFF,0XD8之前,或者 0XFF,0XD9 之后,会有不定数量的其他数据存在(一般是0),这些数据我们直接忽略即可 ,将得到0XFF,0XD8~0XFF,0XD9之间的数据,保存为.jpg/.jpeg文件,就可以直接在电脑上打开看到图像了。OV2640自带的JPEG输出功能,大大减少了图像的数据量。
三、OV2640窗口设置
- 传感器窗口设置(OV2640_Window_Set)
传感器窗口设置允许用户设置整个传感器区域(1632*1220)的感兴趣部分,也就是在传感器里面开窗,开窗范围从2*2~1632*1220都可以设置,不过要求这个窗口必须大于等于随后设置的图像尺寸。传感器窗口设置,通过0X03/0X19/0X1A/0X07/0X17/0X18等寄存器设置。
2. 图像尺寸设置(OV2640_ImageSize_Set)
也就是DSP输出(最终输出到LCD的)图像的最大尺寸,该尺寸要小于等于前面我们传感器窗口设置所设定的窗口尺寸。图像尺寸通过:0XC0/0XC1/0X8C等寄存器设置。
3. 图像窗口设置(OV2640_ImageWin_Set)
其实和前面的传感器窗口设置类似,只是这个窗口是在我们前面设置的图像尺寸里面,再一次设置窗口大小,该窗口必须小于等于前面设置的图像尺寸。该窗口设置后的图像范围,将用于输出到外部。图像窗口设置通过:0X51/0X52/0X53/0X54/0X55/0X57等寄存器设置。
4. 图像输出大小设置(OV2640_OutSize_Set)
控制最终输出到外部的图像尺寸。该设置将图像窗口设置所决定的窗口大小,通过内部DSP处理,缩放成我们输出到外部的图像大小。该设置将会对图像进行缩放处理,如果设置的图像输出大小不等于图像窗口设置图像大小,那么图像就会被缩放处理,只有这两者设置一样大的时候,输出比例才是1:1的。图像输出大小通过:0X5A/0X5B/0X5C等寄存器设置。
示意图如图3.1 OV2640图像窗口设置简图所示,最终输出图像大小最大为1600*1200。
图3.1 OV2640图像窗口设置简图