常用通信接口、协议:SCCB

一、概述

        SCCB(串行摄像头控制总线)是由欧姆尼图像技术公司(OmniVision)开发的一种类IIC的总线,主要用于其OV系列的图像传感器上(但目前有很多家的图像传感器都有采用该控制总线)。相对于IIC总线来说SCCB与之最主要的差异在于连续读写模式;SCCB不支持该模式,即每次读写完一个字节,主机必须发送一个NA信号。

        采用了SCCB总线的图像传感器都工作在Slave模式,对应的主控端为Master模式,也就是说和IIC一样的为主从模式的总线,同样的支持一主多从和单主单从(通过SCCB_E控制从机使能,低电平使能)。

二、信号线定义

        完整的SCCB总线包含:SCCB_E、SIO_C、SIO_D、PWDN四根信号线,其具体的作用分别为:

        SCCB_E:传输使能,主端输出,从端输入,默认空闲状态为高电平。低电平时传输有效,电平高到低表示 总线通信开始,电平低到高表示 总线通信结束。

        SIO_C:数据传输时钟,主端输出,从端输入,默认空闲状态为高电平。在SCCB_E使能(拉低)传输开始后电平由高到低表示数据传输开始,数据传输过程中高电平期间SIO_D数据采样有效,低电平期间SIO_D状态切换。

        SIO_D:数据传输信号,双向输入、输出,默认总线空闲为浮空电平(通常主端在空闲状态会选择将其拉高),高电平表示逻辑1(bit 1),低电平表示逻辑0(bit 0)。在总线通信开始,SCCB_E产生下降沿前,主机需要将SIO_D拉高,可以有效的避免总线出现未知错误。

        PWDN:输出、输入关闭。

三、通信过程

        SCCB的数据传输发生在通信开始信号(起始信号)和通信结束信号(结束信号)之间,由称之为相(phase)的基础传输单元组成。

        通信开始(起始信号):通信开始时序由SCCB_E下降沿前后的各信号线的序列时序状态组成;在SCCB_E下降沿前主端将SIO_D置1,并且SIO_D必须保持间隔一个不低于15ns的tPRC的高电平时间;在SCCB_E下降沿后SIO_D必须要保持间隔一个不低于1.25us的tPRA的高电平时间;在此期间,SIO_C必须始终保持在高电平状态。

        通信结束(结束信号):通信开始时序由SCCB_E上升沿前后的各信号线的序列时序状态组成;在SCCB_E上升沿前SIO_C拉高,并且要保持间隔一个不低于0ns的tPSA时间;在SCCB_E上升沿后SIO_D拉低,并且期间要保持间隔一个不低于15ns的tPSC时间。

        SCCB的数据传输主要分为:3相写、2相写、2相读,三种传输时序类型。这里的3相、2相的相指的是基础传输单元。

        每一个相元(phase)由8位数据位 + 1位 don’t care/NA位组成。如果是主端发数据(写操作),第9位就是don’t care(不关心)位;如果是从端发数据(读操作),第9位就是NA位。数据比特流都是MSB高比特在前的方式传输的。

        相元1传输的主要是从机的ID信息,SCCB支持单主多从,所以主机需要在相元1阶段发送从机ID信息,以便总线上的从机识别当前主机要与谁通信(单主单从时也不可省略)。从机ID为7bit,表示范围为0~127,bit 0 用于表示读/写操作,0为读取数据,1为写入。在相元1的8位数据之后的x位为don’t care位(但有的sensor会在该位通过SIO_D向主端发送一个逻辑0的NA数据,主机端可以通过该位判断对应ID的从机是否在线)。

        相元2传输的主要是从机寄存地址信息或者读取的数据信息;8bit后的1bit位也同样的为don’t care/NA位。

        相元3传输的主要是主机向从机寄存要写入的数据信息;8bit后的1bit位也同样的为don’t care/NA位。

        3相写时序:3相写时序是一个完整的主机向指定从机的指定寄存地址写入指定8bit数据的一个完整数据传输周期(相元1的bit0为1),每一个相元的第9bit都是don’t care位。

        2相写时序:2相写时序实际上是前半个主机从指定从机的指定寄存地址读取8bit数据的完整数据传输周期(和2相读时序共同组成一个完整的读时序),每一个相元的第9bit都是don’t care位。先向目标从机传输读标志(相元1的bit0和相元2中的8bit寄存地址)。

        2相读时序:2相读序实际上是后半个主机从指定从机的指定寄存地址读取8bit数据的完整数据传输周期(和2相写时序共同组成一个完整的读时序))。第一个相元的第9bit都是don’t care位,第二个相元的第9bit为NA位(主端向从端发送的确认信号)。

四、伪代码实现

//通信开始
void sccb_start(void)
{sccb_sda_out();sccb_sda_set(1);sccb_scl_set(1);delay_us(25);sccb_sda_set(0);delay_us(25);sccb_scl_set(0);delay_us(25);return;
}//通信结束
void sccb_stop(void)
{sccb_sda_out();sccb_sda_set(0);delay_us(25);sccb_scl_set(1);delay_us(25);sccb_sda_set(1);delay_us(25);return;
}//NA信号
void sccb_na(void)
{sccb_sda_out();delay_us(25);sccb_sda_set(1);sccb_scl_set(1);delay_us(25);sccb_scl_set(0);delay_us(25);sccb_sda_set(0);delay_us(25);return;
}//读取1字节,返回读取的数据
unsigned char sccb_read_byte(void)
{unsigned char byte = 0, index = 0;sccb_sda_in();for(index = 0; index < 8; index++) {delay_us(25);sccb_scl_set(1);byte = byte << 1;if(1 == sccb_read_sda()) {byte++;}delay_us(25);sccb_scl_set(0);}sccb_sda_out();return byte;
}//写入1字节,写入成功返回1,失败返回0
unsigned char sccb_write_byte(unsigned char data)
{unsigned char res = 0, index = 0;for(index = 0; index < 8; inde++) {if(1 == (data & 0x80)) {sccb_sda_set(1);} else {sccb_sda_set(0);}data <<= 1;delay_us(25);sccb_scl_set(1);delay_us(25);sccb_scl_set(0);}sccb_sda_in();delay_us(25);sccb_scl_set(1);delay_us(25);if(1 == sccb_read_sda()) {res = 1;} else {res = 0;}sccb_scl_set(0);sccb_sda_out();return res;
}//向寄存器写入1字节,写入成功返回1,失败返回0
unsigned char sccb_write_reg(unsigned char reg, unsigned char data)
{unsigned char res = 0;sccb_start();if(1 == sccb_write_byte(sccb_dev_id)) {res = 1;}delay_us(50);if(1 == sccb_write_byte(reg)) {res = 1;}delay_us(50);if(1 == sccb_write_byte(data)) {res = 1;}delay_us(50);sccb_stop();return res;
}//从寄存器读取1字节
unsigned char sccb_read_reg(unsigned char reg)
{unsigned char res = 0;sccb_start();sccb_write_byte(sccb_dev_id);delay_us(50);sccb_write_byte(reg);delay_us(50);sccb_stop();sccb_start();sccb_write_byte(sccb_dev_id | 0x01);delay_us(50);res = sccb_read_byte();sccb_na();sccb_stop();return res;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208470.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器ECS经济型e实例优惠99元性能怎么样?

阿里云服务器ECS经济型e实例优惠99元性能怎么样&#xff1f;阿里云服务器优惠99元一年&#xff0c;配置为云服务器ECS经济型e实例&#xff0c;2核2G配置、3M固定带宽和40G ESSD Entry系统盘&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;2.5 GHz主频&#xff0…

SkyWalking配置报警推送到企业微信

1、先在企业微信群里创建一个机器人&#xff0c;复制webhook的地址&#xff1a; 2、找到SkyWalking部署位置的alarm-settings.yml文件 编辑&#xff0c;在最后面加上此段配置 &#xff01;&#xff01;&#xff01;一定格式要对&#xff0c;不然一直报警报不出来按照网上指导…

排序算法--归并排序

实现逻辑 ① 将序列每相邻两个数字进行归并操作&#xff0c;形成floor(n/2)个序列&#xff0c;排序后每个序列包含两个元素 ② 将上述序列再次归并&#xff0c;形成floor(n/4)个序列&#xff0c;每个序列包含四个元素 ③ 重复步骤②&#xff0c;直到所有元素排序完毕 void pri…

Vatee万腾的数字化掌舵:Vatee科技解决方案的全面引领

随着数字化时代的到来&#xff0c;Vatee万腾凭借其卓越的科技实力和全面的解决方案&#xff0c;成功地在数字化探索的航程中掌舵引领。 首先&#xff0c;Vatee万腾以其强大的数字化科技实力成为行业的引领者。vatee万腾不仅在人工智能、大数据分析、云计算等前沿领域取得了显著…

electron入门(一)环境搭建,实现样例

1、首先需要安装git和node&#xff0c;配置环境变量&#xff0c;确保npm和git命令可用 2、 然后安装依赖 npm install -g electronnpm install -g electron-forgenpm install -g electron-prebuilt-compile3、 创建样例工程 electron-forge init my-new-app # 我这里碰见报错…

[SIGGRAPH-23] 3D Gaussian Splatting for Real-Time Radiance Field Rendering

pdf | proj | code 本文提出一种新的3D数据表达形式3D Gaussians。每个Gaussian由以下参数组成&#xff1a;中心点位置、协方差矩阵、可见性、颜色。通过世界坐标系到相机坐标系&#xff0c;再到图像坐标系的仿射关系&#xff0c;可将3D Gaussian映射到相机坐标系&#xff0c;通…

SpringMVC(五)SpringMVC的视图

SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户 SpringMVC视图的种类很多&#xff0c;默认有转发视图(InternalResourceView)和重定向视图(RedirectView) 当工程引入jstl的依赖&#xff0c;转发视图会自动转换为JstlV…

Impala VS Hive

Impala和Hive的关系 Impala是基于Hive的大数据实时分析查询引擎&#xff0c;直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析&#xff0c;实现了Hive的SQL语义的子集&#xff0c;功能还在不断的完善中。 与Hive的…

Centos 7 安装yum(针对python卸载yum出错)

提前下载所需安装包&#xff0c;按照下面顺序安装即可完成&#xff0c;每个依赖包必须正确安装 下载地址&#xff1a;http://mirrors.163.com/centos/7/os/x86_64/Packages/ rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联 whereis …

Vue3使用dataV报错问题解决

DataV官网&#xff1a;https://datav-vue3.jiaminghi.com/guide/ vue2中是没有问题的&#xff0c;这是第一次在vue3中使用发现的报错问题 报错问题 首先安装&#xff1a; pnpm add dataview/datav-vue3 1. 全局注册报错 然后main.ts全局注册 import { createApp } f…

阿里云99元服务器ECS经济型e实例性能如何?测评来了

阿里云服务器优惠99元一年&#xff0c;配置为云服务器ECS经济型e实例&#xff0c;2核2G配置、3M固定带宽和40G ESSD Entry系统盘&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;2.5 GHz主频&#xff0c;3M带宽下载速度384KB/秒&#xff0c;上传速度1028KB/秒&am…

【C语言】qsort函数

目录 简介 头文件 ​编辑 函数原型&#xff1a; 参数函数如何写&#xff1a; 参数函数要求&#xff1a; qsort对整性数据的排序&#xff1a; qsort对字符型数据的排序&#xff1a; 对结构体类型的内部元素排序&#xff1a; 函数的底层是以快速排序实现的 但是本文不深入…