常用通信接口、协议: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.mzph.cn/news/161334.shtml

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

相关文章

java基础-集合

1、集合 在java中&#xff0c;集合&#xff08;Collection&#xff09;指的是一组数据容器&#xff0c;它可以存储多个对象&#xff0c;并且允许用户通过一些方法来访问与操作这些对象。j 集合的实现原理都基于数据结构和算法&#xff0c;如下&#xff1a; 数据结构&#xff1…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(2)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护 …

基于JavaWeb+SSM+Vue教学辅助微信小程序系统的设计和实现

基于JavaWebSSMVue教学辅助微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1 概述 随着信息时代的快速发展&#xff0c;互联网的优势和普及&#xff0c;人们生活…

[项目管理-33/创业之路-87/管理者与领导者-127]:如何提升自己项目管理的能力和水平

目录 前言&#xff1a; 一、项目经理的角色定位 1.1 项目经理的职责 1.2 不同矩阵类型的项目&#xff0c;项目经理的职责 1.3 项目经理的角色定位 1.4 项目经理的发展路径 二、项目经理项目理论和知识结构 三、软件项目经理在计算机水平的提升 四、项目经理业务知识的…

nodejs微信小程序+python+PHP-储能电站运营管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

七、通过libfdk_aac编解码器实现aac音频和pcm的编解码

前言 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12 AAC编码是MP3格式的后继产品&#xff0c;通常在相同的比特率下可以获得比MP3更高的声音质量&#xff0c;是iPhone、iPod、iPad、iTunes的标准音频格式。 AAC相较于MP3的改进包含&#xff1a; 更多的采…

系列八、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗

一、key是弱引用&#xff0c;gc垃圾回收时会影响ThreadLocal正常工作吗 到这里&#xff0c;有些小伙伴可能有疑问&#xff0c;ThreadLocalMap的key既然是 弱引用&#xff0c;那么GC时会不会贸然地把key回收掉&#xff0c;进而影响ThreadLocal的正常使用呢&#xff1f;答案是不会…

HTML新手入门笔记整理:HTML基本标签

结构标签 <html> </html> 告诉浏览器这个页面是从<html> 开始&#xff0c;到 </html>结束 <head> </head> 网页的头部&#xff0c;用于定义一些特殊内容&#xff0c;如页面标题、定时刷新、外部文件等。 <body> </body> …

基于SSM的旅游管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

数据分析基础之《matplotlib(1)—介绍》

一、什么是matplotlib 1、专门用于开发2D图表&#xff08;包括3D图表&#xff09; 2、使用起来及其简单 3、以渐进、交互方式实现数据可视化 4、matplotlib mat&#xff1a;matrix&#xff08;矩阵&#xff09; plot&#xff1a;画图 lib&#xff1a;库 二、为什么要学习m…

记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查

背景 最近发现集群主节点总有进程宕机&#xff0c;定位了大半天才找到原因&#xff0c;分享一下 排查过程 查询hiveserver2和namenode日志&#xff0c;都是正常的&#xff0c;突然日志就不记录了&#xff0c;直到我重启之后又恢复工作了。 排查各种日志都是正常的&#xff0…

代码规范之-理解ESLint、Prettier、EditorConfig

前言 团队多人协同开发项目&#xff0c;困扰团队管理的一个很大的问题就是&#xff1a;无可避免地会出现每个开发者编码习惯不同、代码风格迥异&#xff0c;为了代码高可用、可维护性&#xff0c;需要从项目管理上尽量统一和规范代码。理想的方式需要在项目工程化方面&#xff…

部署jekins遇到的问题

jdk问题 我用的jdk版本是21的结果版本太新了&#xff0c;启动jekins服务的时候总是报错最后在jekins的安装目录下面的jekinsErr.log查看日志发现是jdk问题最后换了一个17版本的就解决了。 unity和jekins jekins和Git源码管理 jekins和Git联动使用 我想让jekins每次打包的时…

3D电路板在线渲染案例

从概念上讲,这是有道理的,因为PCB印制电路板上的走线从一个连接到下一个连接的路线基本上是平面的。 然而,我们生活在一个 3 维世界中,能够以这种方式可视化电路以及相应的组件,对于设计过程很有帮助。本文将介绍KiCad中基本的3D查看功能,以及如何使用NSDT 3DConvert在线…

Day38力扣打卡

打卡记录 网格中的最小路径代价&#xff08;动态规划&#xff09; 链接 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])f [[0x3f3f3f3f3f] * n for _ in range(m)]f[0] grid[0]for i i…

Sentinel 授权规则 (AuthorityRule)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

Unity 三维场景的搭建 软件构造实验报告

实验2&#xff1a;仿真系统功能实现 1.实验目的 &#xff08;1&#xff09;熟悉在Unity中设置仿真场景&#xff1b; &#xff08;2&#xff09;熟悉在Unity中C#语言的使用&#xff1b; &#xff08;3&#xff09;熟悉仿真功能的实现。 2.实验内容 新建一个仿真场景&#x…

SpringBoot_websocket实战

SpringBoot_websocket实战 前言1.websocket入门1.1 websocket最小化配置1.1.1 后端配置1.1.2 前端配置 1.2 websocket使用sockjs1.2.1 后端配置1.2.2 前端配置 1.3 websocket使用stomp协议1.3.1 后端配置1.3.2 前端配置 2.websocket进阶2.1 websocket与stomp有什么区别2.2 webs…

思维模型 重叠效应

本系列文章 主要是 分享 思维模型 &#xff0c;涉及各个领域&#xff0c;重在提升认知。相似内容易被混淆或遗忘。 1 重叠效应的应用 1.1 重叠效应在教育中的应用 1 通过避免重叠效应提升学习效率 为了避免重叠效应&#xff0c;通过对比、归纳等方法来帮助学生更好地理解和掌…

黑马React18: Redux

黑马React: Redux Date: November 19, 2023 Sum: Redux基础、Redux工具、调试、美团案例 Redux介绍 Redux 是React最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia&#xff08;Vuex&#xff09;&#xff0c;可以独立于框架运行 作用&#xff1a;通过集中管理的方式管…