SCCB 总线和I2C总线区别

SCCB(SeriaI Camera ControlBus)是简化的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地址,从而三相写数据变为了两相写数据,由于本系统只需对有限个不连续寄存器进行配置,如果采用对全部寄存器都加以配置这一方法的话,会浪费很多时间和资源,所以我们只对需要更改数据的寄存器进行写数据。对于每一个需更改的寄存器,都采用三相写数据的方法。


/**********************************/


之前做摄像头方面的测试,现在写一些总结:

原计划使用I2C接OV9650的SCCB接口,SDA接SIO_D,CLK接SIO_C口,由于SCCB和I2C标准协议类似,就可以用标准的I2C协议中的函数直接对OV9650中的寄存器进行配置,比较简单。就没有考虑其他的内容,后来发现这个思路行不通。

把摄像头接到I2C总线上后,就使用Iprobe命令探测I2C设备,结果没有发现摄像头,然后用示波器检测各个引脚的电压,发现电压均正常,但是没有时钟输入信号,后来查阅手册,发现摄像头的时钟由CSI控制,在CSI的寄存器中,有一位专门负责打开与关闭输出时钟,默认情况下,设置为关闭,将这一位设置为打开。然后用Iprobe命令探测,结果出现了摄像头的设备号,为30。

然后用I2C的读写命令操作摄像头的寄存器,结果失败,经过几天的网上搜索,原来是SCCB与I2C标准协议有微小的差别,就是这个微小的差别,导致不能用标准的I2C协议读写OV9650的寄存器。

差别如下:

OV79650控制采用SCCB(SeriaI Camera ControlBus)协议。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的地址位为8位,即第60,61分别为读写位,但I2C协议地址为7位,所以检索到的地址是30。

网上大部分采用GPIO模拟I2C协议,由于使用标准的I2C协议行不通,只好换用GPIO模拟I2C协议。



你可能感兴趣的:(SCCB 总线和I2C总线区别)