SCCB与IIC的异同及FPGA实现的注意事项
本文主要参考了两种协议的规范文档和一个摄像头传感器(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 一些说明及注意事项
- 上面的每个phase都是由主机和从机一同完成的。上面的图片中,每个phase都被划分为两个部分,一部分是8位的数据,另一部分是1位的应答位。当数据是由主机发给从机时,应答位则是由从机发给主机;当数据是从机发给主机时,应答位就是主机发给从机。
- 写操作主要都是主机给从机发数据,从机的应答位是“X”,表示不关心,实际测试发现,从机会向主机发送低电平,这样与IIC的标准兼容;2-Phase Read中的phase 2是从机向主机发数据,因此后面的NA应答位是主机发给从机的,为高电平“1”。
- IIC规范中有明确地说明应答位ACK或NACK的作用,详见IIC规范的第10页3.1.6。
- SCCB能够实现的操作非常有限,仅能用3-Phase Write向目标寄存器写数据或者用3-Phase Write或2-Phase Write和2-Phase Read搭配来读数据。
- 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实现的注意事项相关推荐
- 协议——SCCB与IIC的区别
SCCB(Serial Camera Control Bus,串行摄像头控制总线)是由OV(OmniVision的简称)公司定义和发展的三线式串行总线,该总线控制着摄像头大部分的功能,包括图像数据格式 ...
- 协议--SCCB与IIC的区别
学习摘自FPGA开源工作室 SCCB(Serial Camera Control Bus,串行摄像头控制总线)是由OV(OmniVision的简称)公司定义和发展的三线式串行总线,该总线控制着摄像头大 ...
- 【乌拉喵.教程】IIC总线介绍及FPGA编程
最近将多年来收集到的教学视频.国内外图书.源码等整理整合拿出来,涉及arm.Linux.python.信号完整性.FPFA.DSP.算法.stm32.单片机.制图.电子模块.kali.出版社图书等.资 ...
- SPI与IIC的异同
不同 1)工作模式与线的数目 IIC总线不是全双工,高电平采样,2根线SCL SDA. SPI总线实现全双工,边沿采样,4根线SCK CS MOSI MISO,通信简单易理解. 2)速度 SPI的速度 ...
- 硬件设计过程FPGA时钟引脚注意事项
在设计原理图的时候,对于接收时钟,应该尽量分配到FPGA的时钟引脚,且为P端. 通常FPGA的时钟引脚为:后缀为SRCC或MRCC的IO,如下图所示.
- FPGA SCCB协议
FPGA SCCB SCCB写操作与IIC写操作一致 SCCB读操作与IIC读操作区别 IIC读操作 SCCB读操作 与IIC代码相比增加了读中点停止状态,当写操作时,SCCB与IIC无异,读操作时在 ...
- 基于FPGA实现IIC接口(EEPROM)
1 IIC应用领域 在嵌入式系统开发过程中,IIC占据非常重要的地位.IIC通讯接口能到搭载较多的从设备,从而实现与多个从设备进行通讯,在板级通讯中是一种比较常用的通讯接口.笔者通过IIC接口实现FP ...
- 【正点原子FPGA连载】第三十九章OV7725摄像头RGB-LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- SCCB协议学习笔记
目录 一.前言 二.SCCB是什么 三.SCCB与IIC 四.OG02B10中的SCCB 一.前言 在配置某项目的主摄像头时,由于暂时没有现成的驱动文件,需要先根据平台其他摄像头的驱动格式进行移植,在 ...
最新文章
- 选择python培训机构的关键考核五大因素,让你永不吃亏!
- 网站制作基本要素了解一下
- Html.BeginForm 与Section、Partial View 和 Child Action
- 【Nodejs篇一】Node js 简介
- Leetcode 844. 比较含退格的字符串 解题思路及C++实现
- kali 解决Metasploit拿到shell后显示中文乱码问题
- 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)
- matplotlib的基本使用1
- html字体整体偏移,CSS自定义字体垂直偏移(错误?)
- 服务器linux命令aux,Linux查看所有进程ps -aux命令介绍
- java 接口怎么规范属性_JAVA命名规范
- MGTV提取Ticket-保姆级教程
- 腾达无线路由器连不上服务器,腾达无线路由器中继失败怎么办?
- Python pivot详解
- 中科大计算机科学技术导师周,中国科技大学计算机科学与技术学院导师教师师资介绍简介-周学海...
- Ubuntu18.04安装WPS字体缺失的解决方案
- python --Numpy详解(科学计算)
- gitlab仓储搭建
- mysql迅_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
- 强制卸载软件测试工资,软件安装卸载测试
热门文章
- matlab信号系统实验报告,信号与系统 MATLAB实验报告
- 1、Java三员管理
- c语言 输出所有水仙花数
- 2020数学复习全书习题全解【数学三】
- 优思学院:六西格玛证书有用吗?有什么方法获取六西格玛证书?
- Bosun中es表达语法
- VisualGDB导致Visual Studio报错:未能从程序集Package.LanguageService中加载类型xxx
- CAN BLF包解析和播包发送(二):CAN BLF包解析
- 绿联 蓝牙适配器 linux,选择进退两难-绿联4.1蓝牙适配器_硬件测评心得_ZNDS
- 关于计算机的英语演讲话题,大学生英语演讲话题