1. I2C协议基础:两线制通信的智慧
I2C(Inter-Integrated Circuit)总线是Philips公司(现NXP)在1980年代开发的一种简单、双向二线制同步串行总线。它只需要两根线——串行数据线(SDA)和串行时钟线(SCL)——就能实现设备间的通信。这种设计在PCB面积受限的嵌入式系统中显得尤为珍贵。
I2C总线的物理层实现非常简洁:
- SDA(Serial Data Line):负责数据的传输,双向开漏输出
- SCL(Serial Clock Line):提供同步时钟信号,由主设备控制
- 上拉电阻:通常4.7kΩ,将总线在空闲时保持高电平
这种两线制设计带来了几个显著优势:
- 引脚经济性:相比并行总线大幅减少连线数量
- 多主多从架构:支持多个主设备通过仲裁机制共享总线
- 软件可编程:通信速率(标准模式100kbps,快速模式400kbps)和地址可通过软件配置
注意:I2C总线采用开漏输出设计,这意味着设备只能将总线拉低,释放时依靠上拉电阻回到高电平。这种设计实现了"线与"逻辑,是仲裁机制的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. I2C时序深度解析:从信号完整性谈起
2.1 基本时序参数
理解I2C通信首先要掌握其关键时序参数(以标准模式100kHz为例):
- 起始条件(START):SCL高电平时SDA从高到低的跳变
- 停止条件(STOP):SCL高电平时SDA从低到高的跳变
- 数据有效性:SDA数据在SCL高电平期间必须保持稳定
- 数据变化:SDA数据只能在SCL低电平期间变化
具体时序参数如下表所示:
| 参数 | 符号 | 标准模式 | 快速模式 | 单位 |
|---|---|---|---|---|
| SCL时钟频率 | fSCL | ≤100 | ≤400 | kHz |
| 起始条件保持时间 | tHD;STA | 4.0 | 0.6 | μs |
| SCL低电平时间 | tLOW | 4.7 | 1.3 | μs |
| SCL高电平时间 | tHIGH | 4.0 | 0.6 | μs |
| 数据建立时间 | tSU;DAT | 250 | 100 | ns |
| 数据保持时间 | tHD;DAT | 0 | 0 | ns |
