📅 2025/05/16   👀

I2C 通信协议概述

I2C 是一种半双工系统内部协议,通常用于系统内多个集成电路(IC)间的通讯。通过调节时钟频率,其可以实现 5 种速率:100kbps 400kbps 1Mbps 3.4Mbps 5Mbps。

一、物理层

不同于 RS-232 为异步通信需要设置波特率,I2C 拥有一条时钟线,为同步传输,其数据有效性如下:

二、协议层

I2C 的通信过程是由主机发起的,支持主机写数据到从机和主机在从机中读数据,其过程如下。

  1. 起始信号:SCL 线是高电平时 SDA 线从高电平向低电平切换,即一个下降沿,表示通讯的起始。起始和停止信号一般由主机产生。

  2. 设备地址:起始信号产生后所有从机开始等待主机接下来的广播。与主机广播地址相同的设备被选中等待接下来的信号,其余设备会忽略接下来的信号。这个从机地址可以是7位(或10位),这是一个 8 位的数据,其中高 7 位是设备地址。

  3. 操作位:最后 1 位是读写位,为 0 表示写操作,为 1 表示读操作。

  4. 数据传输:

    • 写数据:主机接收到从机的应答 ACK 信号后开始发送数据,每个数据包大小为 8 bits, 主机每发送一个数据包,等待从机应答信号 ACK,并重复这个过程。
    • 读数据:主机接收到从机的应答 ACK 信号后开始接收数据,从机开始发送数据,每个数据包也是 8 bits,从机每发送一个数据包要等待主机的应答信号 ACK,并重复这个过程。倘若主机希望停止接收数据,会发送一个非应答信号 NACK,从机接收到需停止发送
  5. 停止信号 P:当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止。

Ref

[1] 野火 STM32 I2C https://doc.embedfire.com/mcu/stm32/f103badao/std/zh/latest/book/I2C.html

[2] A Basic Guide to I2C - Texas Instruments https://www.ti.com/lit/an/sbaa565/sbaa565.pdf?ts=1747371431982&ref_url=https%253A%252F%252Fwww.google.com%252F