IIC 协议

IIC 概述

IIC(Inter-Integrated Circuit),也叫 I2C(Inter-IC Communication)总线,是一种串行通信协议,由 Philips 公司在 1980 年代初开发。IIC 总线用于连接微控制器、传感器和其他集成电路,它具有以下特点:

  1. 双线制结构简单:由一条数据线(SDA)和一条时钟线(SCL)组成。
  2. 多主机并行通信:多个 Master 设备可同时接入同一条 IIC 总线上进行数据交换。
  3. 硬件资源占用少:只要两根线就可以连接多个器件。
  4. 数据传输速率快:现代 IIC 总线的最高传输速率可达到 400Kbps。
  5. 低功耗设计:使用者可以通过软件控制设备进入睡眠模式以减少功耗。

传输协议

写操作

  • 主机要发出一个起始信号
  • 主机发出一个设备地址用来确定是往那一个芯片写数据,以及写标记(0)
  • 从设备回应(用来确定这个设备是香存在,然后就可以传输数据)
  • 主设备发送一个字节数据给从设备,并等待回应
  • 每传输一字节故据,接收方要有一个回应信号(确定故据是否接受完成),然后再传输下一个故据。
  • 数据发送完之后,主机就会发送一个停止信号。

读操作

  • 主机要发出一个起始信号
  • 主机发出一个设备地址用来确定是往那一个芯片读数据,以及读标记(1)
  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据
  • 从设备发送一个字节放据给主设备,并等待回应
  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个放据。
  • 数据发送完之后,主芯片就会发送一个停止信号。

状态

空闲状态

  • SCL 和 SDA 都为高电平

此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

起始状态

  • SCL 为高电平,SDA 由高电平变为低电平

标志着一次数据传输的开始。起始信号是由主控器主动建立的,在建立该信号之前 I2C 总线必须处于空闲状态。

结束状态

  • SCL 为高电平,SDA 由低电平变为高电平

数据传输状态

  • SCL 高电平期间,SDL 保持稳定
    • SDL 为高电平表示 1,低电平表示 0

在 IIC 总线上传送的每一位数据都有一个时钟脉冲相对应 (或同步控制),即在 SCL 串行时钟的配合下,数据在 SDA 上从高位向低位依次串行传送每一位的数据。进行数据传送时,在 SCL 呈现高电平期间,SDA 上的电平必须保持稳定,低电平为数据 0,高电平为数据 1。只有在 SCL 为低电平期间,才允许 SDA 上的电平改变状态。下图是 0xaa 在 IIC 总线上有效传输 (有效传输是指第 9 个时钟的高电平期间,从机给主机反馈了一个有效的应答位 0) 的图示

在时序图中,MSB 代表的是 Most Significant Bit(最高位)。它表示二进制数中最左边的一位,也就是最高位。在一个 n 位的二进制数中,最高位的权值为 2^(n-1)。因此,MSB 在时序图中通常用来指示二进制数或数据字的最高位。同理,LSB 代表的是 Least Significant Bit(最低位)。它表示二进制数中最右边的一位,也就是最低位。

应答状态

  • SCL 为高电平,SDA 由高电平变为低电平(上图最后的 ACK 标记)

I2C 总线上的所有数据都是以 8 位字节传送的,发送器 (主机) 每发送一个字节,就在第 9 个时钟脉冲期间释放数据线,由从设备反馈一个应答信号。应答信号为低电平时,规定为有效应答位 (ACK 简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位 (NACK),一般表示接收器接收该字节没有成功。对于反馈有效应答位 ACK 的要求是,接收器在第 9 个时钟脉冲之前的低电平期间将 SDA 线拉低,并且确保在该时钟的高电平期间为稳定的低电平

以下四种情况 IIC 通信过程中会产生非应答位(NACK):

  • 从机正在处理某些实时的操作无法与主机实现 IIC 通信的时候,从机会给主机反馈一个非应答 (NACK)
  • 主机发送数据的过程中,从机无法解析发送的数据,从机也会给主机反馈一个非应答位 (NACK)
  • 主机发送数据的过程中,从机无法再继续接收数据,从机也会给主机反馈一个非应答位 (NACK)
  • 主机从从机中读取数据的过程中,主机不想再接收数据,主机会给从机反馈一个非应答位 (NACK),注意,这种情况是主机给从机反馈一个非应答位 (NACK)

参考资料

  1. IIC总线的原理与Verilog实现 - jgliu - 博客园
  2. IIC时序分析 - 夏天师妹 - 博客园