OV7725的SCCB总线,实际上便是我们常用的I2C通信总线,这在前文已经提到过,只不过OmniVision针对Camera的掌握,专门供应了一个术语。OV7725的SCCB接口有两个旗子暗记,即时钟旗子暗记SCL、数据旗子暗记SDA。OV7725通过这两个旗子暗记,完成寄存器的配置,实现预期配置的视频流输出。
Bingo曾在2012年的时候写过《从零开始走进OV7670天下》,详细的先容了OV7725的SSCB(I2C)接口的HDL初始化,先容了CMOS视频数据的采集,同时先容了YUV2RGB等内容。由于OV7760与OV7725属于OmniVision的同系列数字相机,驱动办法与时序完备一样,因此SCCB总线的初始化可以参照该手册。I2C/SCCB总线制办法大略,器件封装形式小,紧张有一下几个特点:

(1) I2C总线只须要两条总线:一条串行数据线SDA,一条串行时钟线SCL
(2) I2C总线不须要片选就可以实现多个设备的链接,并且通过从机为唯一地址识别器件,通过地址的相应,完成每一个器件的配置
(3) I2C是一个真正的多主机总线,如果多个主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被毁坏
(4) 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s
(5) 连接到相同总线的IC 数量只受到总线的最大电容400pF 限定
官方手册给出了SCCB总线8Bit数据串行发送的时序图,如下图所示(个中SCCB_E作为I2C的使能旗子暗记,类似于SPI总线的CS旗子暗记,这里我们不须要关心):
SCCB总线通过串行办法发送8Bit数据,先发送MSB,再发送LSB,与SPI总线协议的数据发送很类似(除了不须要SPI_CS)。在发送完8Bit数据后,通过器件的相应旗子暗记,完成一次数据的传输。
良久前在《从零开始走进OV7670天下》中,Bingo移植并优化了Terasic的I2C掌握器;但是可读性和bug实在太多,因此后面花了九牛二虎之力,自己大淘了一套I2C读写代码,每一个代码都经由苛刻的追求,无数次Modelsim+CMOS测试(虽然完美是没有极限的)。在没个Sensor采集工程中的cmos_i2c_oVxxxx,均可找到i2c_timing_ctrl.v文件,该模块完全的描述了I2C时序,实现了CMOS Sensor的SCCB寄存器读写功能。详情请仔细剖析i2c_timing_ctrl.v文件,Bingo在状态机的根本上完美的实现了I2C总线时序的封装,接口及例化如下所示:
从接口例化中可见,Bingo还额外的为OV7725 SCCB初始化配套的设计了寄存器接口,如下表所示(部分参照了Terasic的代码):










