I2C 总线:固件实现细节

时间:2023-05-09

通过 I2C 通信的设备必须符合特定的事件序列。每个事件对应于控制时钟(SCL)和数据(SDA)线的某种方式;正如上面列出的“支持信息”文章中所讨论的,这两个信号是总线上的设备可以共享信息的方式。我们将一个通信序列称为“事务”;这个词比“传输”更合适,因为每个事务都涉及传输数据和接收数据,但在某些情况下,接收的数据是主机检测到的确认 (ACK) 或非确认 (NACK) 位。下面的时序图显示了一个典型的 I2C 事务。

请注意以下事项:

以下列表描述了上述交易中的事件顺序:

  1. 主机生成一个起始位来启动事务。
  2. 主机发送对应于它要与之通信的从机的 7 位地址。
  3. 个字节段的一位是读/写指示符。如果主机想从从机读取数据,则主机将此位设置为逻辑高电平,如果要向从机写入数据,则将此位设置为逻辑低电平。
  4. 下一个字节是个数据字节。这来自主机或从机,具体取决于读/写位的状态。像往常一样,我们有 8 位数据,从有效位开始。
  5. 数据字节后跟一个 ACK 或 NACK,如果这是一个读事务,则由主机生成,如果这是一个写事务,则由从机生成。ACK 和 NACK 可能表示不同的含义,具体取决于通信设备的固件或低级硬件设计。例如,主机可以使用 NACK 表示“这是一个数据字节”,或者如果从机知道要发送多少数据,它可以使用 ACK 来确认数据已成功接收。
  6. 事务以主设备生成的停止位终止。

多少字节?

每个事务都以相同的方式开始:起始位、地址、读/写、ACK/NACK。之后,可以从主机向从机或从机向主机发送任意数量的字节,每个字节后跟 ACK 或 NACK。NACK 可以用作“停止发送数据!”的一种方式。例如,主设备可能希望从从设备(例如温度传感器)接收连续的数据流;每个字节后面都会跟着 ACK,如果主机需要将注意力转移到其他事情上,它可以 NACK 从机并在它准备好时开始新的事务。

不停地开始

I2C 协议允许所谓的“重复启动”条件。当主机用一个起始位启动一个事务,然后在没有中间停止位的情况下通过另一个起始位启动一个新事务时,就会发生这种情况,如下所示:

只要单个主机需要执行两个或多个单独的事务,就可以使用此功能。但是,有一种情况重复启动条件特别好用:

假设您有一个从属设备,它将信息存储在一组寄存器中。您想要从寄存器地址 160,十六进制的 0xA0 中检索数据。I2C 协议不允许主机在单个事务中发送数据和接收数据。因此,您必须执行写入事务来指定寄存器地址,然后执行单独的读取事务来检索数据。但是,这种方法可能会导致问题,因为主机会释放总线在个事务结束时,因此另一个主控可以占用总线并阻止个主控获得它需要的数据。此外,第二个主机可能与同一个从机通信并指定不同的寄存器地址。. . 如果个主控然后在没有重新指定寄存器地址的情况下声明总线并读取数据,它将读取错误的数据!如果第二个主机然后尝试在其先写后读过程中执行读取事务,它也将以错误数据结束!这是等待发生的系统故障——幸运的是,重复启动条件可以通过启动第二个(读取)事务而不 释放总线来防止这种混乱:

当大师无法相处时

使 I2C 如此通用的部分原因是它支持多个主机。但正如上一节所展示的,高手并不总是能很好地相处。设备的 I2C 逻辑必须能够确定总线是否空闲;如果另一个主设备已占用总线,设备将等待当前事务结束,然后再启动自己的事务。但是当两个(或更多)master 试图同时发起一个事务时会发生什么?I2C 为这个令人厌烦的问题提供了一种有效且简单得惊人的解决方案。该过程称为“仲裁”,它依赖于 I2C 开漏总线配置的灵活性:如果一个主机试图将信号驱动为逻辑高电平而另一个尝试将信号驱动为逻辑低电平,则逻辑低主机将“获胜, ” 而且,

该图传达了 I2C 仲裁的基础;该过程发生如下:

  1. 两个主机都生成一个起始位并继续进行传输。
  2. 如果大师们碰巧选择了相同的逻辑电平,则什么也不会发生。
  3. 一旦主机尝试施加不同的逻辑电平,将信号拉低的主机就被宣布为赢家;失败者检测到逻辑不匹配并放弃其传输。

花点时间欣赏一下这种安排的简单性和有效性:

结论

本文涵盖了影响固件或低级硬件设计的重要 I2C 细节。如果您的微控制器包含专用 I2C 或 SMBus 硬件,一些实现细节将自动处理。这很方便,但肯定不是无知的借口,因为您仍然需要至少了解一点(可能不止一点)I2C 的真正工作原理。此外,如果您发现自己被困在没有 I2C 外设的荒岛上,此处提供的信息将帮助您顺利设计仅固件(也称为“位碰撞”)I2C 例程。

上一篇:无需电感器的升压和反相:电荷泵电源
下一篇:GPU 的预测瞬态仿真分析

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料