在嵌入式系统中,微控制器与外设的通信接口选择至关重要。I²C(Inter-Integrated Circuit,集成电路总线)作为由 NXP(原 Philips)提出的串行通信协议。

一、I²C 总线核心构成:两根线的极简设计

I²C 总线的最大优势在于硬件接口的简洁性,仅通过两根信号线即可实现双向通信,他是半双工串行同步通信,极大节省了微控制器的引脚资源。

SCL(Serial Clock Line):串行时钟线
由通信中的主机(通常为微控制器)控制,提供同步时钟信号,用于协调数据传输的节奏,确保发送方与接收方的时序一致性。

SDA(Serial Data Line):串行数据线
负责双向传输数据,所有设备的 SDA 引脚均连接至此线路,数据的发送与接收均通过该线完成。

硬件关键:上拉电阻
为保证总线在空闲状态(无设备通信时)保持高电平,SDA 和 SCL 线路需各串联一枚4.7 kΩ ~ 10 kΩ的上拉电阻。当设备未驱动线路时,电阻会将信号线拉至高电平,避免信号悬空导致的误触发。

二、I²C 关键信号定义:通信的 "起止密码"

I²C 协议通过特定的电平变化定义通信的关键节点,其中 START(起始)和 STOP(停止)信号是划分通信周期的核心标识,而数据有效性则决定了信号的可采样时机。

信号类型 定义与实现方式 作用
START(起始) SCL 保持高电平时,SDA 由高电平跳变为低电平 告知总线上所有设备:通信即将开始
STOP(停止) SCL 保持高电平时,SDA 由低电平跳变为高电平 告知总线上所有设备:通信已结束,释放总线
数据有效性 SCL 低电平时 SDA 可改变,高电平时 SDA 需稳定 接收方仅在 SCL 高电平时采样 SDA 信号,确保数据准确

三、I²C 核心时序解析:字节传输与读写操作

I²C 通信由主机全程控制,所有时序流程均围绕 "起始 - 数据传输 - 应答 - 停止" 的逻辑展开。不同操作场景下,时序细节存在差异,以下为核心时序的分步拆解。

1. 单字节传输时序:基础通信单元

单个字节的传输是 I²C 通信的最小单位,流程可分为 3 个关键阶段:

  1. 起始信号触发:主机将 SCL 置为高电平,随后将 SDA 从高拉低,产生 START 信号,启动通信。
  2. 8 位数据传输:数据以高位在前的顺序发送,SCL 在低电平时,发送方可修改 SDA 电平(准备数据);当 SCL 跳变为高电平时,SDA 电平保持稳定,接收方此时采样数据。
  3. 应答信号反馈:第 8 位数据传输完成后,进入第 9 个 SCL 周期:
    • 若接收方成功接收数据,会将 SDA 拉低,产生ACK(应答) 信号,告知发送方继续传输;
    • 若为读操作的最后一个字节,主机可将 SDA 置高,产生NACK(非应答) 信号,告知从设备停止数据发送。

2. 写操作时序:主机向从设备传数据

写操作是主机将数据写入从设备(如向 EEPROM 存储数据)的过程,流程清晰且线性,具体步骤如下:

  1. 主机发送START信号,启动通信;
  2. 主机发送 8 位 "设备地址 + 读写位":前 7 位为从设备的唯一地址,第 8 位为写控制位(0)
  3. 从设备识别地址后,返回ACK信号;
  4. 主机逐字节发送待写入数据,每发送 1 字节后等待从设备的ACK,确认数据接收成功;
  5. 所有数据发送完毕,主机发送STOP信号,释放总线,写操作结束。

3. 读操作时序:主机从从设备取数据

读操作需先明确从设备的 "数据位置"(通常为寄存器地址),因此流程为 "先写后读",包含一次 "重复起始" 信号,具体步骤如下:

  1. 主机发送START信号,启动通信;
  2. 发送 "设备地址 + 写位(0)",等待从设备返回ACK(此阶段为 "寻址 + 告知写意图");
  3. 主机发送目标寄存器地址(即要读取的数据所在位置),从设备返回ACK
  4. 主机发送重复 START信号(不发 STOP,避免总线释放),启动读阶段;
  5. 发送 "设备地址 + 读位(1)",从设备返回ACK
  6. 从设备逐字节向主机传输数据,每传输 1 字节后等待主机的ACK
  7. 当读取到最后 1 字节时,主机发送NACK,告知从设备停止传输;
  8. 主机发送STOP信号,释放总线,读操作结束。

四、I²C 协议核心优势:为何成为嵌入式优选?

  1. 硬件极简:仅需 SDA、SCL 两根信号线,搭配上拉电阻即可实现多设备互联,大幅简化 PCB 设计。
  2. 扩展性强:支持 "多主多从" 架构,总线上可连接多个主机和从设备,通过唯一设备地址区分不同节点。
  3. 速率灵活:适配不同场景需求,提供多种传输速率:标准模式(100 kbps)、快速模式(400 kbps)、高速模式(3.4 Mbps)等。
  4. 可靠性高:通过 ACK/NACK 应答机制确认数据传输状态,避免数据丢失;同步时钟(SCL)确保收发双方时序匹配。

总结

I²C 协议以 "简洁而不简单" 的设计,在嵌入式短距离通信中占据重要地位。其核心在于通过两根信号线实现同步数据传输,借助 START/STOP 信号划分通信周期,通过 ACK/NACK 保障传输可靠性。掌握字节传输、读写操作的时序逻辑,理解上拉电阻的硬件作用,是灵活应用 I²C 协议进行设备开发的关键。无论是传感器数据采集还是外设配置,I²C 都能以高效、低成本的方式满足互联需求。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐