Main Content

支持 I2C 通信

I2C,亦称集成电路,是一种用于集成电路和低速外设通信的同步片间互联协议。一些常见的基于 I2C 的设备包括 EEPROM、热传感器和实时时钟。I2C Master Write 模块和 I2C Master Read 模块支持与 I2C 设备通信。

设备上的 I2C 总线有一个 I2C 主机,它连接到两条双向信号线:串行数据线 (SDA) 和串行时钟线 (SCL)。这两条线连接到所连 I2C 从机设备上的一对引脚。I2C 从站设备具有唯一 7 位或 10 位地址,由制造商提供。如果地址不唯一,请参考设备数据手册以重新配置地址。

主节点生成一个时钟信号并启动与从机设备的通信。从机节点接收该时钟信号并向 I2C 主机确认以作为响应。

I2C 使用以下通信模式:

  • 主机发送:I2C 主机向 I2C 从机写入数据

  • 主机接收:I2C 主机从 I2C 从机读取数据

  • 从机发送:I2C 从机向 I2C 主机写入数据

  • 从机接收:I2C 从机从 I2C 主机读取数据

开始和停止条件

I2C 消息由起始位、要传输的数据和停止位组成。

当 SCL 仍处于高电平时,SDA 从高电平变为低电平表示开始条件。当 SCL 保持在高电平时,SDA 从低电平变为高电平表示停止条件。所有其他 SDA 转换都在 SCL 处于低电平时发生。

数据应答

I2C 通信将数据字节定义为 8 位长度。I2C 可以传输单字节或多字节的数据。在数据传输期间,每个字节后都有一个应答 ACK 信号。ACK 的时钟由主机生成,而接收端(主机或从机)通过在应答时钟脉冲处于高电平时拉低 SDA 并使其保持低电平来生成 ACK。

如果 SDA 在应答期间未被拉低,则表明接收端处于 NACK 状态(未应答)。如果从机未准备好传输或接收下一个数据字节,它会保持 SCL 处于低电平状态,从而使主机进入等待状态。一旦从机准备就绪并释放 SCL,就会恢复正常的数据传输。

I2C 读/写

I2C 读/写入操作如下进行:

  1. I2C 主机通过发送起始条件,后跟 7 位从机地址和指示写 (0)/读 (1) 的第 8 位来启动通信。

  2. 主机释放 SDA,并等待来自从机设备的 ACK。

  3. 如果从机在总线上,它会回复一个 ACK 作为应答。

  4. 主机继续处于发送或接收模式(根据其发送的读取或写入位),从机继续处于对应模式(分别为接收或发送)。

  5. 主机通过发送停止条件来终止数据传输。

下图显示了 I2C 从机设备上的单字节读写。

I2C 寄存器读/写

I2C 寄存器的读/写入操作如下:

  1. I2C 主机通过发送开始条件,后跟 7 位从机地址和指示写 (0)/读 (1) 的第 8 位来启动通信。

  2. 主机发出 SDA,并等待来自从机设备的 ACK。

  3. 如果从机在总线上,它会回复一个 ACK 作为应答。

  4. 然后,主机写入它要访问的从机的寄存器地址。

  5. 一旦从机确认寄存器地址后,主机就开始发送数据字节,并在每个写/读字节得到 ACK 应答后继续传输。

  6. 主机通过发送停止条件来终止数据传输。

下图显示了对 I2C 从机设备中存在的寄存器的单字节读写过程。