4、I2C速率模式:标准模式(100kHz)、快速模式(400kHz)、高速模式(3.4MHz)、超高速模式(5MHz)
我刚接触I2C那会儿,觉得速率嘛就是快慢区别。
后来才发现,速率决定了整个总线设计的上限。
时序容限、上拉电阻、总线电容、甚至PCB走线长度,全跟着速率变。
你想想看,同一个SCL时钟频率,在标准模式下能容忍的边沿抖动,在高速模式下可能就是灾难。
这一章我把四种官方速率模式掰开揉碎讲清楚。
别看只有四个数字,背后的物理限制差了好几级。
速率模式总览
I2C规范定义了四种强制速率模式,外加一些可选扩展。
我们平时接触最多的就是标准模式和快速模式。
高速模式一般在摄像头、DDR电源管理里用。
超高速模式说实话,我用得很少,它的应用场景很窄。
先看一张对比表,心里有个全局概念:
| 模式 | 频率 | 最大上升时间 | 最大下降时间 | 最大总线电容 | 驱动电流 | 典型应用 |
|---|---|---|---|---|---|---|
| 标准模式(Sm) | 100 kHz | 1000 ns | 300 ns | 400 pF | 3 mA | EEPROM、RTC、低功耗传感器 |
| 快速模式(Fm) | 400 kHz | 300 ns | 300 ns | 400 pF | 6 mA | ADC/DAC、环境传感器、存储器 |
| 高速模式(Hs) | 1.7~3.4 MHz | 160 ns (3.4MHz) 80 ns (1.7MHz) |
80 ns | 100 pF | 6 mA | 摄像头、视频编码器、电源管理IC |
| 超高速模式(Fm+) | 1.0~5.0 MHz | 120 ns | 120 ns | 120 pF | 20 mA | 高速闪存、大容量存储器、高速ADC |
注意看,高速模式和超高速模式的名字容易搞混。
高速模式是 Hs-mode,超高速模式其实是 Fm+(快速模式+)。
我遇到过不少人把Fm+当成Hs来写驱动,结果时序老对不上。
标准模式(100 kHz)——老黄牛
标准模式是I2C的基础。100 kHz,上升沿允许最宽到1000 ns。
这意味着上拉电阻可以选得很大,功耗很低。
我现在还是习惯在设计初期把关键配置器件用标准模式跑。
比如板载EEPROM存固件参数,根本不需要高频率,稳定第一。
标准模式下总线电容可以到400 pF,几根长跳线都不怕。
要点:标准模式是唯一不需要考虑AC时序规范的——几乎所有设备都兼容。
快速模式(400 kHz)——主力军
快速模式把时钟频率提到了400 kHz,上升时间压到300 ns。
很多人以为只是把SCL从100 kHz调到400 kHz就完事。
错了。
上升时间必须满足300 ns以内。这决定了上拉电阻不能太大。
我做过一个项目,用了10 kΩ上拉,标准模式跑得好好的。
切换到快速模式就开始丢包,示波器一看,SCL上升沿钝得像梯形。
换到2.2 kΩ就正常了。
快速模式下还规定了输入端必配施密特触发器,抗噪声能力更强。
高速模式(Hs-mode,3.4 MHz)——特种兵
高速模式是我花时间最多研究的速率模式。
3.4 MHz,上升时间只有160ns,总线电容不能超过100 pF。
你要知道,一条10cm的PCB走线电容大概就有4~5 pF。
挂三个从设备,电容就可能超标。
高速模式有一个特殊机制:主-从握手切换。
标准的I2C起始条件后,主机拉高SCL,从机通过拉低SCL通知自己准备好了。
这个握手机制叫 Hs-mode preamble。
我记得第一次调试高速模式,从机一直不拉低SCL,卡的我想摔设备。
后来发现从机的Hs-mode没使能,寄存器默认是关闭的。
你需要先往从机发一个特殊命令(通常是写某个寄存器),让它切到高速模式。
Hs-mode的时序参数非常严格。我建议看一看NXP的官方规范文档,里面的时序图每个边沿都标了最小值最大值。
超高速模式(Fm+,5 MHz)——赛车
Fm+是快速模式的增强版,频率最高5 MHz。
注意它没有用高速模式的主从握手,而是保持了标准I2C协议格式。
这是为了向后兼容。
但代价是驱动电流必须拉到20 mA,比快速模式大了三倍多。
而且Fm+要求输出级有30 ns的下降时间控制,防止振铃。
我在设计一个高速ADC采集板时用了Fm+,频率设到3.4 MHz。
刚开始用和Hs-mode一样的上拉方案,结果SCL上全是过冲,看了都心疼。
换成专用的Fm+缓冲器,再加上串联电阻(22Ω),才压住了振铃。
Fm+设备目前还比较少,主要集中在存储类和高速转换器上。
建议一般项目没必要上Fm+,3.4 MHz的Hs-mode能覆盖绝大多数需求。
速率与总线长度、电容的关系
这四种模式背后,本质是RC时间常数的博弈。
频率越高,允许的RC时间常数越小。
而R就是上拉电阻,C就是总线电容。
所以速率越高,总线电容必须越少,上拉电阻必须越小。
但电阻太小,功耗上升,低电平电压VOL可能超标。
这是一个三角关系:速度 - 功耗 - 噪声容限。
下面这张图展示了四种模式在「频率-总线电容」平面上的工作区域:
混合速率设计的陷阱
一个总线上可以同时挂不同速率的设备吗?
可以,但有限制。
标准模式和快速模式可以混合——因为快速模式设备可以当标准模式用。
高速模式就不一样了。Hs-mode设备如果和标准从机混用,你必须先切回标准模式才能跟标准从机通信。
这个切换过程规范里有详细描述,叫 Hs-mode to F/S-mode transition。
我见过一个设计,主机支持Hs-mode,从机里有几个快速模式的。
工程师没做模式切换,导致高速从机跑着跑着总线被占了,其他从机直接失灵。
最后硬件改板加了硬件模式切换电路。
我的教训:混合速率设计,要么全用同一速率模式,要么在软件里做好时钟拉伸和模式切换。
速率选择决策清单
我每次做I2C总线设计,都会按下面这个表格逐项检查:
| 评估项 | 标准/快速 | 高速/超高速 |
|---|---|---|
| 总线长度 > 30 cm | 可用,注意电容 | 不建议,长线寄生电容太大 |
| 从机数量 > 5 | 容易实现 | 需用多路复用器分割 |
| PCB层数有限 | 没问题 | 需要良好GND平面 |
| 功耗敏感电池系统 | 标准模式更省电 | 高驱动电流功耗大 |
| 需要批量产线测试 | 示波器通用探头即可 | 需要差分或有源探头 |
| 从器件兼容性 | 几乎所有I2C器件支持 | 只部分器件支持,需确认 |
最后说一句掏心窝的话:不要为了赶时髦上高频率。
如果100 kHz够用,就别碰400 kHz。
如果400 kHz能搞定,就别折腾3.4 MHz。
每次提速,时序窗口都在收窄,调试痛苦指数是几何级增长。
我从入门到现在,吃过太多「我能搞定高速」的亏,后来意识到——
稳定和可制造性,比纸面速率重要得多。