基于OV2640/ OV5640 的图像采集显示系统系列文章目录:
(1)基于 OV5640 摄像头理论知识讲解-成像和采样原理
(2)基于 OV5640 摄像头理论知识讲解-数字接口和控制接口
(3)基于 OV5640 摄像头理论知识讲解-典型工作模式配置
(4)基于OV2640/ OV5640 的图像采集显示系统
文章目录
前言
基于 OV5640 摄像头理论知识讲解-数字接口和控制接口。
提示:以下是本篇文章正文内容,下面案例可供参考
一、OV5640 数字信号处理流程
1.影像处理器(ISP)
在经过前一阶段的图像感应核心(image sensor core)完成图像的模数转换之后,就得到了该图像的原始图像数字信息。但是实际我们在用相机的时候都知道,拍摄时我们可以根据不同的环境亮度调整对比图,调整亮度,等等,这些都是由一种名为影像处理器(Image Signal Processor,简称 ISP)的功能电路实现的。ISP 的功能包括但不限于以下内容:
扣暗电流(去掉底电流噪声)、线性化(解决数据非线性问题)、shading(解决镜头带
来的亮度衰减与颜色变化)、去坏点(去掉 sensor 中坏点数据)、去噪(去除噪声)、
demosaic(raw 数据转为 RGB 数据)、3A(自动白平衡,自动对焦,自动曝光)、gamma
(亮度映射曲线、优化局部与整体对比度)、旋转(角度变化)、锐化(调整锐度)、缩放
(放大缩小)、色彩空间转换(转换到不同色彩空间进处理)、颜色增强(可选,调整颜
色)等。
实际上,在不同的应用系统中,ISP 的功能差异也比较大,CMOS 图像传感器中也提供了有 ISP,对采样的图像数据进行一定的处理。以弥补图像传感器部分本身可能存在的某些误差和缺陷,同时也能对图像进行一定程度的增强。在很多专业的图像应用领域,都会使用独立的 ISP 对图像进行二次处理,以得到需要的效果。
2.压缩引擎(Compression Engine)
对于 500W 像素的图像传感器,其一幅图像总共有 500 万个像素,即使每个像素只用 8位数据,表示一种基本色,一幅图像的数据量也有 500 万个字节,也就是 5MB,更何况我们日常使用时,大多使用的是 RGB888 的图像格式,每个像素的颜色用 3 个字节表示,所以如果要按照这种数据量来计算,一幅 500 万像素的 RGB888 格式的图像,其数据量将高达 15MB,这么大的数据量无论是在存储到存储器中时对存储器容量的占用还是使用各种通信接口进行传输时对通信带宽的占用,都是非常大的。因此,为了解决这个问题,在很多应用场合中,例如相机拍照、视频录制、网络摄像头等应用中,大多使用压缩算法对原始数据进行压缩,压缩后的图片数据量会明显小于原始图像数据量,能够有效的降低对存储器或通信带宽的占用。对于图片压缩,使用的最普遍的算法就是 JPEG 压缩。JPEG 压缩算法具有压缩率高,图像失真小等特点。目前大部分数码相机、手机等拍摄得到的照片都是 jpeg 压缩后的图片。由于 jpeg 压缩算法对应用处理器的运算能力较高,为了满足更多应用场合对图片压缩功能的需求,OV5640 提供了一个内置的图像压缩引擎,能够将图像传感器采集到的图像数据按照 JPEG 标准进行压缩,然后再将压缩之后的图像数据输出。通过这种片上图像压缩引擎,明显降低了基于 OV5640 的应用系统中对应用处理器的算力需求。如果设置 OV5640 输出使用压缩引擎压缩后的图像,那么应用处理器只需要将 OV5640 输出的每帧图像中的所有数据接收并按顺序保存到一个.jpg文件中,得到的就是一张能够直接在电脑上直接打开的jpg图像。图像压缩引擎作为 OV5640 中一个标配功能,我们在实际应用时可以根据需求选择是否
需要使用。例如对于网络传输,图像存储类应用,压缩相对来说更有益处,而对于实时图像
处理类应用来说,则使用未经压缩的图像数据将更加方便高效。
3.格式化处理器(Formatter)
在经过图像传感器,模数转换器和 ISP 之后,得到的数据依旧是原始的 RAW 格式,这样的图像数据是无法直接在数字显示屏上显示的,需要进行 RAW 转 RGB 算法,但是 RAW 转RGB 算法又会占用较高的应用处理器的计算能力。另外,在很多应用中,不仅对数据格式有要求,对数据量也有较高的要求,例如在某些对图像质量要求不高的场合,无需使用 RGB888这种真彩色,使用 RGB565(用 16 位数据表示一个颜色,高 5 位表示红色,中 6 位表示绿色,低 5 位表示蓝色)这种伪真彩色表示方法就能满足需求。而使用 RGB565 模式就能比RGB888 模式降低 1/3 的数据量。同时,在一些应用领域,如图像处理、图像识别,一般使用亮度和色度分离的 YUV 格式更加方便,而 YUV 格式有包括无损的 YUV444 格式和有损的YUV422 以及 YUV420,所以为了满足不同应用场景的需求,OV5640 内置了一个图像格式转换器,能够将原始 RAW 数据转换为 RGB888、RGB666、RGB565、RGB555、YUV444、YUV422、YUV420 等。这样,当开发应用系统时,就能根据应用处理器的运算能力和对图像格式的实际需求灵活选择合适的图像格式输出。
二、OV5640 数字接口
OV5640 是一个图像传感器,作为一个图像传感器,其最基本的工作就是采集图像数据并输出,所以就存在输出数据接口。而同时,在前面介绍格式转换功能模块的时候也说过,为了支持不同的应用场景,OV5640 可以输出不同格式的图像数据,这就意味着 OV5640 的一些工作模式是需要在实际使用的过程中去现场定义的。因此必然存在着 OV5640 和应用处理器交互一些控制信息的情况,事实上,不仅仅是格式转换模块,OV5640 中的几乎所有模块都有众多的寄存器来确定其工作参数。所以,对于一个图像传感器,一般都存在两类接口,一个是用于图像数据流输出的数据流接口,一个是用于接受应用处理器各种设置参数的控制接口。
1.工作时钟
首先来说,OV5640 是一个典型的模数混合器件,既然有数字电路,就一定需要有基本的工作时钟。OV5640 的时钟从 XCLK 引脚输入,该时钟默认固定频率为 24MHz。要想 OV5640能够开始工作,提供该 XCLK 时钟必不可少。无论是数据流接口还是控制接口,正常工作的前提就是 XCLK 已经稳定的供应。
2.数据流接口
对于图像传感器来说,常见的数据流接口包括 DVP 接口、LVDS 接口、CSI(MIPI)接口
DVP 接口
DVP 接口是最为经典的图像数据流接口,其本质是一个包含控制信号和数据信号的并行
数据端口,使用单端 TTL 电平进行通信。DVP 接口包括时钟信号(PCLK)、行有效信号(HREF)、场同步信号(VSYNC)、8 位或更多位的数据信号。图像传感器使用 DVP 接口与应用处理器连接示意图如下所示:
VSYNC 信号每个高脉冲标志着新一帧图像的开始,在 HREF 为高电平期间,每个 PCLK,
8 位 DATA 数据线输出一个数据。每个数据的意义根据当前设置的输出图像格式不同而有所
差异。下图为 OV7670 输出标准 VGA 分辨率(640*480)图像时候的时序图。(由于 OV5640
手册中没有提供这个时序图,因此截取了 OV7670 中的图示,两者从原理上是完全一致的)
图上,tp 为每一个像素所占用的时钟周期个数,如果输出的是原始的 RAW 格式,则 tp = 1PCLK,如果输出的是 RGB 或者 YUV 格式,则 tp=2PCLK。也就是说,如果输出的是 RGB
或者 YUV 格式,则每行(Row)有 640*2 个字节的数据输出。
LVDS 接口
随着图像传感器的像素密度越来越高,其输出数据量也大幅增加,由于传统的 DVP 接
口采用的是单端 TTL 并行接口,这种接口模式 IO 翻转速率上限受限,当数据量超过一定的
值之后,DVP 接口就无法再满足全部数据的传输。为此,能够显著提升数据传输速率的低压
差分串行传输接口(LVDS)就应用到了图像传感器的数据流接口上。LVDS 接口采用差分电
平传输,每个信号都使用两根信号线传输数据,接收端通过这两根信号线之间的电压差来确
定接收到的数据是 0 还是 1,采用差分传输方式能够显著提升信号线的抗干扰能力,所以
LVDS 的传输速率相对较高。图像传感器使用 LVDS 接口传输图像信息,不仅能满足高带宽的
通信需求,还能提高信号传输的抗干扰能力。目前 LVDS 接口的图像传感器主要用于工业相
机等场合,索尼的 imx290、imx327 等图像传感器都支持使用 LVDS 作为数据流传输接口。
LVDS 接口传输的数据内容实质也就是将 DVP 接口的各个信号编码到 LVDS 传输协议中传输
的,传输的数据本质还是 DVP 接口的那些信号和时序。
CSI 接口
CSI 接口属于 MIPI 接口的一种,全称为摄像机串行接口(Camera Serial Interface),CSI 接
口物理层使用 LVDS 接口传输,但是在数据内容层发生了变化。CSI 接口不仅能够传输数据流
内容,还能传输控制数据,目前 CSI 接口在多媒体数字终端(手机、平板电脑)等设备中应
用非常广泛。
无论是 DVP 接口,还是 LVDS 接口、CSI 接口,其最终的目的都是将数据输出给应用处
理器。具体使用什么接口需要看应用处理器的连接能力。这其中,DVP 接口对应用处理器的
IO 能力要求较低,只需要能支持 TTL 电平即可。而 LVDS 接口则需要 IO 口能够提供相应的
LVDS 电平以及数据传输能力。CSI 接口,不仅需要应用处理器能够接受 LVDS 电平,还需要
能够解码 CSI 协议。现代的各种多媒体处理器大多自带 CSI 功能接口硬件,因此能够直接连
接 CSI 接口的图像传感器。而 FPGA 一般支持 DVP 接口和 LVDS 接口,对于 CSI 接口,要支持
的话需要有对应的 CSI 协议 IP。所以除非是必须要使用 CSI 接口,否则目前的 FPGA 在连接
摄像头时,大多还算使用 DVP 接口和 LVDS 接口。本节内容仅概念性简单介绍 CSI 接口,不
对 CSI 接口及其协议做系统讲解。
三、控制接口
目前来说,几乎所有的图像传感器都是使用了一种标准的串行摄像头控制总线(Serial
Camera Control Bus,简称 SCCB)来作为控制接口。所谓串行摄像头控制总线,虽然看名字
貌似是摄像头的一个专属总线,但是实质上,其就是 I2C 总线的一个小变种而已。OmniVision
(OV5640 生产厂家)提供了一个名为《OmniVision Serial Camera Control Bus (SCCB) Functional Specification》的文档介绍 SCCB 接口。
总的来说:
从写寄存器操作来说。SCCB 和 I2C 的写寄存器时序完全一致。直接使用原有的I2C 总线协议的写寄存器操作就能完成对图像传感器的寄存器写操作。
当从图像传感器中的寄存器读取一个数据时,SCCB 协议仅比 I2C 协议多一个停止位,其他部分完全一样。为了解释这个停止位差别,以下用图示说明。
图中上方为标准 I2C 协议读取一个地址中数据的时序图,下方为 SCCB 协议读取一个地址中数据的时序图,两者的差异以红色线条的形式标记出来。可以看到:对于 I2C 协议,其在执行读的过程中,当第二次传输(word address)传输完成之后,直接产生了新的起始位并开始再一次传输控制字节;对于 SCCB 协议,其在执行读的过程中,当第二次传输(wordaddress)传输完成之后,是先产生了一个停止位,然后再产生新的起始位并开始再一次传输控制字节的。两者仅有此差别。
此部分参考文章:
(1)I2C 接口控制器理论讲解
(2)I2C接口控制设计与实现
(3)I2C连续读写实现
(4)SCCB与IIC区别
四、复位控制
复位控制,这个貌似是在很多应用中不太关注的一个问题,但是事实上,在笔者所协助调试的很多系统程序中,因为复位时序不符合要求导致器件不正常工作的案例常有发生,一般的器件都会在其 datasheet 中提供其上电和复位时序要求,OV5640 也不例外,下图为 OV5640 器件手册中提供的 OV5640 的上电复位时序图。
据此可以总结出对于 OV5640 的从上电到开始读写寄存器的一个基本的控制顺序:
1、 PWDN 和 RESET 都为低电平。
2、 等待 PWDN
3、 等待至少 1ms 的时间,此期间 RESET 一直为低电平,然后拉高 RESET 信号
4、 RESET 拉高之后,再等待至少 20ms 的时间
5、 开始通过 SCCB 读写 OV5640 的寄存器
6、 XVCLK 提前操作 SCCB 的 1ms 时间一般都能满足,所以一般情况下可以不用关心。