本文主要参考了两种协议的规范文档和一个摄像头传感器(OV7725)的数据手册,文档链接如下:
IIC规范:UM10204
SCCB规范:SCCBSpec_AN
OV7725数据手册:OV7725

1. 概述

之所以写这篇文章,是因为我在使用SCCB接口控制的摄像头时,看到有的人说SCCB和IIC是兼容的,也有的人说它们有区别,但区别不大。网上众说风云,让我感觉很迷糊,所以在这里总结一下。
IIC接口有比较广泛的应用,而SCCB接口主要用于摄像头控制,可以说SCCB是低配版的IIC。因为IIC可以实现多主多从,IIC规范文档中有提到多主机的时钟同步、总线仲裁功能。而SCCB的文档中则没有这部分内容,因为一般来说都是单个主机控制多个摄像头,只有一主多从的功能。除此之外,SCCB和IIC的数据格式也有一点区别,这部分在后面详述。

2. 信号线

IIC SCCB
SCL、SDA SCCB_E、SIO_C、SIO_D、PWDN

IIC只有两根信号线,SCCB的SIO_C、SIO_D和IIC的SCL、SDA分别对应,SCCB额外还有SCCB_E和PWDN两根控制线,这个影响不大。
SDA和SCL都是需要靠电阻上拉的,硬件设计上需要注意这一点。IIC的Ultra-Fast模式下,能够达到5MHz的传输速率,这时在硬件上,IIC采用的是推挽输出,为了进行区分,相应的信号称为USDA和USCL,仅在这时是不需要上拉电阻的。
SCCB如果要实现一主多从的话,需要用三根线,除了SIO_C和SIO_D,还有一根SCCB_E。而如果仅控制一个摄像头,那么可以只用两根线SIO_C和SIO_D。手册第5页1.1节有写。

3. 时序

IIC和SCCB的时序可以分解为三个部分,分别是启动信号,数据传输和停止信号。

  • 启动信号就是在SCL为高电平的时候,SDA由高电平转变为低电平
  • 数据传输就是在启动信号和停止信号之间,SCL为高电平的时候,SDA上的数据不能发生变化,这也是数据有效的条件
  • 停止信号就是在SCL为高电平的时候,SDA由低电平转变为高电平

在IIC手册的48页和50页有具体的时序参数和波形图,SCCB的具体时序参数在规范中没有提及,但是在OV7725手册的第6页有相关的参数。经过比对可以发现,SCCB的时序参数和Fast-mode的IIC是一样的
主要有这几点要求:

  • 最大时钟频率400kHz,高电平时间大于600ns,低电平时间大于1.3us,所以不是占空比50%的方波
  • 对于启动信号和停止信号,我们如果把SDA的跳沿看做触发器的时钟,SCL看做输入触发器的信号,那么SCL的建立时间和保持时间都需要至少有600ns。特殊的,在停止信号之后,再发起启动信号,这两者之间的间隔需要至少有1.3us。
  • 数据的建立时间需要至少有100ns,也就是在数据传输阶段,SCL变成高电平之前,SDA上的数据需要至少稳定100ns。

4. SCCB数据传输格式

SCCB的数据传输格式在手册中的3.2节有介绍。所谓数据传输的格式就是在一个启动信号和停止信号之间的内容,每一次传输作为一个传输周期。SCCB接口主要实现目的寄存器的读写功能。有三种基本操作,分别是“3-Phase Write”、“2-Phase Write”和“2-Phase Read”

4.1 3-Phase Write


这里的IP address类似IIC的从机地址;sub-address是从机内的寄存器地址,也就是摄像头的一些控制寄存器的地址;最后就是要写入该寄存器的数据。

4.2 2-Phase Write


与3-Phase Write相比,2-Phase Write只是确定了要访问的寄存器,但是没有往里面写数据。2-Phase Write后一定会有一个2-Phase Read,两者一起构成一个完整的读操作。

4.3 2-Phase Read


2-Phase Read即读取目标寄存器的数据,它的前面一定要有一个3-Phase Write或者2-Phase Write用来明确目的寄存器的地址。

4.4 一些说明及注意事项

  1. 上面的每个phase都是由主机和从机一同完成的。上面的图片中,每个phase都被划分为两个部分,一部分是8位的数据,另一部分是1位的应答位。当数据是由主机发给从机时,应答位则是由从机发给主机;当数据是从机发给主机时,应答位就是主机发给从机。
  2. 写操作主要都是主机给从机发数据,从机的应答位是“X”,表示不关心,实际测试发现,从机会向主机发送低电平,这样与IIC的标准兼容;2-Phase Read中的phase 2是从机向主机发数据,因此后面的NA应答位是主机发给从机的,为高电平“1”。
  3. IIC规范中有明确地说明应答位ACK或NACK的作用,详见IIC规范的第10页3.1.6。
  4. SCCB能够实现的操作非常有限,仅能用3-Phase Write向目标寄存器写数据或者用3-Phase Write或2-Phase Write和2-Phase Read搭配来读数据。
  5. IIC完全能够实现SCCB的这些操作的,除此之外,IIC还能通过在两次连续的传输之间省去停止信号,采用重新启动的信号来读数据。每次读或者写的数据也不仅限于1个字节,而可以是连续的多个字节。

用IIC的驱动函数实现SCCB的读写时需要注意两点:

  • 写操作不要用restart,而是应该按照SCCB的协议规范,用两对完整的启动停止信号来实现;
  • 注意设备地址是否包含读写控制位,比如OV7725的手册第11页上方写的,“0x42是用来写的地址,0x43时用来读的地址”,这里的0x42和0x43就包含了读写控制位;而有的IIC驱动函数明确地有分读函数和写函数,这时传给这些函数的设备地址就应该传7位的不包含读写控制位的地址。

5. FPGA实现三态门的两种方法

5.1 用IOBUF原语实现

打开Vivado菜单栏中的Tools -> Language Template,搜索IOBUF,即可找到用于实例化IOBUF的原语。

IOBUF实际上就是这样一个三态门,它有一个使能控制端,高电平时输出变为高阻,这里的sda_t和sda_o可以连起来作为同一个线网。因为当我们想输出高电平时,可以让三态门变为高阻,输出会靠上拉电阻拉高。

具体使用时,定义

    input wire sda_i,output wire sda_o,output wire sda_t

用于逻辑设计,另外在顶层模块中定义inout sda,用IOBUF原语实例化。

   IOBUF IOBUF_inst (.O(sda_i), // 1-bit output: Buffer output.I(sda_o), // 1-bit input: Buffer input.IO(sda), // 1-bit inout: Buffer inout (connect directly to top-level port).T(sda_t)  // 1-bit input: 3-state enable input);

5.2 由设计工具自动识别

分别定义sda_i,sda_o和sda_t后,进行逻辑设计,并打包成一个IP,将这些信号放到同一个interface里即可。

这里实现的是IIC协议的接口,把scl和sda都做成了能够输入和输出。在命名上分别以“_o”、“_i”、“_t”结尾,在一个block design中调用自己设计的IP,并且将IIC接口make external,在generate output products之后,设计工具会自动添加IOBUF的原语。

打开Elaborated Design的I/O Ports就可以看到scl和sda两个信号都被实例化为inout的类型。

SCCB与IIC的异同及FPGA实现的注意事项相关推荐

  1. 协议——SCCB与IIC的区别

    SCCB(Serial Camera Control Bus,串行摄像头控制总线)是由OV(OmniVision的简称)公司定义和发展的三线式串行总线,该总线控制着摄像头大部分的功能,包括图像数据格式 ...

  2. 协议--SCCB与IIC的区别

    学习摘自FPGA开源工作室 SCCB(Serial Camera Control Bus,串行摄像头控制总线)是由OV(OmniVision的简称)公司定义和发展的三线式串行总线,该总线控制着摄像头大 ...

  3. 【乌拉喵.教程】IIC总线介绍及FPGA编程

    最近将多年来收集到的教学视频.国内外图书.源码等整理整合拿出来,涉及arm.Linux.python.信号完整性.FPFA.DSP.算法.stm32.单片机.制图.电子模块.kali.出版社图书等.资 ...

  4. SPI与IIC的异同

    不同 1)工作模式与线的数目 IIC总线不是全双工,高电平采样,2根线SCL SDA. SPI总线实现全双工,边沿采样,4根线SCK CS MOSI MISO,通信简单易理解. 2)速度 SPI的速度 ...

  5. 硬件设计过程FPGA时钟引脚注意事项

    在设计原理图的时候,对于接收时钟,应该尽量分配到FPGA的时钟引脚,且为P端. 通常FPGA的时钟引脚为:后缀为SRCC或MRCC的IO,如下图所示.

  6. FPGA SCCB协议

    FPGA SCCB SCCB写操作与IIC写操作一致 SCCB读操作与IIC读操作区别 IIC读操作 SCCB读操作 与IIC代码相比增加了读中点停止状态,当写操作时,SCCB与IIC无异,读操作时在 ...

  7. 基于FPGA实现IIC接口(EEPROM)

    1 IIC应用领域 在嵌入式系统开发过程中,IIC占据非常重要的地位.IIC通讯接口能到搭载较多的从设备,从而实现与多个从设备进行通讯,在板级通讯中是一种比较常用的通讯接口.笔者通过IIC接口实现FP ...

  8. 【正点原子FPGA连载】第三十九章OV7725摄像头RGB-LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  9. SCCB协议学习笔记

    目录 一.前言 二.SCCB是什么 三.SCCB与IIC 四.OG02B10中的SCCB 一.前言 在配置某项目的主摄像头时,由于暂时没有现成的驱动文件,需要先根据平台其他摄像头的驱动格式进行移植,在 ...

最新文章

  1. 选择python培训机构的关键考核五大因素,让你永不吃亏!
  2. 网站制作基本要素了解一下
  3. Html.BeginForm 与Section、Partial View 和 Child Action
  4. 【Nodejs篇一】Node js 简介
  5. Leetcode 844. 比较含退格的字符串 解题思路及C++实现
  6. kali 解决Metasploit拿到shell后显示中文乱码问题
  7. 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)
  8. matplotlib的基本使用1
  9. html字体整体偏移,CSS自定义字体垂直偏移(错误?)
  10. 服务器linux命令aux,Linux查看所有进程ps -aux命令介绍
  11. java 接口怎么规范属性_JAVA命名规范
  12. MGTV提取Ticket-保姆级教程
  13. 腾达无线路由器连不上服务器,腾达无线路由器中继失败怎么办?
  14. Python pivot详解
  15. 中科大计算机科学技术导师周,中国科技大学计算机科学与技术学院导师教师师资介绍简介-周学海...
  16. Ubuntu18.04安装WPS字体缺失的解决方案
  17. python --Numpy详解(科学计算)
  18. gitlab仓储搭建
  19. mysql迅_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
  20. 强制卸载软件测试工资,软件安装卸载测试

热门文章

  1. matlab信号系统实验报告,信号与系统 MATLAB实验报告
  2. 1、Java三员管理
  3. c语言 输出所有水仙花数
  4. 2020数学复习全书习题全解【数学三】
  5. 优思学院:六西格玛证书有用吗?有什么方法获取六西格玛证书?
  6. Bosun中es表达语法
  7. VisualGDB导致Visual Studio报错:未能从程序集Package.LanguageService中加载类型xxx
  8. CAN BLF包解析和播包发送(二):CAN BLF包解析
  9. 绿联 蓝牙适配器 linux,选择进退两难-绿联4.1蓝牙适配器_硬件测评心得_ZNDS
  10. 关于计算机的英语演讲话题,大学生英语演讲话题