热度 26
2012-6-29 00:11
3276 次阅读|
2 个评论
小T最近在研究SCCB驱动摄像头,苦于自己是学生,OV的资料给的那么谨慎。不得不花费大量的时间找真正的好资料。现在与大家分享,非本人原创,同时也感谢作者的良苦用心。 SCCB是欧姆尼图像技术公司(OmniVision)开发的一种总线,并广泛的应用于OV系列图像传感器上。SCCB是一种3线的总线,它由SCCB_E、SIO_C、SIO_D组成。在为了减少引脚的芯片上缩减为2根线,SIO_C和SIO_D。2线的SCCB总线只能是一个主器件对一个从器件控制,但3线SCCB接口可以对多个从器件控制。 2线的SCCB总线需要主机具备如下条件中的一个或多个: 一、主机必须能够使SIO_D处于第三态,即高阻态。 二、主机必须能够驱动SIO_D比正常识别电压更高或更低。 引脚(主机)说明: SIO_E:输出(主机发出,单向),低电平有效,总线空闲时主机驱动此引脚为1,驱动为0时表示开始传输或者挂起模式(在表面没有该引脚的芯片中,该引脚默认为可用的,并且保持高电平)。 它标志这数据传输的开始和结束,高电平向低电平转变表示开始传输,低电平向高电平转变表示结束传输。在数据传输过程中,SIO_E必须保持为0。 SIO_C:输出(主机发出,单向),总线空闲时主机驱动此引脚为1;当驱动SIO_E为0时,主机驱动此引脚为0或1;当挂起时主机驱动SIO_C为0; 它表明每一个传输位;SIO_C为1时表示一个传输位;SIO_D只能在SIO_C为0时发生变化。 SIO_D:I/O口,双向传输线,既可以由主机驱动也可以由从机驱动。当总线空闲时保持浮动,状态不固定(0、1或三态高阻)。当系统挂起时驱动该引脚为0。为了不让该引脚产生未知的状态,主机和从机有职责保持该引脚的电平。 SIO_C为1表示传输一位数据,SIO_D只能在SIO_C为0时发生变化。然而,在开始传输和结束传输时却可以存在例外。当SIO_E有效且SIO_C变为0之前,SIO_D可以被驱动为0。在SIO_E失效前,SIO_C转为1时,SIO_D也能被驱动为0。 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。如果给连续的寄存器写数据,写完一个寄存器后,OV7649会自动把寄存器地址加1,程序可继续向下写,而不需要再次输入ID地址,从而三相写数据变为了两相写数据,由于本系统只需对有限个不连续寄存器进行配置,如果采用对全部寄存器都加以配置这一方法的话,会浪费很多时间和资源,所以我们只对需要更改数据的寄存器进行写数据。对于每一个需更改的寄存器,都采用三相写数据的方法。 最后小T总结一下。写操作,是三相写。读操作是2相写+停止+2相读(主机写一NA)。其实很简单。两线同步通信,大部分都是基于IIC协议完成的,比如说TI PMBUS ,OV 的SCCB……这些其实类似,只是在IIC基础上,加了些变化就重新起了个名字。差异这些器件厂商,不如统一下规格,制定出兼容JTAG、SPI、、、经典协议,未尝不可呢?