Camera和Image sensor技术基础笔记(7) -- SCCB总线

 概览

        SCCB是豪威科技(OmniVision Technologies Inc.)所定义开发的一个总线协议,全称是Serial Camera Control Bus。它是一个三线串行总线(也可以只用两线),用于控制摄像头芯片。其相当于一个简化版的I2C总线,最主要的修改是去掉了I2C的连续读写功能。

OV的摄像头芯片设备只能作为slave设备工作,协同工作的另一端是master。一个SCCB master设备至少控制一个SCCB slave设备。

SCCB 三线模式示例

SCCB 两线模式示例

Pin描述

Master设备pin

信号名

I/O

描述

SCCB_E*

O

SCCB Enable使能信号。当总线idle时,master驱动SCCB_E到逻辑1.当master发起传输或系统处于Suspend模式时,SCCB_E为逻辑0.

SIO_C

O

SIO控制信号。当总线idle时,master驱动SIO_C到逻辑1.当SCCB Enable为0时,驱动到0和1.当系统处于Suspend模式时,驱动到逻辑0.

SIO_D

I/O

SIO数据信号。当总线idle时保持悬空,当系统处于Suspend模式时,驱动到逻辑0.

PWDN_

O

Power-Down输出

​Slave设备pin

信号名

I/O

描述

SCCB_E*

I

SCCB Enable使能信号。当系统处于Suspend模式时,SCCB_E输入pad可以被关闭.

SIO_C

I

SIO控制信号。当系统处于Suspend模式时,SIO_C输入pad可以被关闭.

SIO_D

I/O

SIO数据信号。当系统处于Suspend模式时,SIO_D输入pad可以被关闭.

PWDN_

I

Power-Down输入

SCCB_E

单向,低有效的控制信号,必须由master驱动。它指示数据传输的开始和结束。SCCB_E由高到低的一个变化表明传输开始,由低到高的变化表示传输结束。在数据传输过程中SCCB_E必须保持逻辑0状态。SCCB_E为1表示总线idle。

SIO_C

单向,高有效控制信号,必须由master驱动。它表示每个传输bit。当bus处于idle时master必须将其置为1。在一次传输会话开始后,当SIO_C为0时,才开始数据传输。在一次数据传输过程中,SIO_C为1时表示一个已传输的bit。因此SIO_D信号只能出现在SIO_C为0的时候。一个单独传输的bit的周期定义为tcyc(最小为10us)。

SIO_D

双向数据信号,master和slave设备都可以驱动。当总线idle时,它保持悬空或三态。此信号需要master和slave设备共同维护来避免未知的总线状态。

SIO_C的一次逻辑1指示一个单bit传输。SIO_D信号只能出现在SIO_C为0的时候。但在数据传输刚开始和结束的时候,允许一个例外。当SCCB_E有效并且在SIO_C变为0之前的这段时间,SIO_D能在SIO_C为0的时候被驱动。当SIO_C要变为1并且SCCB_E变为无效之前,SIO_D也能在SIO_C为0的时候被驱动。

三线数据传输

三线场景,数据传输启动细节

三线场景下,一个SCCB_E的高到低的变化指示数据传输的开始。在将SCCB_E置为有效前,master必须将SIO_D置为1.这样会避免在数据传输前传播未知的总线状态。在将SCCB_E信号无效后,master必须将SIO_D置为1.Tpsa定义为SCCB_E的激活后时间,最小值为0us。

有两个传输开始的时序参数tprc和tpra。tprc定义为SIO_D的预充电时间,这表示在SCCB_E有效前SIO_D必须置为1的时间周期,tprc最小为15ns。tpra定义为SCCB_E的预激活时间,表示在SIO_D变为0之前SCCB_E必须被assert的时间,tpra最小为1.25us。

三线场景,数据传输停止细节

SCCB_E由低到高的变化表示一次数据传输的停止。有两个参数被定义:tpsc,tpsa。tpsc定义为SIO_D的充电后时间,表示在SCCB_E无效后SIO_D必须保持在逻辑1的时间,tpsc最小15ns。tpsa定义为SCCB_E的后激活时间,表示在SIO_D无效后SCCB_E必须保持逻辑0的时间,最小0ns。

两线数据传输

两线场景,数据传输启动细节

对于支持三态实现的两线场景,数据传输的开始通过一个SIO_D信号从三态(悬空)转换为高(1),然后紧跟一个将信号置为低(0)的过程来指示。SIO_C在SIO_D信号置为低(0)的过程中必须保持高(1)。SIO_D信号上的所有事务只能在SIO_C为低(0)的时候进行。

对于不支持三态实现的两线场景,数据传输的开始和支持三态的模型略有不同。在总线处于idle时,Master会将SIO_D信号驱动到高(1)。当SIO_D被驱动到低(0)并且SIO_C为高(1)时,数据传输开始。

4b0a98ff024b9ad447b6c499b8633328.png

一个读或写操作总是通过master发起,并且只能在开始条件后出现。读、写操作只能在master发起停止条件或另一个开始条件时完成。

两线场景,数据传输停止细节

支持三态实现的两线场景中,数据传输的停止通过在SIO_C信号为高(1)时,SIO_D信号从低(0)到高(1)的变化指示。当SIO_D已经变化到高,并且已经发生了停止传输(最小15ns)时,master随后就可以将SIO_D信道返回到三态或悬空条件。

不支持三态实现的两线场景中,数据传输的停止过程和支持三态的模型类型。关键的不同之处是master不会将SIO_D切回到三态。Master会将SIO_D保持为高,SIOC_信号也是高(1)。

 

传输周期

传输的阶段(phase)

一个阶段(phase)包含9个bits,其中有8-bit顺序数据传输紧跟一个第9 bit。第9 bit是一个Don't-Care或NA bit(根据数据传输是写还是读决定)。在一次传输中,最大的阶段数量是3个。对于每个阶段,MSB总是会首先被置位。

3-phase写传输周期

3-phase写传输周期是一个完整的写周期,master可以写入1个byte的数据到指定的slave。ID address识别master想要访问的具体的slave。sub-address识别指定的寄存区地址。write data包含master想要写入到指定地址的8-bit数据,第9 bit是Don't-Care。

2-phase写传输周期

2-phase写传输周期会跟着一个2-phase读传输周期。2-phase写传输周期的目的是识别出master想要从中读取数据的某个具体的slave的sub-address,以便随后的2-phase读传输周期使用,第9 bit是Don't-Care。

 

2-phase读传输周期

在2-phase读传输周期前必须有一个3-phase或2-phase写传输周期。2-phase读传输周期没有能力取识别sub-address。2-phase读传输周期包含8-bit读数据和第9 bit为NA bit。master必须将NA bit驱动为逻辑1.

Phase详细描述

Phase 1

Phase 1被master用来识别用于数据读写的slave。每个slave有一个唯一的ID地址。ID地址由7个bits组成,按bit 7到bit 1顺序排序,最大能识别128个slave。第8个bit即bit 0,是read/write选择bit,用来指定当前周期的传输方向,0表示写周期,1表示读周期。

Phase 1的第9个bit必须是Don't-Care bit。SIO_D_OE_M_和SIO_D_OE_S_分别对应master和slave内部的低有效I/O使能信号。SIO_D_OE_S_事务发生在SIO_D_OE_M_之前。Master发出ID address,但无效第9个bit(Don't-Care bit)。Master在Don't-Care bit器件必须将SIO_D的输入mask掉,并且强制输入为0来避免传播未知总线状态。无论slave对Don't-Care bit的反应如何,Master都要持续保持后续阶段有效。

SIO_OE_S由slave控制并且保持在逻辑1或驱动到逻辑0。总线在Don't-Care bit传输期间可能处于悬空或冲突状态。这种情况下,slave必须避免传播一个未知的总线状态。

Phase 2

Master或slave都可以发起phase 2传输。一个由master发起的phase 2传输用来识别master想要访问的slave的sub-address。一个由slave发起的phase 2传输用来表示master要接收的读取的数据。slave根据前面的3-phase或2-phase写传输周期来找到读数据的sub-address。

当master发起phase 2时,第9个bit被定义为Don't-Care。

Phase 2 – Sub-address (3-Phase Write Transmission)

当slave发起phase 2时,第9个bit被定义为NA。SIO_D_OE_M_在phase 1的第9个bit时无效,在NA bit时重新有效。在NA bit周期内,master将SIO_D驱动到逻辑1.同时SIO_D_OE_S有效。被选择的slave负责在read data周期内驱动SIO_D。在NA bit周期中,由于SIO_D_OE_S_在SIO_D_OE_M_有效之前处于无效状态,SIO_D的总线悬空在master试图驱动NA bit的时候出现。

Phase 2 – Read Data (2 Phase Read Transmission)

 

Phase 3

只有master能够发起。Phase 3传输包含了实际的master想要写到slave的数据。

Phase 2/3 – Phase 2 Sub-address Write Transmission, Phase 3 Write Data Transmission

phase 3传输的第9 bit被定义为Don't-Care bit。

Don't-Care Bit

这个bit是aster所发起的传输的第9个bit。ID address,sub-address和write data。Master会持续去保持传输阶段有效,直到传输周期结束。Master也会假设在数据传输中没有发生传输错误。Don't-Care bit的目的是指示传输的完成。

当总线有多于一个slave时,slave可以在两种方式中的一种去响应Don't-Care bit。如果slave 1被选择,并且数据被写入到了这个特定的slave,slave 1会对Don't-Care bit响应为驱动SIO_D为逻辑0。这种情况下,SIO_D信号可能会在Don't-Care bit的开始阶段冲突,即使它可能在Don't-Care bit的结束阶段悬空。

另外,也有可能slave不会响应当前阶段的Don't-Care bit。这种情况下,SIO_D总线在整个Don't-Care bit阶段保持悬空。

master不会在数据传输过程中检查传输错误。对于slave来说有个机制提供出来记录Don't-Care bit状态到一个内存寄存器,参考下面的例子:

一个slave定义了一个1字节的寄存器Don't-Care Status Register。这个寄存器默认值定义为55。假设在数据传输中没有错误发生,这个寄存器的值会保持不变。如果slave没有收到Don't-Care bit,寄存器会变为54。

Master可以查询Don't-Care Status Register来确定是否发生过传输或数据交互。Master会发起一个额外的read传输到目标slave的Don't-Care Status Register来检查其值并确定是否有错误发生。如果整个SCCB电路都已经出问题了,这个机制则没有用。

SIO_D_OE_M_只在SIO_C被驱动到逻辑0时,才能够在Don't-Care bit传输周期中被无效和重新有效。tmack被定义为在Don't-Care bit传输周期中,在SIO_C的由低到高变化之前,SIO_D_OE_M_的无效时间。在SIO_C由高到低变化之后SIO_D_OE_M_的重新有效时间也被定义为tmack。tmack最小为1.25us。

如果slave想要响应Don't-Care bit,SIO_D_OE_S_只能在SIO_C被驱动到逻辑0的时候,在Don't-Care bit传输周期中被置为有效和无效。tscak被定义为在Don't-Care bit传输起始点,在SIO_C由高到低变化之后,SIO_D_OE_S_变为有效的时间。在Don't-Care bit传输周期结束,SIO_C由低变高变化之后,SIO_D_OE_S_变为无效的时间也被定义为tsack。tsack最小为370ns。

Supend模式

Suspend模式通过master专门的PWDN_管脚来决定。如果master想要power-down系统,会通过这个低有效输出信号来指定挂起时间。在挂起时间内,SCCB_E,SIO_C和SIO_D都被master驱动到逻辑0来避免漏电。在SCCB_E,SIO_D和SIO_C被设置前后,必有一段PWDN_的变为有效和无效的时间。这个参数是tsup,最小为50ns。这个机制能够避免在SCCB slave中发生逻辑错误。

Slave中的PWDN_管脚和master中的PWDN_管脚极性相反。

电气特性

 

系统结构

此图展示了1个master和1个slave链接的情况。相同的总线可以链接多个slave,每个slave会有一个冲突保护用的SIO_D的电阻。

Master 设备

Master设备驱动SCCB_E和SIO_C信号,master或slave驱动SIO_D信号。在SCCB_E信号无效过程中,master必须挡住SIO_D输入来避免由于总线悬空导致传播未知的总线条件。在Don't-Care bit传输周期中,master必须忽略SIO_D的状态并保持后续phase有效。

PWDN_由master驱动来指示suspen模式周期。

Slave 设备

Slave设备从master接收SCCB_E和SIO_C信号,master或slave驱动SIO_D信号。SCCB_E,SIO_C和SIO_D信号的输入pad含有standby(STBY)控制终端,用来在输入悬空时减少漏电。这些输入pad的输出终端在STBY有效时被驱动为逻辑1。这样能避免在suspend周期中发生逻辑错误。

PWDN控制SCCB_E的STBY。这意味着SCCB_E输入pad的输出终端在suspend模式周期中被驱动到逻辑1,即便master驱动SCCB_E为0。

SIO_C和SIO_D的STBY控制终端都由PWDN和SCCB_E控制。在suspend模式周期和SCCB_E无效的周期内,SIO_C和SIO_D输入pad的输出终端都被驱动到了逻辑1.在Don't-Care bit传输周期中,slave必须避免传播未知总线条件。

冲突保护电阻

在master的SIO_D输出和slave的SIO_D输入之间包含串联电阻能够避免在总线竞争发生时短路。

Suspend电路

有两种发起总线suspend周期的方法:PWDN模式或Switch模式

PWDN模式

Slave的电源pad始终连接到VDD。来自master设备的PWDN_信号在连接到slave的PWDN_之前需要被反向,slave的PWDN极性相反。在正常工作中,master的PWDN_驱动到1,NPN三极管开,slave的PWDN被驱动到0.在suspend模式中,PWDN_被驱动为0,NPN三极管关,slave的PWDN被驱动到1。Suspend周期中没有漏电。

Switch模式

Slave的PWDN电路始终连接到逻辑0。对每个slave来说,都需要一个电源开关电路。在suspend模式周期中每个slave的power都是关闭的。由于没有电源供到slave,因此suspend模式中没有漏电。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦枫Leonlew

希望这篇文章能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值