摄像头的通讯方式SCCB

学习篇:摄像头的通讯方式SCCB学习篇(一)



前言

SCCB协议与IIC协议十分相似,但是SCCB最主要是阉割了IIC的连续读写的功能,即每读写完一个字节就主机必须发送一个NA信号。

本章根据SCCB与IIC进行对比学习。
参考:
IIC 通信协议详解
SCCB接口协议简介(适用于OV系列摄像头)
浅谈Verilog HDL ------ SCCB(IIC)

一、SCCB是什么?

SCCB是OmniVision开发的一种总线,主要应用于OV系列的图像传感器上。
SCCB接口(serial camera control Bus)是一种用于传输控制命令的串行总线接口,主要用于连接图像传感器和处理器。SCCB接口相对简单,可以通过少量的引脚实现数据和控制信号的传输。它适用于低速应用场景,并且占用的引脚较少,因此在一些成本敏感的应用中比较常见。

二、SCCB与I2C相关知识

1.基本结构&工作模式

1.1 一主一从模式

I2C:
I2C的连接基本结构
SCCB:
SCCB的连接基本结构
由两图对比都是有一根数据线(SDA、SIO_D)和一根时钟信号线(SCL、SIO_C)看着是一模一样的(SCCB一主一从:是三线操作只不过,默认SCCB_E使能信号被拉低),并且数据线都是双向数据传输。只是I2C需要共地,提供统一的电平基准、形成电流回路、保障信号完整性。

1.2 一主多从模式

I2C:
I2C一主多从基本结构
SCCB:
SCCB一主多从基本结构
在 I2C 上,每个从机都有其唯一的设备地址(设备地址的分配是硬件与协议协同作用的结果)。所以我们只需要知道器件的地址,根据时序就可以实现微控制器与器件之间的通信。
在SCCB上,SCCB_E(相当于片选信号,使能信号)为低电平时传输有效。

2.时序协议

2.1 起始位

这个起始位之后就要开始进行I2C通信了。在 SCL 为高电平的时候,SDA 出现下降沿就表示为起始位:
I2C起始位
这个起始位(在SCCB_E下降沿)之后就要开始进行SCCB通信了。在SCCB_E下降沿之前SIO_D必须置位1(高电平),来避免读取传送之前产生的未知总线状态。并且在SCCB_E下降沿之前,SIO_D必须有tPRC时长的高电平,tPRC至少要15ns(避免因总线残留的低电平导致起始信号误判)。tPRA是SCCB_E下降沿之后SIO_D保持高电平的时间,tPRA至少要1.25us(也就是起始信号生效之后,保持高电平一段时间,避免从设备因电平跳变过早误认为数据传输已开始):
SCCB起始位

2.2 终止位

这个终止(在SCCB_E上升沿)后就要开始结束SCCB通信了。tPSC为SCCB_E上升沿之后SIO_D维持高电平的时间,tPSC至少15ns。tPSA为SCCB_E之前SIO_D高电平的时间,tPSA至少0ns。
SCCB终止位
这个起始位之后就要结束I2C通信了。在 SCL 为高电平的时候,SDA 出现上降沿就表示为终止位:
I2C终止位

2.3 数据传输

如下图,I2C总线在数据传输的时候要保证在 SCL 高电平期间,SDA 上的数据稳定,即 SDA 上的数据变化只能在 SCL 低电平期间发生(SCCB只需将SCL换成SIO_C&SDA换成SIO_D):
I2C数据传输

2.3.1 读时序

I2C读操作 目的:主机为了读取到从设备的数据。首先主机必须首先指出从从设备的哪个寄存器读取数据。这是就需要主机往从设备写入(类似于从设备的写入),通过发送 R/W 位等于 0 的地址(表示写入),然后是它希望从中读取的寄存器地址来完成的。

一旦从设备确认该寄存器地址,主机将再次发送启动条件,然后发送从设备地址,R/W 位设置为 1(表示读取)。这一次,从设备将确认读取请求,主机释放 SDA 总线,但将继续向从设备提供时钟。在这部分事务中,主机将成为主“接收器”,将成为从“发射器”。

主机将继续发送时钟脉冲 SCL,但会释放 SDA,以便从设备可以传输数据。在数据的每个字节结束时,主机将向从设备发送 ACK,让从设备知道它已准备好接收更多数据。一旦主机接收到预期的字节数,它将发送一个 NACK,向从设备发送信号以停止通信并释放总线。之后,主机将设置停止条件。

请添加图片描述
I2C 单字节读时序比写时序要复杂一点,读时序分为四个步骤,第一步是发送设备地址,第二步是发送要读取的寄存器地址,第三步重新发送设备地址,最后一步就是 I2C 从器件输出要读取的寄存器值,

请添加图片描述

SCCB读操作
阶段一:0+设备地址(厂家设定8bit)+X+寄存器地址(数据手册标注8bit)+X+0+1
阶段二:0+寄存器地址*(数据手册标注8bit*)+X+读到的数据(8bit)+X+0+1OV2640读写操作
如图:写器件地址+1(表示读命令),读取数据,最后在发送NA信号
请添加图片描述
请添加图片描述
请添加图片描述
SCCB数据规则:
一个基本传输单元称作一个相,也就是上图Phase1……
一个相包含总共9bit,前8bit为数据,第9比特为 Don’t-Care bit (不关心比特),该位的数据取决于传输任务是读还是写,如果是写操作则X,如果为读操作为NA。一个传输任务的最大相个数是3。

如果是主机发送数据,即进行写操作,第九位就为X
如果是从机发送数据,即为读操作,第九位就为NA

2.3.2 写时序

I2C写操作:
在 I2C 总线上写入数据,首先主机需要发送:一个开始标志位、从机地址、最后一位(R/W位)设置为 0,这表示写入。

从设备发送 ACK 响应相当于答应了总线的要求,之后主设备将发送其希望写入的寄存器的寄存器地址。从设备将再次确认并响应ACK请求。在此之后,主机将开始向从机发送寄存器数据,直到主机发送了它需要的所有数据(有时这只是一个字节),并且主机将以停止条件(停止位)终止传输。

I2C写时序

SCCB写操作:
0+设备地址(厂家设定8bit)+X+寄存器地址(数据手册标注8bit)+X+写入数据(8bit)+X+0+1

SCCB写操作

相1:主机向从机发送从机的ID号,SCCB协议支持一个主机和多个从机,因此这一个相目的是区分不同的从机,但如果我们只连接了一个从机时,也必须执行这样一个流程。实际上ID Address有8bit,其中bit7-bit1为从机的ID号,大小为0-127,一共能区分128个从机。OV2640的ID号为0x60。而bit0是用来区分对从机是写数据还是读数据,bit0=0代表写数据,bit0=1代表读数据,由于我们要向从机写数据,因此bit0应为0(0x60=01100000写入数据)。而相1中紧跟在ID Address这8位数据后的第九位是一个Don’t care bit(图中打X的位)。对于OV2640来说,从机在接收到主机送来的8bit数据后,将在SCL=1的期间,在SDA引脚输出低电平。在这期间,主机就可以读取SDA上的电平并进行判断,如果读取到低电平,表示从机已经顺利接收到了相1中的前8bit数据。说明数据传输成功,否则说明传输失败。

相2:主机向从机发送将要写入数据的寄存器的编号,寄存器的编号在OV传感器的数据手册上都能找到。寄存器的编号是一个8bit的数据。同样地,相2的第9bit也是一个Don’t care bit(图中打X的位),对该位的说明与相1相同

相3:前面两个相指定了数据传输的从机ID以及要写入数据的寄存器的编号,这时候在第三个相就可以向前面指定的寄存器写入数据了。bit7-bit0是我们希望写入寄存器的数据。而第9bit也是一个Don’t care bit(图中打X的位),对该位的说明与相1相同。

SCCB写操作

2.3.3 应答信号

I2C:发送器每发送一个字节,就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK 简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

SCCB:应答位称为 “x”,表示 “don’t care”(不关心)。从机有可能不发出应答信号,主机可不用判断此处是否有应答,直接默认当前传输完成即可3。

2.3.4 空闲状态

I2C:IIC 总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

2.3.5 读操作方面(根本差异)

SCCB:不支持连续读操作,读操作时在第一次写寄存器地址后必须有结束条件,之后再发起一个新的起始信号进行读操作。

IIC:支持连续读操作。在写完寄存器地址后,可以通过重复开始(Restart)操作,继续写设备地址(此时读 / 写位改变)然后读取数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WiKi哥

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值