CMOS图像传感器使用的SCCB总线协议

 

SCCB 是OmniVision 公司定制的串行摄像头控制总线(Serial Camera Control Bus)  ,它用于对摄像头的寄存器进行读写,以达到对摄像头输出图像的控制。两线制SCCB 与I2C 总线类似,是一种双向二线制同步串行总线。SCCB 的数据传输由主器件控制,主器件能够发出数据传输启动信号、时钟信号以及传送结束时的停止信号。通常主器件都是微处理器,它寻址访问的设备称为从器件。为了进行通讯,每个接到SCCB 的设备都有一个唯一的地址( ID) ,使用软件来识别总线上的从器件,省去了从器件的片选。因此,只需要两根线(串行时钟线SIO C 和串行数据线SIO D) ,挂接到总线上的器件就能相互进行信息传递,SCCB 接口的电气结构如图1 所示。组成SCCB 的SIO C 和SIO D必须经过上拉电阻RP 接到正电源上,连接到总线的器件的输出级必需为“开漏”或“开集”的形式,以便在多个主或从需求仲裁的况下完成线与的功能。在SCCB 协议中定义开始和停止条件如下:开始条件:在SIO C 为高电平时,SIO 出现一个下降则SCCB 开始传输;停止条件:在SIO C 为高电平时,SIO D 出现一个上升沿,则SCCB 停止传输。除了开始和停止状态,在数据传输时,当SIO C 为高电平时,必需保证SIO D上的数据的稳定,也就是说,SIO D 上的数据只能在SIO C 为低电平时改变。
      与I2C 总线类似,SCCB 的基本传输格式如图3所示,完整的数据传输包括两个或三个阶段。每一阶段包中含9 位二进制数据,其中高8 位为所要传输的8 位数据,最低位根据主器件的数据传输是读操作还是写操作而确定。在进行主器件写操作时,全部阶段的最低位均是无关位(低或高电平均可) ;读操作时,第一阶段的最低位是无关位,第二阶段的最低位位NA ———主器件驱动为高电平有效。
     在SCCB 协议定义了两种写操作,即三相写操作和两相写操作。三相写操作是往从器件的目的寄存器中写入数据。在三相写操作中,第一阶段写从器件的8 位IDW 和无关位,第二阶段写从器件目标寄存器的8 位地址和无关位,第三阶段写要求写入寄存器的8 位数据和无关位;两相写操作只有三相写操作的前两个阶段。两相写操作的目的是
为了确定读操作中的从器件地址,这是因为两相读操作不能提供所要求读取的寄存器的地址。SCCB 协议定义了两读操作,它用于读取从器件目的寄存器中的数据。在第一阶段中写从器件读操作8 位IDR 和无关位,在第二阶段中读取寄
存器中的8 位数据和写NA bit 。在两阶段读循环操作前,必需有一个两相或三相的写循环操作,以提供读操作中的寄存器地址

 

 

SCCB是简化的I2C协议,SIO-l是串行时钟输入线,SIO-O是串行双向数据线,分别相当于I2C协议的SCL和SDA。SCCB的总线时序与I2C基本相同,它的响应信号ACK被称为一个传输单元的第9位,分为Don’t care和NA。Don’t care位由从机产生;NA位由主机产生,由于SCCB不支持多字节的读写,NA位必须为高电平。另外,SCCB没有重复起始的概念,因此在SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。不然在发送读命令时,从机将不能产生Don’t care响应信号。

由于I2C和SCCB的一些细微差别,所以采用GPIO模拟SCCB总线的方式。SCL所连接的引脚始终设为输出方式,而SDA所连接的引脚在数据传输过程中,通过设置IODIR的值,动态改变引脚的输入/输出方式。SCCB的写周期直接使用I2C总线协议的写周期时序;而SC-CB的读周期,则增加一个总线停止条件。

SCCB是和I2C相同的一个协议。    SIO_C和SIO_D分别为SCCB总线的时钟线和数据线。目前,SCCB总线通信协议只支持100Kb/s或400Kb/s的传输速度,并且支持两种地址形式:①从设备地址(ID Address,8bit),分为读地址和写地址,高7位用于选中芯片, 第0位是读/写控制位(R/W),决定是对该芯片进行读或写操作;②内部寄存器单元地址(Sub_ Address,8bit),用于决定对内部的哪个寄存器单元进行操作,通常还支持地址单元连续的多字节顺序读写操作。SCCB控制总线功能的实现完全是依靠SIO_C、SIO_D两条总线上电平的状态以及两者之间的相互配合实现的。SCCB总线传输的启动和停止条件如图


过程:采用简单的三相(Phase)写数据的方式,即在写寄存器的过程中先发送OV7649的ID地址(ID Address),然后发送写数据的目地寄存器地址(Sub_address),最后发送要写入的数据(Write Data),见图3。如果给连续的寄存器写数据,写完一个寄存器后,OV7649会自动把寄存器地址加1,程序可继续向下写,而不需要再次输入ID地址,从而三相写数据变为了两相写数据,由于本系统只需对有限个不连续寄存器进行配置,如果采用对全部寄存器都加以配置这一方法的话,会浪费很多时间和资源,所以我们只对需要更改数据的寄存器进行写数据。对于每一个需更改的寄存器,都采用三相写数据的方法。

你可能感兴趣的:(CMOS图像传感器使用的SCCB总线协议)