流行的I2C通信标准只需要一条非常简单的双引脚总线(SCL和SDA)即可实现灵活的串行I/O。它通过双向时序和数据流来实现这一功能。双向数据流有利于节省引脚,但由于使用了无源上拉电阻,因此在省电方面并不理想。总线上拉电阻必须选得足够低(从而能通过足够的电流),以便在所选数据速率所决定的速度下对寄生总线电容充电。图1举例说明了这种不便的计算方法。
图1:I2C总线速度与最大有效上拉电阻成反比。来源:德州仪器
无源“上拉”过程中消耗的V/R电流和V2/R功率取决于总线电容、上拉电压和占空比;如图1所示,对于快速模式400kHz、V=5V和Cb=400pF,消耗的电流可能高达5V/1k=5mA和52/1k=25mW。这很容易就会占到整个系统功耗的很大一部分。这对电池不利,也不利于“绿色”和“可持续性”发展的需要。
那么如何节省一些多余的电流和功率呢?图2显示了一种方法:有源上拉,其值是根据图1所示高速(400kHz)和高电容(400pF)的最差情况组合而选择的。
图2:再生有源上拉电路(所需的两个电路之一),其值是根据图1所示的最坏情况组合选择的。
这种简单的电路拓扑结构,虽然宣称其目的是节省上拉功率,但其起点并不高:只是一个无源上拉电阻R1。整个电路的工作原理如图3所示。
图3:图像内标记的是有源上拉波形和4步序列。
有源上拉过程分为四个步骤。
因此,我们关于节省上拉功率有了一个圆满的结局,节省了大约75%的功率,而且无需进行任何软件修改。
(原文刊登于EDN美国版,参考链接:I2C active pullup is power thrifty,由Ricardo Xie编译)