温故知新(十一)——IIC

这篇具有很好参考价值的文章主要介绍了温故知新(十一)——IIC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1 简介

IIC(I2C)是一种同步、多主、多从、分组交换、单端、串行计算机总线,由飞利浦半导体(现在的 NXP 半导体)在 1982 年发明。它广泛用于在短距离、板内通信中将低速外设集成电路附加到处理器和微控制器上。

1.1 拓扑结构

I2C 总线有两根线 SDA/SCL 就可以连一堆芯片,实现很多的外设应用。
温故知新(十一)——IIC

目前, I2C 可以支持以下几种模式:

双向总线:
standard-mode(Sm): ≤100 Kbit/S
Fast-Mode(Fm):≤400 Kbit/S
Fast-mode Plus(Fm+):≤1Mbit/S
High-speed mode (Hs-mode): ≤ 3.4 Mbit/s
单向总线:
Ultra Fast-mode (UFm): ≤ 5 Mbit/s

对于不同模式下,拓扑的链接存在不同
标准速度/快速模式
温故知新(十一)——IIC

高速模式拓扑
温故知新(十一)——IIC

1.2 工作原理

如果使用 IO 口模拟 I2C 总线,或者使用 FPGA 实现 I2C 接口,深刻理解 I2C 时序波形无疑是重点中的重点!

1.2.1 时序图

温故知新(十一)——IIC
  1. START 事件:每个字节发送的过程中都会有一个启动事件,就是在 SCL 常高时,采集到 SDA 高到低跳变,这就是启动事件
  2. 数据有效性:SDA 线上的数据必须在时钟的高周期保持稳定。数据线的高或低状态只能在 SCL 线上的时钟信号低时改变。每个传输的数据位产生一个时钟脉冲。所以时钟线的高电平比数据的有效电平时间短。
  3. ACK信号:确认信号 ACK 的定义如下:发送器在 ACK 时钟脉冲期间释放 SDA 线,因此接收器可以将 SDA 线拉低,并在此时钟脉冲的高电平期间保持稳定的低电平(见上图)。
  4. NACK信号:当在第九个时钟脉冲期间 SDA 保持高电平时,该数据被定义为“NACK”信号。之后主机可以产生停止条件以中止传输,或产生重复的开始条件以开始新的传输。
    导致 NACK 产生的条件有五个:
    4.1. 总线上没有报文中所包含地址的接收器,因此没有设备响应应答。
    4.2. 接收器无法执行接收或发送操作,比如它正在执行某些实时功能,并且尚未准备好与主 机进行通信。
    4.3. 在传输过程中,接收器收到应用协议不理解的数据或命令。
    4.4. 在传输期间,接收器无法再接收更多有效数据字节。比如程序或者芯片内置缓冲区已经满了
    4.5. 主接收器用 NACK 通知从发送器结束传输。这是何意呢?比如主设备已经接受到足够多的数据,不希望从设备发送更多的数据时,就可以 NACK 从设备,这样从设备就会停止发送

1.3 时钟同步

两个主机可以同时开始在空闲总线上进行传输,并且必须有一种方法来确定控制总线并完成其传输的方法。这是通过时钟同步和仲裁完成的。在单主机系统中,不需要时钟同步和仲裁。
时钟同步是通过 I2C 接口中 SCL 线的线与实现的。
温故知新(十一)——IIC
如何理解呢?
可以看到,上图中的CLK1和CLK2代表两个主机的时钟,SCL代表I2C上的时钟线。

  • 当主机1的CLK1从高到低变化后,SCL也会从高到低的过渡,此时总线上的主机2的CLK2依旧出于高电平,其会开始计数SCL的低电平时间,且一旦主机2的时钟变为低时,它就会将 SCL 保持在该状态,直到变为高状态为止。
  • 但是,此时主机1的时钟仍在其低周期内,则此时钟CLK1如果发生了从低到高的转变不会改变 SCL 线的状态。如果低电平周期较短的主机1在此期间进入高电平,则会进入等待状态。所以,SCL 线只要当主机1或者2其中一个处于低电平周期,其就会保持为低电平。这就是多主机下SCL 线的线与。
  • 当三者都进入高电平后,完成时钟同步。第一个完成其高电平周期的主机将 SCL 线再次拉低。

1.4 时钟仲裁

仲裁与同步类似,仅在系统中使用多个主机时才会涉及到,从站不参与仲裁过程。
所谓仲裁就是在多主机模式下,哪一个主机能获取介质的访问权限,获得权限的主机才可以传输 I2C 通信报文。只有在总线空闲时,主机才可以开始传输。两个主机可以在 START 的最小保持时间内产生 START 条件这种情况会导致总线上出现有效的 START 条件。然后需要仲裁以确定哪个主机将完成其传输。

仲裁是一位一位地进行。节点发送 1 个位后,回读比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA 线的仲裁可以保证 I2C 总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线。
温故知新(十一)——IIC
由上图可以看出,两个主机的仲裁程序是如何进行的。再SCL高电平时,DATA1和DATA2都产生了START事件,但是在之后的低三个时钟周期时,DATA1的电平与SDA上的电平不一致,也就是主机1产生的 DATA1 的内部数据电平与 SDA 线上的实际电平之间存在差异,DATA1 输出将关闭。从而主机 1 退出竞争,没有获得总线的控制权。

时钟延长:时钟延长通过将 SCL 线保持为低电平来暂停事务。直到再次释放高电平,事务才能继续。时钟延长是可选的,实际上,大多数从设备不包括 SCL 驱动能力,因此它们无法延长时钟。
其目的可以理解如下:
在字节传输级别,设备可能能够以快速速率接收数据字节,但需要更多时间来存储接收到的字节或准备另一个要发送的字节。此时,从机可以在接收和确认字节后将 SCL 线保持为 LOW,以强制主机进入等待状态,直到从机为握手过程中的下一个字节传输做好准备。
在位级别上,诸如微控制器之类的设备可以通过延长每个时钟的 LOW 周期来减慢总线时钟。任何主机的速度都将根据该设备的内部工作速率进行调整。

1.5 起始 START 字节

在一个多设备用 I2C 总线连一起的系统,其中一个设备(单片机)使用用 IO 口模拟I2C ,另一个设备使用硬件I2C,那么快速的硬件设备与依赖软件轮询的相对较慢的设备之间必然会存在速度差异。那么依赖软件轮询的设备在通信速率较高的情况下检测 START 条件信号就有可能丢失,导致系统不健壮。
起始字节就是用来解决这个问题。
当需要访问总线的主机发送 START 事件,不过其发送 START 字节并不是一个电平变化,而是一个字节(0000 0001)。另一个单片机/DSP 可以用低采样率对 SDA 线进行采样,直到检测到 START 字节中的七个零中的一个为止。

1.6 总线复位

在异常情况下,如果 SCL或者SDA 被拉为 LOW ,如何进行总线复位呢?

  1. 如 I2C 设备具有硬件复位输入,则使用硬件复位信号来复位总线。肯定优先选择。
  2. 如果 I2C 设备没有硬件复位输入信号,可以考虑用 MOSFET 控制设备电源,重新通电以激活强制性的内部上电复位(POR)电路。
  3. 还有一种做法是主机发送 9 个时钟 SCL 脉冲。使总线保持低电平的设备应在这九个时钟内的某个时间释放它。这个具体怎么做呢?主设备初始化 I2C 总线时,可以冗余加 9 个 SCL 脉冲以复位 I2C 总线,或者检测到 SDA 长时间被拉低后,可以以控制 IO 高低翻转的方式控制 SCL 产生 9 个脉冲。不过前提是拉死 SCL 的设备需要支持这种功能,如果两端都是自定义开发的则比较灵活了。

1.7 总线锁死

在正常情况下,I2C总线协议能够保证总线正常的读写操作。但是,当I2C主设备异常复位时(看门狗动作,板上电源异常导致复位芯片动作,手动按钮复位等等)有可能导致I2C总线死锁产生。
解决办法如下:

  1. 尽量选用带复位输人的I2C从设备。
  2. 将所有的从I2C设备的电源连接在一起,通过MOS管连接到主电源,而MOS管的导通关断由I2C主设备来实现,从而实现主设备控制从设备复位。
  3. 在I2C从设备设计看门狗的功能,发生死锁问题后,自动复位。
  4. 1.2.5节中的复位方法3。(不太适用)
  5. 在I2C总线上增加一个额外的总线恢复设备。这个设备监视I2C总线。当设备检测到SDA信号被拉低超过指定时间时,就在SCL总线上产生9个时钟 脉冲,使I2C从设备完成读操作,从死锁状态上恢复出来。总线恢复设备需要有具有编程功能,一般可以用单片机或CPLD实现这一功能。

2 参考技术文档

万变不离其宗之I2C总线要点总结
I2C总线死锁原因及解决方法文章来源地址https://www.toymoban.com/news/detail-488583.html

到了这里,关于温故知新(十一)——IIC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • .net 温故知新【14】:Asp.Net Core WebAPI  缓存

    .net 温故知新【14】:Asp.Net Core WebAPI 缓存

    缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性。 在最新的缓存控制规范文件RFC9111中,详细描述了浏览器缓存和

    2024年02月05日
    浏览(35)
  • Linux学习第31天:Linux MISC 驱动实验:温故知新

    Linux学习第31天:Linux MISC 驱动实验:温故知新

    Linux版本号4.1.15   芯片I.MX6ULL                                     大叔学Linux    品人间百味  思文短情长           学习是一个不断重复的过程。只有不断的使用、修正,才能越记越牢。将学习到的新的知识点应用到以往的项目经验中,才能不断提升自我,长此以往

    2024年02月06日
    浏览(8)
  • .net 温故知新【17】:Asp.Net Core WebAPI  中间件

    .net 温故知新【17】:Asp.Net Core WebAPI 中间件

    到这篇文章为止,关于.NET \\\"温故知新\\\"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NET core、ASP.NET CORE又有了一个新的认识。 不光是从使用,还包括这些知识点的原理,虽然深入原理谈不上,但对于日常使用也够了,我想的是知其然,知其所以然。 在实际

    2024年01月18日
    浏览(38)
  • .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍

    .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍

    在Asp.Net Core 上面由于现在前后端分离已经是趋势,所以asp.net core MVC用的没有那么多,主要以WebApi作为学习目标。 我使用的是VS2022, .Net 7版本。 在创建界面有几项配置: 配置Https 启用Docker 使用控制器 启用OpenAPI支持 不使用顶级语句 其中配置Https 是WebApi是否使用https协议,启

    2024年02月07日
    浏览(35)
  • 温故而知新-JVM垃圾收集器

    标记-清除 复制算法 标记-整理 现在垃圾收集器均采用分代收集策略,新生代由于98%的对象都是朝生夕死,复制算法更合适,只复制还存活的对象,工作量小,所以效率高。显然复制算法不适合老年代,因为老年代中的对象大部分是大对象,且长时间存活,复制算法效率太低

    2024年02月15日
    浏览(37)
  • 【温故而知新】HTML5 WebSocket

    HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点: 新增语义元素 :HTML5引入了许多新的语义元素,如 header、footer、article、section 等,这些元素有助于提高网页的结构化和可访问性。 媒体支持 :HTML5引入了 audio 和

    2024年01月18日
    浏览(36)
  • 【温故而知新】JavaScript的继承方式有那些

    JavaScript使用原型链来实现继承。每个JavaScript对象都有一个原型(prototype)属性,它指向另一个对象。当我们访问一个对象的属性时,如果该对象没有该属性,JavaScript会沿着原型链向上查找,直到找到该属性或者到达原型链的顶部(即Object.prototype)。 有多种方式来实现继承

    2024年01月19日
    浏览(38)
  • 【温故而知新】JavaScript类、类继承、静态方法

    JavaScript是一种广泛使用的编程语言,主要用于Web开发。它是一种脚本语言,这意味着它不需要像编译语言那样预先编译,而是在运行时解释和执行。JavaScript可以直接在浏览器中运行,这使得它在前端开发中特别重要,可以用于动态生成和更改网页内容、响应用户交互、发送

    2024年01月22日
    浏览(37)
  • 【温故而知新】HTML5 应用程序缓存

    HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点: 新增语义元素 :HTML5引入了许多新的语义元素,如 header、footer、article、section 等,这些元素有助于提高网页的结构化和可访问性。 媒体支持 :HTML5引入了 audio 和

    2024年01月23日
    浏览(34)
  • 【温故而知新】HTML5的Video/Audio

    HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点: 新增语义元素 :HTML5引入了许多新的语义元素,如 header、footer、article、section 等,这些元素有助于提高网页的结构化和可访问性。 媒体支持 :HTML5引入了 audio 和

    2024年01月21日
    浏览(264)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包