I2C之知(三)--I2C总线的字节格式、时钟同步和仲裁

2023-11-17

        字节格式
        发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行.


        ACK和NACK
        每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括应答位的第9个时钟脉冲.
ACK应答信号是如下定义的:在ACK的第9个时钟脉冲中发送器释放SDA线,所以接收器可以将SDA拉低,使得在这个时钟脉冲的高电平期间保证SDA是低电平.建立和保持时间也应该计算在内.
        当在第9个时钟脉冲期间SDA仍然是高,这时定义为NACK信号.这时主机可以产生一个终止条件来终止传输,或者一个重复的开始条件来开始一个新的传输.这里有5中情况导致NACK的产生:
        1.总线当前的传输地址上没有接收器,所以没有设备用ACK来响应.
        2.因为接收者正在处理一些实时的功能,尚未准备与主机的通信,所以接收者不能收发.
        3.在传输期间,接收者收到不能识别的数据或者命令.
        4.在传输期间,接收者无法接收更多的数据字节.
        5.主-接收器要通知从-发送器传输的结束.

        时钟同步
        在空闲总线上两个主机可以同时开始传输,所以必须要有一个方法来决定哪个主机来控制总线并完成其数据传输.这个方法就是时钟同步和仲裁.在单主机系统中,时钟同步和仲裁不需要了.
        时钟同步通过使用I2C接口与SCL线的线与连接实现.意味着SCL线从高到低期间会引起主机开始计算它的低电平周期,一旦主机时钟变低,它会保持SCL线处于这种状态直到时钟到达高电平.然而,如果另一个时钟依旧是低电平,时钟的从低到高的变化并不会改变SCL线的状态.SCL拉低的时间由最长的低电平周期决定.短一些的低电平周期的主机在这时进入HIGH wait-state.

        当所有的主机的低电平周期都结束了,时钟线才回到高电平.这时主机时钟和SCL的状态一致,所有的主机开始计数他们的高电平周期.第一个结束高电平的主机将SCL线重新拉低.
        这样的话,同步的SCL时钟的低电平周期由所有主机中最长的低电平周期决定,高电平周期由最短的高电平周期决定.

        仲裁
        仲裁和同步一样,都是在系统中多于一个主机条件下协议要求的一部分.从机不参与仲裁处理.只有当总线空闲时,主机才可以开始一个传输.两个主机可能在开始条件规定的最小保持时间(tHD;SDA)内产生一个开始条件,结果总线上产生一个有效的开始条件.这个时候就需要仲裁来决定哪个主机完成它的传输.
        仲裁处理是逐个bit进行的.在每个bit,当SCL为高,每个主机都check一下来看看SDA的电平是否和它发送的电平吻合.这个过程可能会持续很多个bit.只要传输是同一的,那么两个主机可以无误的完成完整的传输.当一个主机试着发送高,但是检测到SDA为低,那么这个主机知道自己失去仲裁然后关掉自己的SDA输出.另外的主机就会去完成它的传输.
在仲裁处理过程中没有信息丢失.失去仲裁的主机在它失去仲裁的字节末尾处产生时钟脉冲,当总线空闲时必须重启它的传输.
        如果一个主机包含从机的功能,当它在寻址阶段丢失仲裁,那么赢得仲裁的主机可能会寻址它.丢失仲裁的主机必须立即切换到它的从模式.
        下图显示了两个主机的仲裁处理.在主机产生的DATA1和SDA线的实际电平的值出现不同时,DATA1的输出就关掉了.主机1失去了仲裁.赢得仲裁的主机2的传输数据不受影响.

        因为I2C总线只是仅由地址来控制,数据只由赢得仲裁的主机发送,这里没有最重要的主机,在总线上也没有优先级顺序.
        在仲裁处理正在进行的时候,一个主机发送重复的开始条件或者是终止条件而另一个主机仍然在发送数据,那么这时候有一个未定的状态.换句话说,下面的条件下会出现这种情况:
        主机1发送重复的开始条件,主机2发送一个数据位
        主机1发送终止条件,主机2发送一个数据位
        主机1发送重复的开始条件,主机2发送终止条件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I2C之知(三)--I2C总线的字节格式、时钟同步和仲裁 的相关文章

  • 设备怎样开启位置服务器,开启设备服务器

    开启设备服务器 内容精选 换一换 使用远程登录方式连接登录Windows云服务器时出现如下错误 此计算机无法连接到远程计算机 服务端安全组3389端口未开启 检查云服务器端口配置 服务端防火墙关闭 检查防火墙配置是否正常远程桌面连接配置不正
  • BMP存储方式

    BMP存储像素值的方式为从下至上 从左至右 紧随着文件头存储的字节为图像最下一行的数值 从左下角开始依次存储 22 22 22 23 为图像左下角像素的数值 依次向右存储 最后一行扫描完后 紧接着存储上一行 最后一个byte存储的是图像右上
  • Java中位数

    中位数 输入数组长度n 和n个数 输出这n个数的中位数 当结果为小数时向下取整 输入用例 1 1 输出用例 1 输入用例 2 3 3 输出用例 3 输入用例 5 5 3 1 2 4 输出用例 3 import java util Scann
  • 【ESP-IDF】2.ESP32C3移植u8g2显示库驱动OLED

    前言 这个系列的文章属于是为了一碟醋包了一顿饺子系列 起因是看到tb上某家店的ESP32C3开发板才9 9包邮 想着研究一下 把手头有个用Arduino UNO实现的项目升级一下 于是就有了这个系列 ESP32C3的简介 2020 年末 乐
  • React Navigation(三)-StackActions(API)

    原文链接 StackActions对象包含了生成特定actions的方法 即基于栈导航器的actions 这些方法扩展了NavigationActions 支持以下actions Reset 用一个新的状态替换当前状态 Replace 用其
  • Python 人脸表情识别

    人脸表情识别 一 图片预处理 二 数据集划分 三 识别笑脸 四 Dlib提取人脸特征识别笑脸和非笑脸 参考 环境搭建可查看Python人脸识别微笑检测 数据集可在https inc ucsd edu mplab wordpress inde
  • 阿里云CDN缓存预热与刷新以及常见的故障汇总

    文章目录 1 为CDN缓存的文件增加过期时间 2 CDN缓存预热配置 3 CDN缓存刷新配置 4 常见故障 CDN缓存预热指的是主动将要缓存的文件推送到全国各地的CDN边缘加速器上 减少回源率 提供命中率 缓存刷新指的是后期上传了同名的文件
  • ubuntu9.10 虚拟机连接windows网络上网,以及NFS挂载网络设置。

    1 虚拟机设置 2 关掉网卡 sudo ifconfig ethxx down 3 打开网卡 sudo ifconfig ethxx up 4 打开浏览器就可以使用网络上网了 NFS 1 vmware软件设置网络连接方式 2 选择桥接方式
  • 写了placement new也要写placement delete——条款52

    placement new和placement delete并非C 兽栏中最常见的动物 如果你不熟悉它们 不要感到挫折或忧虑 回忆条款16和17 当你写一个new表达式像这样 Widget pw new Widget 共有两个函数被调用 一
  • 映射表原理分析与总结

    在使用本地缓存时 经常用到映射表 大家都知道映射表保存数据的原理是将key做hash再取余 余数落在数组的不同索引中 利用数组的索引获取元素 时间复杂度为O 1 这样查询速度很快了 但是也存在一个问题 那就是如果两个key落到同一个索引桶上
  • 使用js获取上传文件的真实路径

    我们在使用html中的

随机推荐

  • 闭关之现代 C++ 笔记汇总(二):特性演化

    目录 前言 C 98 C 98 之前 C 98 的主要语言特性 特性总结 dynamic cast RAII 标准库组件 总结 find if 其他语言对 C 影响 非 C 98 内容 C 对其他语言影响 非 C 98 内容 C 11 C
  • java jre jvm_JVM、JRE和JDK的关系

    JVM Java Virtual Machine是Java虚拟机 Java程序需要运行在虚拟机上 不同的平台有自己的虚拟机 因此Java语言可以实现跨平台 JRE Java Runtime Environment包括Java虚拟机和Java
  • 并发问题(二)什么是并发

    1 什么是并发操作 并发操作是指同一时间可能有多个用户对同一数据进行读写操作 2 并发操作对数据的影响 如果对并发操作不做任何控制的话 会造成数据的不完整性 可能造成读脏数据 不可重复读 丢失修改还有幻读 3 对数据不完整性的举例 1 丢失
  • Java Spring Boot 框架

    Java Spring Boot 框架 Spring Boot是一个用于快速构建独立 生产级别的Java应用程序的开源框架 它是Spring Framework的扩展 旨在简化Spring应用程序的开发和部署 并提供一个约定优于配置的开发模
  • MYSQL5.1 WINDOWS环境下导出查询数据到EXCEL文件

    今天做一个多表的联合查询 用myadmin不支持导出 于是找到下面的方法 不错 查询出来的记录 导出到EXCEL文件 直接做报表输出 测试环境WINDOWS XP OFFICE 2003 MYSQL 5 1 451 创建一个测试表 3个字段
  • 利用gcc-arm-none-eabi开源工具链开发STM32程序

    一 前言 入门STM32开发时 用的是keil 这个IDE 后面因为要提高开发效率和keil 版权问题 选择开源的arm none eabi gcc 通过命令行调用make工具进行编译 链接 烧录 打包 二 要达到的效果 2 1 编译STM
  • 关于 C++ 打印 PDF 打印及 PDF 转图片、合并

    原文 http www aqcoder com post content id 42 pdf Portable Document Format 的简称 意为 便携式文档格式 是由 Adobe Systems 用于与应用程序 操作系统 硬件无
  • 从傅里叶变换看seq2seq

    通常使用循环神经网络处理NLP 自然语言处理 问题 循环神经网络模型特点决定了输出与输入维度不同 但数量相同 这显然有违常识 比如分词后中文句子 我 去 上班 翻译成英文后是 i am going to work 源语言与目标语言在表达同一
  • element ui下拉框的使用

    type label 支部资讯 value 1 label 违规公示 value 2
  • 12.完善统计图形——调整刻度范围和刻度标签

    文章目录 1 调整刻度范围和刻度标签 xlim 和xticks 2 逆序设置坐标轴刻度标签 刻度范围是绘图区域中坐标轴的取值区间 包括x轴和y轴的取值区间 刻度范围是否合适直接决定绘图区域中图形展示效果的优劣 因此 调整刻度范围对可视化效果
  • go添加国内镜像加速

    添加国内镜像加速 七牛云 七牛云镜像 全球CDN加速 全球CDN加速 打开你的命令终端输入Go 1 13 及以上 推荐 go env w GO111MODULE on go env w GOPROXY https goproxy cn di
  • 拔剑四顾心茫然,绿源直呼“行路难”

    老牌两轮电动车品牌绿源上市之旅 多歧路 6月7日 北京市市场监督管理局公布北京市电动自行车产品质量监督抽查结果 绿源两款电动自行车因存在问题被点名 充电器和蓄电池 整车质量 控制系统等不符合标准 而就在一周多以前 绿源还向港交所第二次递交了
  • linux 常用系统命令

    1 调出登录主机列表 sshgo 2 查找服务器 server name 3 切换 deploy 用户 sudo su deploy 4 上传本地文件 rz be 5 下载文件 sz filename 6 crontab CentOS 6
  • 这台计算机无法连接到服务器,请确认网络连接是否正常,Win7玩英雄联盟提示“无法连接到服务器,请检查您的网络连接”六种解决方法...

    说到LOL英雄联盟相信很多玩家都比较熟悉了 它是一款网络游戏 但是最近有用户说Win7系统玩英雄联盟的时候提示 连接失败 无法连接到服务器 请检查您的网络连接 如下图所示 导致游戏无法顺利进行 怎么办呢 下面小编给大家分享Win7玩英雄联盟
  • Shell脚本之数字大小排列(小到大)

    脚本内容 bin bash read p 请输入一个数字 num1 read p 请输入一个数字 num2 read p 请输入一个数字 num3 tmp 0 如果 num1 大于 num2 就把 num1 和和 num2 的值对调 确保
  • defineProperty和proxy区别

    1 不同点 区别一 defineProperty 是对属性劫持 proxy 是对代理对象 如果需要监听某一个对象的所有属性 需要遍历对象的所有属性并对其进行劫持来进行监听 Object keys data forEach key gt le
  • 重构——在对象之间搬移特性(2)

    Inline Class 某个类并没有做太多的事情 应该将这个类的所有特性搬移到另一个类中 然后移除原类 过程与Extract Class相反 不再做介绍 Hide Delegate 客户通过一个委托关系来调用另一个对象 应当在服务类上建立
  • 回顾 Spring

    什么是Spring spring是一个为了简化企业级开发 它是轻量级的 使用IoC AOP等进行开发的一站式框架 比如 控制反转 依赖注入 面向切面编程 spring事务管理 通过spring继承其他框架 Spring继承jdbc myba
  • Python入门之魔法方法

    魔法方法 魔法方法总是被双下划线包围 例如 init 魔法方法是面向对象的 Python 的一切 如果你不知道魔法方法 说明你还没能意识到面向对象的 Python 的强大 魔法方法的 魔力 体现在它们总能够在适当的时候被自动调用 魔法方法的
  • I2C之知(三)--I2C总线的字节格式、时钟同步和仲裁

    字节格式 发送到SDA线上的每个字节必须是8位 每次传输的字节数量是不受限制的 每个字节后必须跟着一个ACK应答位 数据从最高有效位 MSB 开始传输 如果从机要执行一些功能后才能接收或者发送新的完整数据 比如说服务一个内部中断 那么它可以