目录

一、前言

二、SCCB是什么

三、SCCB与IIC

四、OG02B10中的SCCB


一、前言

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

二、SCCB是什么

SCCB(Serial Camera Control Bus,串行摄像头控制总线)相当于一个简易的I2C协议,是由OV(OmniVision)公司定义和发展的双向三线式同步串行总线,该总线控制着摄像头大部分的功能,包括图像数据格式、分辨率以及图像处理参数等。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协议十分相似。SCCB与IIC最大的区别就是它没有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。状态不固定(0、1或高阻态)相当于数据位

1.SCCB写

写操作与IIC完全一致。

写寄存器分三个阶段:写器件地址,写寄存器地址,写数据。其中ID Address(W)里面就已经包括进了IIC中的“读写控制位”。“X”的意思是“don't care”,该位是由从机发出应答信号来响应主机表示当前ID Address、Sub-address和Write 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.顺序写入操作如下图所示。从机在每个数据字节后子地址自动增一,顺序写入操作在主机发出的停止条件下终止。

SCCB协议学习笔记相关推荐

  1. 软件SCCB协议学习笔记

    一.SCCB协议简介 SCCB协议是OV公司公布的摄像头用的串行总线协议,相当于一个简易的I2C协议.本文写作意图在于记录使用软件SCCB驱动OV7670模块的配置方法. 二.SCCB协议时序简介(二 ...

  2. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  4. POP3协议学习笔记

    今日得闲,于是将POP3的学习笔记也整理出来! 互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀.. ...

  5. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

    1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...

  6. 网络协议学习笔记 · 22

    IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫 VPN 作用 VPN与代理的区别 实现原理(隧道协议) 网络爬虫 简易实例 robots.txt 无线网络 缓存(Cache) 响应头 请求 ...

  7. CoAP协议学习笔记 1.2 一张表了解 CoAP 协议

    1 前言 对于CoAP协议的学习,这份100多页的文档肯定没法背下来.我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题. 本篇笔记中先对 CoAP 协议内容做个基础了解 ...

  8. CoAP协议学习笔记 3.1 CoAP协议翻译 加密基础介绍

    CoAP协议学习笔记可点此查看. 1 前言 在之前的学习中,没有过多关注加密.但实际部分厂家的IoT平台(阿里云.OneNET)已经启用了相关安全处理,有必要深入学习下. 在 CoAP 协议 RFC7 ...

  9. BGP协议学习笔记——BGP基础

    BGP协议学习笔记--BGP基础(BGP概念.BGP报文.BGP状态机.BGP关系建立.BGP路由通告) 说明:本文学习笔记整理自网络.华为公开产品文档.华为公开PPT及部分的自我理解 一.BGP简介 ...

最新文章

  1. 详解六大伤硬盘软件及解决方法
  2. 二十二、redis持久化之AOF
  3. Office365邮箱Imap迁移步骤
  4. 电话光端机与PCM复用设备的区别
  5. React17事件委托的变更
  6. java limit_Java 8 Stream:limit()和skip()之间的区别
  7. 左手用R右手Python系列之——表格数据抓取之道
  8. 跳台阶问题详解---动态规划
  9. oracle中t,Oracle中如何用T
  10. 无法启动程序因为计算机中丢失dev,DevUseAnalyzerTask.dll
  11. 2015版的迅捷ppt转换成pdf转换器
  12. 挺有意思的文章。。。
  13. 读了7年通信最后还是转了码,这值得吗?
  14. 解决apt-cyg命令不报错也无日志的小问题
  15. 电脑读卡器,笔记本读卡器怎么用教程
  16. 多项式, FTT, NTT小结
  17. 重磅|云迹科技获金茂资本、携程集团、光控众盈,海银资本联合投资...
  18. 在一个笼子里同事养着一些鸡和兔子,你想了解有多少只鸡和兔,主任对你说:我只告诉你鸡和兔的总头数是16和总脚数是40,你能不能自己计算有多少只鸡和多少只兔?
  19. 2019年苹果申请邓白氏(和以前(2018年之前)相比多了【确认知悉涵】)
  20. excel这几大数据处理技巧,高效率操作技能,今天免费交给你!

热门文章

  1. 低频超声检测c语言程序设计教程课后答案,c语言程序设计课后第九章答案
  2. NFT行业名词、用语篇
  3. 【TPM设备管理】企业设备管理改善的五大落地要点
  4. 云计算革新差旅,提高出行效率
  5. 25PGN图片的超级玩法
  6. 学习笔记——使用Unity Network组件开发联机游戏
  7. cs6导航栏代码html,总算认识网页设计教程|Dreamweaver-CS6工具栏详解
  8. eclipse中创建jsp页面报错
  9. 挂微群发软件需要什么服务器信,用云服务器挂群发软件
  10. python基金筛选_Python基金量化优选组合方法