嵌入式学习笔记:IIC协议

IIC(Inter-Integrated Circuit,集成电路间总线),是由飞利浦(现 NXP)开发的一种短距离、低速、串行通信协议,主要用于芯片间的数据交互。其核心特点是通过两根信号线实现多设备互联,结构简单且灵活,广泛应用于嵌入式系统中。

一、基本概念与核心特点

  • 核心架构:支持多主从模式(多个主设备和多个从设备共享总线)。
  • 信号线:仅需两根线即可通信 ——
    • SDA(Serial Data Line):串行数据线,双向传输数据。
    • SCL(Serial Clock Line):串行时钟线,控制数据传输节奏,通常由主设备生成(多主模式下可能竞争)。
  • 识别方式:通过设备地址区分总线上的不同从设备,无需片选线(与 SPI 不同)。

二、物理层特性

IIC 的物理连接和电气特性是其稳定工作的基础,核心包括:

1. 总线连接方式

所有设备的 SDA 和 SCL 分别并联连接,形成共享总线。每个设备的 SDA 和 SCL 引脚均采用开漏输出(Open-Drain) 设计,需外接上拉电阻(通常 1kΩ~10kΩ,根据速率和总线长度选择)。

  • 开漏输出 + 上拉电阻的作用:实现 “线与逻辑”—— 当多个设备同时驱动总线时,只要有一个设备将总线拉低,总线就为低电平;只有所有设备都不驱动总线时,总线才通过上拉电阻保持高电平。

三、协议层核心时序

IIC 协议通过严格的时序定义实现数据传输,核心时序包括起始信号、停止信号、数据有效性、应答信号。(这里可以理解为只有SCL高电平时设备才会读取SDA上的数据)

1. 起始信号(S)
  • 定义:当 SCL 为高电平时,SDA 由高电平跳变为低电平(下降沿),表示数据传输开始。
  • 作用:通知总线上的所有设备,后续数据传输即将开始。
2. 停止信号(P)
  • 定义:当 SCL 为高电平时,SDA 由低电平跳变为高电平(上升沿),表示数据传输结束。
  • 作用:释放总线,允许其他主设备接管或从设备进入空闲状态。
3. 数据有效性

IIC 以8 位(1 字节) 为单位传输数据,数据的有效性由 SCL 和 SDA 的配合决定:

  • 当 SCL 为高电平时,SDA 的电平必须保持稳定(高或低),此时的 SDA 状态代表 1 位数据(高 = 1,低 = 0)。
  • 当 SCL 为低电平时,SDA 可以改变状态(高低切换),用于准备下一位数据。
4. 应答信号(ACK/NACK)

每传输 1 字节(8 位)后,接收方需通过第 9 个时钟周期反馈是否正确接收,称为 “应答”:

  • ACK(应答):接收方在第 9 个时钟周期将 SDA 拉低(低电平),表示已正确接收数据。
  • NACK(非应答):接收方在第 9 个时钟周期让 SDA 保持高电平(通过上拉电阻),表示未接收或结束传输。主设备收到 NACK 后,通常会发送停止信号终止传输。

四、数据传输流程

IIC 的数据传输以 “起始信号→地址传输→数据交互→停止信号” 为基本框架,具体流程因读写操作略有差异。

1. 核心要素:从设备地址与读写位
  • 从设备地址:总线上的每个从设备都有唯一地址(7 位或 10 位),用于主设备识别目标设备。
    • 7 位地址最常用,范围 0x00~0x7F(0~127),其中部分地址为保留地址(如 0x00 为广播地址)。
    • 10 位地址用于需要更多设备的场景,通过特殊前缀 + 10 位地址分段传输。
  • 读写位(R/W):紧跟设备地址的第 8 位(7 位地址时),用于指定传输方向:
    • 0:写操作(主设备→从设备)。
    • 1:读操作(从设备→主设备)。
2. 写操作流程(主→从)
  1. 主设备发送起始信号(S)
  2. 主设备发送 “从设备地址 + 写位(0)”(共 8 位)。
  3. 从设备若地址匹配,在第 9 个时钟周期发送ACK;不匹配则无响应。
  4. 主设备收到 ACK 后,发送第 1 个数据字节(8 位)。
  5. 从设备接收后发送ACK,主设备继续发送后续数据。
  6. 所有数据发送完成后,主设备发送停止信号(P),结束传输。
3. 读操作流程(从→主)
  1. 主设备发送起始信号(S)
  2. 主设备发送 “从设备地址 + 写位(0)”(先告知从设备后续要读数据,可能需先指定寄存器地址)。
  3. 从设备发送ACK,主设备发送目标寄存器地址(若需)。
  4. 从设备发送ACK后,主设备发送重复起始信号(Sr)(代替停止信号,保持总线控制权)。
  5. 主设备发送 “从设备地址 + 读位(1)”。
  6. 从设备发送ACK后,开始发送数据字节(8 位)。
  7. 主设备接收后,若需继续接收,发送ACK;若结束,发送NACK
  8. 主设备发送停止信号(P),结束传输。

五、多主设备仲裁

当多个主设备同时接入总线时,通过 “仲裁机制” 避免冲突:

  • 总线上的主设备同时发送数据时,通过 “线与逻辑” 比较各自的 SDA 信号:
    • 若某主设备发现自己发送的 SDA 电平与总线实际电平不符(如自己发高电平,总线却为低),则立即停止驱动总线,放弃控制权。
  • 仲裁过程中,已传输的正确数据不会丢失,最终只有一个主设备获得总线控制权。

六、速率等级

IIC 支持多种速率,适应不同场景需求:

  • 标准模式(Standard-mode):100kbps
  • 快速模式(Fast-mode):400kbps
  • 快速模式 +(Fast-mode Plus):1Mbps
  • 高速模式(High-speed mode):3.4Mbps

七、特点总结

优点 缺点
仅需 2 根线,硬件设计简单 速率较低(最高 3.4Mbps),不适合高速传输
多主从架构,灵活扩展设备 总线电容限制(电容过大会降低速率)
地址识别 + 应答机制,可靠性高 开漏输出依赖上拉电阻,需合理选型
支持仲裁,多主设备兼容 长距离传输时信号易受干扰

八、典型应用场景

IIC 因结构简单、可靠性高,广泛用于短距离低速通信场景:

  • 传感器(温湿度、加速度计、光照传感器等)与 MCU 的通信。
  • EEPROM(电可擦除存储器)的数据读写。
  • OLED/LCD 显示屏的控制信号传输。
  • 实时时钟(RTC)、电源管理芯片的配置与监控。

总之,IIC 是一种兼顾灵活性与可靠性的串行协议,其简洁的设计使其成为嵌入式系统中芯片间通信的首选方案之一。

你可能感兴趣的:(嵌入式学习笔记,学习,笔记)