1. IIC子系统概述
IIC(Inter-Integrated Circuit)总线是飞利浦半导体(现恩智浦)在1980年代开发的一种串行通信总线标准,广泛应用于各类嵌入式系统中连接低速外设。作为目前使用最广泛的板级通信协议之一,IIC以其简洁的两线制结构和灵活的寻址方式,成为传感器、EEPROM、RTC等外设的首选接口。
在实际项目中,IIC子系统通常包含三个核心组成部分:物理层(两根信号线SCL和SDA)、协议层(通信时序规范)以及设备驱动层(具体芯片的寄存器操作)。这种分层设计使得硬件工程师可以专注于电气特性,而软件工程师则能基于标准接口开发,大大提升了开发效率。
注意:IIC总线标准存在多个版本,最新的是2014年发布的6.0版,支持最高5MHz的Fast-mode Plus。但在实际应用中,最常用的仍是100kHz标准模式和400kHz快速模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. IIC协议核心原理
2.1 物理层特性
IIC总线仅需两根信号线:
- SCL(Serial Clock):时钟线,由主设备控制
- SDA(Serial Data):数据线,双向传输
总线采用开漏输出结构,需要外接上拉电阻(典型值4.7kΩ)。这种设计实现了"线与"逻辑,允许多个设备共享总线而不会发生冲突。在实际电路设计中,上拉电阻的取值需要根据总线电容和通信速度计算:
code复制Rp(min) = (VDD - VOLmax) / IOL
Rp(max) = tr / (0.8473 × Cb)
其中Cb是总线总电容(通常不超过400pF),tr是上升时间要求。
2.2 通信时序详解
完整的IIC通信包含以下几个关键时序单元:
- 起始条件(START):SCL高电平时SDA从高到低的跳变
- 地址帧:7位或10位设备地址 + 1位读写方向
- 数据帧:每个字节(8bit)后跟随1位ACK/NACK
- 停止条件(STOP):SCL高电平时SDA从低到高的跳变
以读取24C02 EEPROM为例的典型时序:
code复制START | 设备地址(写) | ACK | 字地址 | ACK | START | 设备地址(读) | ACK | 数据1 | NACK | STOP
