外观
I2C总线协议介绍
I2C总线的特点
- 仅需要两条数据线SCL(时钟线)、SDA(数据线)
- 半双工通信方式(同一时间只能单向通信)
- 多主多从结构(支持多个主机、多个从机挂载在总线上,通常是单主多从)
- 设备通过地址进行区分,常见是7bit地址,也有10bit地址模式,但是实际单片机中是8bit,通常会进行转换;
- 开放式漏极结构,需要外接上拉电阻才能进行工作。
信号传输规则
数据有效性
- 数据线SDA在时钟高电平SCL=1时必须稳定;
- 只有在SCL=0时,SDA才允许改变。
起始与停止条件
- 起始条件:SCL=1时,SDA从高到低变化;
- 停止条件:SCL=1时,SDA从低到高变化;
数据帧格式
每次传输均是起始位开始、停止位结束;格式如下:
Start->[地址+读写位]->Ack->[数据]->Ack/Nack--...->Stop
- 地址通常是7bit+1bit读写控制位
- 通常是0-写。1-读
- ACK/NACK:接收方在每字节后拉低sda表示应答,若保持高电平表示非应答
通信流程
主机写从机
- 主机发送Start;
- 主机发送[从机地址+写];
- 从机应答;
- 主机发送数据字节;
- 从机应答;
- 主机发送Stop结束。
主机读从机
- 主机发送Start;
- 主机发送[从机地址+读];
- 从机应答;
- 从机发送数据字节;
- 主机应答(继续读取)或Nack(最后1字节);
- 主机发送Stop结束。
传输速率
- 标准模式(Standard Mode):100Kbps
- 快速模式(Fast Mode):400Kbps
- 高速模式(High Speed Mode):3.4Mbps
上拉电阻选择
在i2c设备中,通常是开漏驱动方式,在SCL、SDA上均需要加入上拉电阻,否则无法正常通信,常见的上拉电阻范围:2.2K~10K。
上拉电阻计算思路(仅供参考)
核心目标
选择一个上拉电阻R,既满足上升时间要求又不至于让低电平电流过大,需要计算边界。
上限(由上升时间限制)
下限(由下拉能力限制)
满足条件
关键参数说明
:总线等效电容(走线、器件、连接器电容之和) :I²C 允许的最大上升时间- 100 kHz → 1000 ns
- 400 kHz → 300 ns
- 1 MHz (Fm+) → 120 ns
:供电电压(3.3 V / 5 V 常见) :低电平最大电压(常用 0.4 V) :器件灌电流能力(一般 3 mA 左右)
计算步骤
计算总线电容
- PCB 走线:约 1–3 pF/cm(粗估)
- 器件引脚:5–10 pF/个(看数据手册)
- 排线/连接器:按资料或经验累加
把这些并联电容相加得到
按速率取
- 100 kHz:1000 ns
- 400 kHz:300 ns
- 1 MHz(Fm+):120 ns
以器件手册/规范要求为准,取最严格值。
算边界
挑电阻
- 在区间[
]内,选 E24 常用值(1.0k、1.5k、2.2k、3.3k、4.7k、6.8k、10k…)。 - 两根线(SCL、SDA)都要上拉,通常同值;若时钟边沿吃紧,可让SCL更小一档。
示例计算(400 kHz, 3.3 V, pF)
参数:
ns V mA
计算:
结果:
推荐值:2.2 kΩ
速查表( ,由上升时间决定)
速率 | Cb = 50 pF | 100 pF | 200 pF | 400 pF |
---|---|---|---|---|
100 kHz (1000 ns) | 23.6 kΩ | 11.8 kΩ | 5.90 kΩ | 2.95 kΩ |
400 kHz (300 ns) | 7.08 kΩ | 3.54 kΩ | 1.77 kΩ | 0.885 kΩ |
1 MHz (120 ns) | 2.83 kΩ | 1.42 kΩ | 0.708 kΩ | 0.354 kΩ |
实战经验
- 电阻过小 → 电流大,功耗高
- 电阻过大 → 上升时间慢,信号失真
- SCL 可比 SDA 取更小值,保证时钟边沿
- 总线电容过大时,需要分段或使用缓冲器
- 多设备时取 最弱器件 的
来算下限