I2C(IIC)的仲裁、时钟同步和时钟扩展

news2024/11/22 5:52:06

I2C(IIC)的仲裁、时钟同步和时钟扩展

注意,CSDN以及博客园上有大量抄袭和以讹传讹的情况,注意鉴别。

本文参考了Philip的I2C specification以及wiki pedia,并且通过实践验证。

阅读本文要求你已经对i2c的协议有基本的了解。我们将会着重介绍多主机模式(multi-master)下的仲裁(arbitration),仲裁时不同主机之间的时钟同步(clock synchronization),以及从机(slave)动态调整通信速率的措施时钟扩展(clock stretching)

仲裁

发生仲裁的前提是,一条总线上挂载了多个主机,并且这些主机都支持多主机模式,即每一个主机都可以实时监测SDA以及SCL的情况,从而通过start和stop位来确定总线的情况(被占用还是空闲)。当多个主机检测到当前总线处于空闲状态时(这里以2个主机为例),可能会同时发出启动标志位(发出的时间间隔很短,因此无法检测到其他节点产生的电平变化,误认为总线是空闲的),这时候仲裁机制开始生效。

总线归属权的仲裁是通过SDA线完成的。由于I2C的总线设计是线与(wired-AND),因此低电平是显性电平。只要有一个节点将SDA拉低,那么整条总线都会拉至低电平。在两个主机都认为总线空闲并开始通信之后,当遇到第一个两者发送的不同的位时,会决出总线的归属者。

直接举例。设主机1将向address为0b10100111的从机发送数据,主机2将向addres为0x10101000的从机发送数据。两者都占有总线并同时向SDA写入数据。注意I2C发送的顺序是MSB->LSB(先发送高位)。两者的前四位数据相同,而当发送进行到第五个时钟周期时,master1的第五位为0,而master2的第五位为1,此时根据线与特性,SDA总线的电平会被master1拉低。master2会检测到自己要发送的电平和总线的实际电平不符,从而获知有其他主机正在发送,随之停止后续的发送,让出总线的归属权。

若两主机向相同的地址写入数据,那么仲裁过程将继续,直到在后续的数据位中决出总线的归属权(仍然是通过上述的方法)。

P.S. 仲裁不能发生在start和stop段,否则行为是未定义的。即倘若两个主机向相同的地址写入相同的数据,那么并不能决出总线的归属权。在这时,一个主机发出stop结束通信,而另一个主机则发出restart开始新的通信,这时候的行为就是未定义的。详见I2C-bus specification and user manual的第十二页:

在这里插入图片描述

I2C的仲裁是通过采样SDA完成的,因此不会破坏数据的有效性,通信不会停止,也不会有数据帧丢失。但是I2C不具有主机优先级的设定,因为总线的归属权是根据主机发送的数据确定的,因此无法提前为每个主机设定发送或接收的优先级。

时钟同步

时钟同步只会在仲裁时发生。SCL是由主机产生的时钟信号,用于和从机确定数据发送和采样的时间点。倘若处在仲裁期间,会有多个主机同时发送往SCL上发送时钟信号。两个主机配置的通信速率可能不同,因此时钟频率必然不同;即使配置了相同的通信速率,两者开始发送数据的时间也不同。此时时钟信号具体如何确定就要通过clock synchronization的机制。

在总线空闲的时候,SCL被上拉电阻拉高。开始通信后,主机的时钟信号接入SCL中。如下图所示,有两个主机(时钟信号分别为CLK1和CLK2)都认为主机空闲,因此开始将时钟信号输入SCL。同步分为以下五个阶段:

  1. CLK1率先变为低电平,由于线与特性CLK2也变成低电平。
  2. 但是CLK2的低电平时间更长(时钟周期更长,CLK1的周期更短),即使主机1内部的CLK1已经变成高电平,SCL的实际电平仍然和CLK2保持一致。此时,主机1将会检测到这一情况,并从此时开始计数(计算低电平持续的时间,即下图中的wait state,稍后用)
  3. CLK2迎来高电平之后,主机1内部的wait state结束,因为两者都为高,因此SCL总线进入高电平,两个主机内部都会开始对高电平持续的时间进行计数。
  4. 随后,CLK1会比CLK2先回到低电平(此时CLK1的周期仍然比CLK2更短)。
    在这里插入图片描述
虚线框表示CLK2原本的波形
  1. 现在,CLK1以及获得了需要延长的低电平时间,CLK2也获得了需要减短的高电平时间(都是通过刚才的计数获得的),两个主机会根据之前的计数重新调整自己的时钟周期,从而完成时钟同步。

例如,在时钟同步之前,主机1的速度为400kbit/s(fast mode),主机2的速度为100kbit/s(standard mode),同步之后,速度都会变为100kbit/s。如果两者的通信速率本就相同,但也会因为CLK的开始时间不一样而出现错位,这同样会通过时钟同步而矫正。

其他的教程中常出现一句话叫:“同步之后的时钟,低电平的时间取决于低电平最长的CLK,高电平时间取决于高电平时间最短的CLK”,描述的实际上就是I2C总线的线与特性。通过线与的特性以及I2C对SCL的持续检测(采样),我们就可以实现时钟同步了。

关于时钟同步的原始描述,可以参见I2C-bus specification and user manual的第11页。

时钟扩展

和其他常见的通信方式相比,I2C可以动态地调整总线的通信速率,这是通过时钟扩展(clock stretchign)完成的。

同样,时钟扩展需要I2C的硬件支持,其主机和从机都需要相关的硬件才可以实现这一功能。

虽然我们已经设定了I2C的通信速率(如标准模式,快速模式,高速模式等),但支持时钟扩展的I2C硬件可以根据情况动态改变通信速率。时钟扩展是由从机发起的。如从机正在处理其他任务无暇接收数据,或上一次收到的数据还没来得及写入或转移到其他地方时,就可以在收到一个byte的数据之后主动将SCL拉低(此时尚未发送ACK给主机),主机会检测到SCL的变化,进入等待状态(wait state),此时主机便会停止数据的发送,直到检测到SCL被释放(I2C的两条总线都是接了上拉电阻,默认为高电平,因此称回到高电平为“释放”)并收到释放之后的ACK信号。

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

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

相关文章

调剂的事情该什么时间想?

小部分硕士考生已经开始关心调剂的事情了,其实这个事情还早,但对于考试成绩不是很理想又想要今年顺利读书的考生,调剂有可能会成为实现其目标的一条途径。针对这个问题小立老师针对MBA/MPA/MEM管理类硕士为大家做个前期的梳理,以平…

立足信创国产化运维,打造安全可控IT运维管理系统

随着国产化信创应用试点行业的不断扩大,应用信创产品的企事业单位逐渐增多。大多数企业均面临着陌生的国产化环境与产品,其使用习惯和解决问题的方式都面临改变。北京智和信通切实立足用户需求,提供信创运维服务。 通过“监、管、控、析、安…

监控 DolphinDB 进程对服务器资源的使用情况

本方案主要用于监控 DolphinDB 进程对服务器资源的使用情况及 DolphinDB 性能,如 DolphinDB 进程 CPU 占用情况、DolphinDB 进程内存占用情况、DolphinDB 进程磁盘资源使用情况等。DolphinDB 内置了相应的运维函数以获取当前节点的资源使用情况,Promethe…

OpenHarmony#深入浅出学习eTs#(五)eTs语言初识

本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) 一、eTs介绍 概述 基于TS扩展的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架,支持开发者高效的构建跨设备应用UI界面。 基础能力 使用基于…

实战:一个脚本实现统计linux进程相关的信息

文章目录公司任务脚本思路脚本源码及写作过程执行测试又遇到问题问题解决总结公司任务 王同学刚刚入职,就被安排了一项任务,据说还比较紧急。 公司一共有200多台服务器,要求王同学统计一下每台服务器的IP,以及各个进程的数量。 …

Spring Boot[概述、功能、快速入门]

系列文章目录 从今天开始,将会发关于SpringBoot的内容,持续更新基础篇、高级篇(查看源码部分)。今天是第一天,我们来了解SpringBoot和快速创建SpringBoot项目。 该系列文章会持续更新~ 目录 系列文章目录 前言 一…

在国内用Windows给BT做种,真是一山绕过一山缠(附解决方案)

国内的网盘,动不动就乱删东西,实在是狗的不像样子,于是我有了玩一下BT(俗称 比特洪流,种子)的想法。 BT技术的玩法是,我有一份资源,制作一个种子,然后分享这个种子&#…

【1.2】认识微服务--微服务技术对比SpringCloud

认识微服务--微服务技术对比&SpringCloud微服务结构微服务技术对比DubboSpringCloudSpringCloudAlibaba企业需求SpringCloud知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。 微服务结构 微服务这种方案需要技术框架来落地…

如何用电脑录制视频?图文教学,快速学会

​与图片相比,视频可以更生动地表达信息。除了记录一些应用程序的内容外,有时我们还需要记录电脑桌面和录制视频。如何用电脑录制视频?本篇文章,将会以图文讲解的方式,教你如何用电脑录制视频。 电脑录制视频1&#xf…

第001课 - 项目介绍

文章目录 项目背景项目技术和特色项目前置要求分布式基础篇,就是快速开发一个电商的后台管理系统。 后端使用的技术栈,就是springboot+springcloud+mybatis+docker作为后端的基础环境。 结合前端的vue和elementui。 使用逆向工程的方式,快速帮助我们开发出来一个后台管理…

想入行软件测试不知道往哪个职业发展方向

现在关于软件测试领域的群体就有4种情况:‘低管理,低技术’ ‘低管理,高技术’ ‘高管理,低技术’ ‘高管理,高技术’ 好多人对自己测试的职业发展很迷茫,个人觉得这篇文章不错,转给大家分享下&…

数据可视化④:大学生就业可视化呈现

大学生就业是和我们息息相关的话题,每一位大学生都关注着,我们常常在网络上看到有关大学生就业的话题,比如毕业季的一些讨论。在大一的创新创业课中,我们也了解到自己所学的专业和以后如何就业,往哪方面就业。但我们了…

高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

前端常见问题汇总(九)

一、let ,const, var 有什么区别 用let声明变量,它的用法类似var,但是let所声明的变量,只在所在的代码块内有效 {let a 10 var b 1}console.log(a) //: a is not definedconsole.log(b) //1let const 不存在变量提升,规范代码&#xff08…

华尔街抢Web3商标!汇丰注册元宇宙虚拟信用卡、富达抢NFT市场

全球最大投行摩根大通(JPMorgan)在今年2月发布了一份元宇宙研究报告,指出元宇宙、Web3 经济在未来每年可创造1 兆美元的商机。 与此同时,摩根大通于今年2月15日成为首家进入元宇宙的银行,其在热门元宇宙平台Decentral…

企业数据上下云高速传输解决方案

国家大力发展数字经济,工信部将提供一批成本低、见效快、适用性强的数字化解决方案,让中小企业逐步将业务数据上云,实现高质量发展,数据上云则将成为趋势。 镭速传输便是提供这种数字化解决方案的一款软件,使用镭速的高…

C#,大数计算类Skyiv.BigInterger和任意精度算术运算的静态类BigArithmetic的C#源代码

尊重与诚信是软件发展的根本因素。 1、多年前 Skyivben 发布的大数计算的代码 本文的代码全部来自于 银河 的文章。 博客园——Skyivbenhttps://www.cnblogs.com/skyivben/ 因为 博客园 的格式问题,大家用起来不方便,因而作者稍微整理一下,…

程序员必学的编辑语法——Markdown

Markdown是一种纯文本格式的标记语言。通过简单的标记语法,它可以使普通文本内容具有一定的格式。能使博客笔记更易阅读。 优点:因为是纯文本,所以只要是支持Markdown的地方都能获得一样的编辑效果,可以让作者摆脱排版的困扰,专心…

激光雷达点云投影到前视图(附 python代码)

根据激光雷达的线束编号和水平角度(也可以通过计算得到),把点云投影到前视图,效果如下图: 球面投影推导过程 假设有一个m 线的旋转扫描式激光雷达,它的垂直视场角FOV 被分为上下两个部分:FOV_up 和FOV_down ,通常以FOV_up 的数值为正数而FOV_down 数值为负数…

webpack相关

1 简介 webpack 是一个静态模块打包器。入口js文件(引入JQ、less等chunk块)-->less转为css/es6转为es5-->打包后输出为bundle。1.1 五个核心概念 入口(Entry) 输出(Output) Loader :让 webpack 去处理那些非 JavaScript 文件 (webpack …