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Ω就正常了。

快速模式下还规定了输入端必配施密特触发器,抗噪声能力更强。

我的经验:快速模式上拉电阻先按 Rp(min) = (VDD - VOL(max)) / IOL(max) 算,再拿示波器实测上升时间。别只看公式,寄生参数会给你惊喜。

高速模式(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下必须使用带电流源的上拉结构,普通上拉电阻扛不住3.4 MHz的速度。很多单片机内部上拉只够到400 kHz。我曾经图省事直接用内部上拉,结果通信失败。后来加了外部2.2kΩ配合专门的高速驱动器,才搞定。

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可能超标。

这是一个三角关系:速度 - 功耗 - 噪声容限。

下面这张图展示了四种模式在「频率-总线电容」平面上的工作区域:

I2C 四种速率模式工作区间对比 总线电容 (pF) 频率 (kHz) 0 100 200 300 400 0 100 200 400 标准模式 100 kHz 快速模式 400 kHz 高速模式 3.4 MHz 超高速模式 5 MHz 说明 • 频率越高,允许的 总线电容越小 • 标准/快速模式可用 400pF 大电容 • 高速/超高速需控制 在 100~120 pF

混合速率设计的陷阱

一个总线上可以同时挂不同速率的设备吗?

可以,但有限制。

标准模式和快速模式可以混合——因为快速模式设备可以当标准模式用。

高速模式就不一样了。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。

每次提速,时序窗口都在收窄,调试痛苦指数是几何级增长。

我从入门到现在,吃过太多「我能搞定高速」的亏,后来意识到——

稳定和可制造性,比纸面速率重要得多。