SCCB协议学习笔记

目录

一、前言

二、SCCB是什么

三、SCCB与IIC

四、OG02B10中的SCCB


一、前言

       在配置某项目的主摄像头时,由于暂时没有现成的驱动文件,需要先根据平台其他摄像头的驱动格式进行移植,在移植过程中查阅sensor的datasheet注意到了之前没有留意的一个部分:SCCB。

二、SCCB是什么

        SCCBSerial Camera Control Bus,串行摄像头控制总线)相当于一个简易的I2C协议,是由OVOmniVision)公司定义和发展的双向三线式同步串行总线,该总线控制着摄像头大部分的功能,包括图像数据格式、分辨率以及图像处理参数等。SCCB协议可以用两线也可以用三线,两线为串行时钟信号总线SIO_C与串行数据信号总线SIO_D,三线增加了一条使能线SCCB_E。当SCCB_E默认拉低时,该协议相当于两线操作,无法通过控制使能端控制选中的从机,因此两线的SCCB总线只能是一个主器件对一个从器件控制,但三线SCCB接口可以对多个从器件控制,因此当只有一个从机时用两线,有多个从机时用三线。结构框图如下所示:

       SCCB_E默认拉低时,相当于

        其中SIO_C只能由主机配置(FPGA),SIO_D是一个三态门,双向数据线,既可以由主机控制,也可以由从机控制。SIO_C和SIO_D分别为SCCB总线的时钟线和数据线。目前,SCCB总线通信协议只支持100Kb/s到400Kb/s的传输速度,并且支持两种地址形式:从设备地址(ID Address,8bit)和内部寄存器单元地址(Sub_ Address,8bit)。

        从设备地址分为读地址和写地址,高7位用于选中芯片, 第0位是读/写控制位(R/W),决定是对该芯片进行读或写操作。

        内部寄存器单元地址用于决定对内部的哪个寄存器单元进行操作,通常还支持地址单元连续的多字节顺序读写操作。SCCB控制总线功能的实现完全是依靠SIO_C、SIO_D两条总线上电平的状态以及两者之间的相互配合实现的。SCCB总线传输的启动和停止条件如下图 

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

       当SCCB_E由高电平变到低电平时,数据传输开始。当SCCB_E由低电平转化为高电平时,数据传输结束。为了避免传送无用的信息位,分别在传输开始之前、传输结束之后将SIO_D设置为高电平。在数据传输期间,SCCB_E始终保持低电平,SIO_D上数据的传输受SIO_C的控制。当SIO_C为低电平时,SIO_D上数据有效,SIO_D为稳定数据状态,SIO_C每出现一正脉冲,将传送一位数据。

       SCCB_E低电平有效,如果将其接地,那么SIO_C,SIO_D的工作方式十分类似于I2C总线。与I2C总线一样,在SCCB总线中主设备发送一个字节后,从设备需要将数据线SIO_D拉低作为应答信号(ACK)返回给主设备,才能表示发送成功。值得注意的是由于CMOS器件所能承受的灌电流很低,所以接至时钟线SIO_C、数据线SIO_D的上拉电阻阻值应在3~5 kΩ之间,并且对于主设备发送参数完毕后,需立即释放数据线SIO_D以保证其处于悬空状态,即主设备在送完一个字节后立即执行一条指令,使数据线SIO_D发出读取信号的操作。

       不过,OV公司为了减少传感器引脚的封装,现在SCCB总线也大多采用两线式接口总线。由此可见,SCCB就是改编版的IIC,完全可以按照IIC来理解,下面仔细讲解SCCB的时序以及和IIC的不同之处。

三、SCCB与IIC

       由上述可以看到,SCCB协议与IIC协议十分相似。SCCBIIC最大的区别就是它没有IIC的连续读的功能,即每读完一个字节就主机必须发送一个NA信号。

SCCB

IIC

方向

描述

SCCB_E

/

主机发出

低电平有效,总线空闲时主机驱动此引脚为1,驱动为0时表示开始传输或者挂起模式

SIO_C

SCL

主机发出

总线空闲时主机驱动此引脚为1;当驱动SCCB_E为0时,主机驱动此引脚为0或1;当挂起时主机驱动SIO_C为0;SIO_D只能在SIO_C为0时发生变化。

SIO_D

SDA

双向传输

当总线空闲时保持浮动,当系统挂起时驱动为0。状态不固定(01或高阻态)相当于数据位

1.SCCB

        写操作与IIC完全一致。

        写寄存器分三个阶段:写器件地址,写寄存器地址,写数据。其中ID Address(W)里面就已经包括进了IIC中的读写控制位“X”的意思是“don't care”,该位是由从机发出应答信号来响应主机表示当前ID AddressSub-addressWrite Data是否传输完成,但是从机有可能不发出应答信号,因此主机可不用判断此处是否有应答,直接默认当前传输完成即可。“X”IIC中的ACK应答位。

2.SCCB

          读寄存器分两次两个阶段:写器件地址,写要读的寄存器地址;写器件地址+1(表示读命令)读取数据;最后再发送NA信号。

        SCCB_D先拉高,再把SCCB_C拉高,然后把SCCB_C拉低,最后把SCCB_D拉低产生NA时序。

        SCCB不支持连续读,第二阶段的Phase2的主机应答位必须为NA(no ack),即为1,所以SCCB读其实就专指单次读,和IIC单次读几乎一样。区别就是,在IIC读传输协议中,写完寄存器地址后会有restart即重复开始的操作;而SCCB读传输协议中没有重复开始的概念,在写完寄存器地址后,需发起总线停止信号。

        SCCB的应答位称为X,表示“don't care”,而IIC应答位称为ACK;SCCB只能单次读,而IIC除了单次读还支持连续读;SCCB读操作中间有stop,而IIC读操作中间可以有stop也可以不需要stop。除去上面三点,SCCB和IIC再无区别,因此如果只需要配置寄存器(只用到写),可以直接拿IIC的时序来当做SCCB用,如果需要读,读操作中间必须有一个stop。 

四、OG02B10中的SCCB

       接下来以我在该项目所使用到的OG02B10为例,结合spec理解这一协议的几种读写操作。

       OG02B10可以响应两个SCCB ID,一个由寄存器SC_SCCB_ID0(默认0x20)或寄存器SC_SCCB_ID1(默认0xC0)设置,另一个由寄存器SC_SCCB_ID2(默认0xE0)设置。当SID引脚为低电平时,SC_SCCB_ID1值为选择作为第一个SCCB ID。当SID引脚为高电平时,选择SC_SCCB_ID0值作为第一个SCCB ID。这些ID都是可编程的。在多传感器系统中,SC_SCCB ID2可以用作广播ID以允许编程同时向所有传感器注册,另一个SCCBID可以用作访问每个传感器的唯一ID传感器。

       在本项目中,由于OV9282及OG02B10都在I2C4上且SCCB ID相同,因此OV9282使用了0xC0、OG02B10使用了0x20作为它的SCCB ID。

       OG02B10支持如图所示的消息格式。重复开始(Sr)的条件没有显示在SCCB从随机位置的单次读取中,而是显示在SCCB从当前位置单次读取和SCCB从随机位置顺序读取中。

       OG02B10支持四种不同的读操作和两种不同的写操作:

       1.从随机位置读取一次

       2.从随机位置顺序读取

       3.从当前位置读取一次

       4.从当前位置顺序读取

       5.单次写入随机位置

       6.从随机位置开始的顺序写入

       传感器中的sub address在每次读/写操作后自动增一。

具体如下:

       1.在从随机位置进行单次读取时,主机对所需的子地址执行虚拟写入操作,发出重复开始的条件,然后通过读操作再次对camera寻址。确认从机地址后,camera开始向SDA路输出数据,如下图所示。主机通过设置一个负应答和停止条件来终止读取操作

        2.如果主机通过读操作而不是伪写操作直接寻址camera, camera会通过设置从上次使用的子地址到SDA行的数据进行响应(从当前位置读),如下图所示。主机通过设置一个负应答和停止条件来终止读取操作。

        3.下图显示了从随机位置顺序读取的过程。主机对所需的子地址进行伪写入,在从设备确认后发出重复开始条件,并通过读取操作再次对从属设备进行寻址。如果主机在接收到数据后发出一个应答,它将作为一个信号发送给从设备,这样读取操作就可以从下一个子地址继续。当主机已经读取最后一个数据字节时,它发出一个负应答和停止条件。

       4.从当前位置顺序读取类似于从随机位置顺序读取。唯一的不同是没有下图所示的伪写入操作。主机通过设置一个负应答和停止条件来终止读取操作。

        5.对随机位置的写入操作如下图所示。主机向从机发出写操作,在从机确认后,相应地设置子地址和数据。写入操作在主机的停止条件下终止。

        6.顺序写入操作如下图所示。从机在每个数据字节后子地址自动增一,顺序写入操作在主机发出的停止条件下终止。

  • 21
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值