【博文连载】OV7725寄存器介绍
首先介绍一下OV7725的寄存器。OV7725总共有172个寄存器,作为CMOS Sensor的工作模式的配置。而这172个寄存器,有些只读,有些则同时支持读写功能。在传感器正常工作工作前,必须进行寄存器的初始化,不然无法得到预期,更得不到较好画质的图像。而这172个寄存器,就是我们需要通过SCCB总线接口进行配置的目标。在实现SCCB总线协议的基础上,实现寄存器的配置,以保证预期模式图像的输出。当然这172个寄存器也并非都需要配置,很多寄存器都可以采用默认的值。
关于寄存器的配置,OmniVision给出了有关于OV7725模式配置的官方手册——《OV7725 Camera Module Software Application Notes》。手册包括了时钟、阵列的配置,夜间模式的配置,白平衡的配置等。相关模式的配置可以参照此手册,以保证初始化的正确。
由于OV7725寄存器的数据之多,同时每一个寄存器都包括了多个参数的设定,Bingo无法一一进行介绍。Bingo在此主要介绍跟视频图像流、采样画质、输出格式等比较重要的几个寄存器,如下表所示:
Bingo在开发OmniVision CMOS Sensor时,花了很长时间研究OV7725的寄存器,以及所需配置的寄存器。最终Bingo通过Verilog HDL模拟I2C时序,完成OV7725寄存器的初始化,实现预期模式的视频流输出。寄存的初始化并没有严格的顺序,不过Bingo一般会将重要的一些模式配置放在配置列表前,方便参数的修改。相关模式的设计可以参考《OV7725 Camera Module Software Application Notes》,Bingo也是在现有的基础上,进行一定的修正。
为此Bingo新建I2C_OV7725_RGB565_Config.v,作为OV7725的寄存器初始化列表。在I2C总线的寄存器配置时,通过寄存器列表的查找,完成参数的初始化。I2C_OV7725_RGB565_Config相关信号列表如下所示:
接着,介绍一下OV7725寄存器的配置流程。OV7725的寄存器读写配置,在SCCB总线时序的基础上,还具有一定的流程。通过器件地址、寄存器地址,以及寄存器等参数的配置,完成寄存器的读写操作。OV7725主要有读、写寄存器2种模式,详细介绍如下:
(1) SCCB总线寄存器的写入时序
SCCB总线在写寄存器时,先写设备地址,再写寄存器地址,最后写入寄存器的值,完成一个寄存器的配置,即 ID-Address + SUB-Address + W-Data的流程,如下图所示:
Phase 1:CMOS Sensor的唯一ID地址。OmniVision相机的设备地址为0x42,而其中最后一位是用来判断读写的,即写的时候ID地址为0x42(读的时候ID地址为0x43)。
Phase 2:针对于SCCB总线的写操作而言,我们需要关心的是Sub-address,而这个地址就是传感器需要配置的寄存器的地址。
Phase 3:即针对Phase 2所指定的寄存器地址,传输所设定的寄存器数据。
(2) SCCB总线寄存器读取时序
相对于SCCB总线的写入时序而言,SCCB总线的读取流程稍微复杂一点,步骤上需要写入两次设备ID,如下图所示:
Phase 1:CMOS Sensor的唯一ID地址,此时为寄存器读操作的写入部分,ID为0x42。
Phase 2:写入需要读取的寄存器地址,与SCCB的寄存器地址写入一样。
Phase 3:CMOS Sensor的唯一ID地址,此时为寄存器读操作的读取部分,ID为0x43(0位置高)。
Phase 4:读取CMOS Sensor发送的指定寄存器的值。
Okay,了解了OV7725的SCCB接口,及Bingo设计的i2c_timing_ctrl驱动模块,熟悉了OV7725的寄存器内容与配置方式,掌握了OV7725的寄存器配置流程,结合I2C_OV7725_RGB565_Config模块,与i2c_timing_ctrl模块,我们完成了OV7725的寄存器初始化。