FPGA 第2章 摄像头驱动讲解

参考文献
图像采集——OV5640摄像头简介、硬件电路及上电控制的Verilog代码实现并进行modelsim仿真
https://blog.csdn.net/H19981118/article/details/115503184


前言

本文介绍OV5640摄像头相关知识。


一、OV5640简介

OV5640 是一款 1/4 英寸单芯片图像传感器,其感光阵列达到 25921944(即 500W 像素),能实现最
快 15fps QSXVGA(2592
1944)或者 90fps VGA(640*480)分辨率的图像采集。

传感器内部集成了图像处理的功能,包括自动曝光控制(AEC)、自动白平衡(AWB), 以及 自动聚焦控制(AFC)等功能。

传感器支持MIPI(移动产业处理器接口)输出接口和 DVP(数字视频并行)输出接口选择、ISP(图像信
号处理)。

二、功能框图

请添加图片描述
(1)
时序发生器(timing generator)控制着感光阵列(image array)、放大器(AMP)、AD转换。感光阵列将光信号转化成模拟信号,经过增益放大器之后进入 10 位 AD 转换器;AD 转换器将模拟信号转化成数字信号,并且经过 ISP 进行相关图像处理,最终输出所配置格式的 10位视频数据流。
(2)
时序发生器(timing generator)输出外部时序信号(VSYNC、HREF 和 PCLK),输入时钟 XVCLK 经过 PLL 锁相环后输出的时钟作为系统的控制时钟。
(3)
增益放大器控制以及 ISP 等都可以通过寄存器(registers)来配置,配置寄存器的接口就是SCCB 接口,该接口协议兼容 IIC 协议,不同的是,OV7725 是用 8 位(1 个字节)来表示寄存器地址,而 OV5640 是用 16 位(两个字节)表示寄存器地址。

三、传输协议

OV5640 SCCB 的写传输协议如下图所示:
请添加图片描述
ID ADDRESS 是由 7 位器件地址和 1 位读写控制位构成(0:写 1:读),OV5640 的器件地址为 7’h3c,所以在写传输协议中,ID Address(W)= 8’h78(器件地址左移 1 位,低位补 0)。

Sub-address(H)为高 8 位寄存器地址,Sub-address(L)为低 8 位寄存器地址,在 OV5640 众多寄存器中,有些寄存器是可改写的,有些是只读的,只有可改写的寄存器才能正确写入;Write Data 为 8 位写数据。

每一个寄存器地址对应 8 位的配置数据。在 OV5640 正常工作之前,必须先对传感器进行初始化,即通过配置寄存器使其工作在预期的工作模
式,以及得到较好画质的图像。这么多寄存器也并非都需要配置,很多寄存器可以采用默认的值。OV 公司提供了 OV5640 的软件应用手册,下表是本程序用到的关键寄存器的配置说明。

请添加图片描述

请添加图片描述

四、输出图像餐宿设置

介绍 OV5640 的 ISP 输入窗口设置、预缩放窗口设置、输出大小窗口设置

请添加图片描述
(1)
ISP 输入窗口设置(ISP Input Size)允许用户设置整个传感器显示区域(physical pixel size,2632x1951,其中 2592x1944 像素是有效的),开窗范围从 0*0~2632x1951 都可以任意设置。也就是上图中的 X_ADDR_ST(寄存器地址 0x3800、0x3801)、Y_ADDR_ST(寄存器地址 0x3802、0x3803)、
X_ADDR_END(寄存器地址 0x3804、0x3805)和 Y_ADDR_END(寄存器地址 0x3806、0x3807)寄存器。该窗口设置范围中的像素数据将进入 ISP 进行图像处理。
(2)
预缩放窗口设置(pre-scaling size)允许用户在 ISP 输入窗口的基础上进行裁剪,用于设置将进行缩放的窗口大小,该设置仅在 ISP 输入窗口内进行 X/Y 方向的偏移。可以通过 X_OFFSET(寄存器地址0x3810、0x3811)和 Y_OFFSET(寄存器地址 0x3812、0x3813)进行配置。
(3)
输出大小窗口设置(data output size)是在预缩放窗口的基础上,经过内部 DSP 进行缩放处理,并将处理后的数据输出给外部的图像窗口,图像窗口控制着最终的图像输出尺寸。可以通过 X_OUTPUT_SIZE(寄存器地址 0x3808、0x3809)和 Y_OUTPUT_SIZE(寄存器地址 0x380A、0x380B)进行配置。注意:
当输出大小窗口与预缩放窗口比例不一致时,图像将进行缩放处理(图像变形),仅当两者比例一致时,输出比例才是 1:1(正常图像)。
(4)
上图 的图像窗口设置中,右侧 data output size 区域,才是 OV5640 输出给外部的图像尺寸,也就是显示在显示器或者液晶屏上面的图像大小。输出大小窗口与预缩放窗口比例不一致时,会进行缩放处理,在显示器上面看到的图像将会变形。

五、输出像素格式

OV5640 支持多种不同的数据像素格式,包括 YUV(亮度参量和色度参量分开表示的像素格式)、RGB(其中 RGB 格式包含 RGB565、RGB555 等)以及 RAW(原始图像数据)通过寄存器地址 0x4300配置成不同的数据像素格式。

如果摄像头采集的图像最终要通过 LCD 显示,可以将 OV5640 摄像头输出的图像像素数据配置成RGB565 格式。将寄存器 0x4300 寄存器的 Bit[7:4]设置成 0x6 即可。OV5640支持调节 RGB565 输出格式中各颜色变量的顺序,对于我们常见的应用来说,一般是使用 RGB 或 BGR 序列。

我们可以将 OV5640 输出的 RGB565 的颜色顺序按照 RGB 的顺序输
出,将寄存器 0x4300 寄存器的Bit[3:0]设置成 0x1。

当外界环境光较暗时,传感器采集图像会受到较大影响,此时可以通过打开 LED 补光灯来弥补光照不足所带来的影响,就像手机在夜晚拍照时也会打开闪光灯来提高图像质量。通过配置寄存器0x3016=0x02,0x301c=0x02 来使能 LED 补光灯功能;配置寄存器 0x3019=0x02 打开闪光灯,0x3019=0x00关闭闪光灯。

六、图像输出时序

QSXGA,指:分辨率为 2592x1944 的输出格式,类似的还有:QXGA(2048x1536)、UXGA(1600x1200)、SXGA(1280x1024)、WXGA(1440x900)、WXGA(1280x800)、XGA(1024x768)、SVGA(800x600)、VGA(640x480)、QVGA(320x240)、QQVGA(160x120)等。
(1)
PCLK:像素时钟,一个 PCLK 时钟输出一个像素或者半个像素(像素数据的高 8 位或者低 8 位)。
(2)
VSYNC:帧同步信号。
(3)
HREF/HSYNC:行同步信号。
(4)
D[9:0]:像素数据,在 RGB565 格式中,只有高 8 位是有效的。
(5)
tPclk:一个时钟周期 。
tp:一个像素点的周期,在 RGB565 和 YUV422 输出格式下,tp=2*tPclk;Raw 输出格式下,tp=tPclk。
(6)
下图为 OV5640 输出图像数据的行时序图
请添加图片描述

从上图可以看出,传感器在 HREF 为高电平的时候输出图像数据,当 HREF 变高后,每一个 PCLK时钟,输出一个 8 位或者 10 位像素数据。比如我们采用 QSXGA 时序,RGB565 格式输出,tp=2tPclk,每 2 个字节组成一个像素的颜色,这样每行总共输出 25922 个 PCLK,也就是 25922 个字节。
(7)
帧时序(QSXGA 模式,分辨率 2592
1944),如下图所示:
请添加图片描述
由上图可知,VSYNC 的上升沿作为一帧的开始,高电平同步脉冲的时间为 5688tp,紧接着等待48276tp 时间后,HREF 开始拉高,此时输出有效数据;HREF 由 2592tp 个高电平和 252tp 个低电平构成;
最后一行图像数据输出完成之后等待 14544tp 时间,一帧数据传输结束。所以输出一帧图像的时间实际上是 tFrame = 5596992tp。

(2592 + 252)x1944+5688+48276+14544-252=5596992

这里到底像素时钟是多少,有分歧,但是可以知道的是:PCLK是 OV5640输出数据时的同步信号,它是由 OV5640 输出的信号。
而XCLK为工作时钟,可以外接晶振或由外部控制器提供。
但是如果真的需要手动计算像素时钟那么公式如下
因此这里对于DVP 640 * 480 * 30fps标准来说,像素时钟的求解方式 : 物理分辨率 * 帧率 = 784 * 510 * 30 = 12Mhz

七、硬件设计

请添加图片描述

(1)
模块自带有源晶振,用于产生 24MHz 时钟作为 OV5640 的输入时钟。模块的闪光灯(LEDI&LED2)由OV5640 的 STROBE 引脚控制,用户可通过 SCCB 接口总线控制 STROBE 引脚输出高低电平,从而控制LED 闪光灯的亮灭。用户在使用 LED 灯时不建议一直点亮或者点亮时间太长。因为 LED 闪光灯功率较高,发光强度较强,模块温度上升会比较快,会造成器件的可靠性降低,同时注意避免直接照射人眼。
(2)
OV5640 在 RGB565 模式下只有高 8 位数据是有效的即 D[9:2],而摄像头排针上数据引脚的个数是 8 位。实际上,摄像头排针上的 8 位数据连接的就是 OV5640 传感器的 D[9:2],所以我
们直接使用摄像头排针上的 8 位数据引脚即可。
(3)
摄像头相关管脚分配
请添加图片描述
请添加图片描述


总结

本文介绍了ov5640摄像头驱动内容。

  • 33
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值