流行的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步序列
有源上拉过程分为四个步骤:
- 释放相关总线信号线(即SCL或SDA)可使R1开始无源上拉并开始为总线电容充电。由此产生的电压上升很慢,因为R1比图1中计算所需的1k大4倍多。显然,它永远不会很快完成上升时间!
- 但请稍等:由此产生的信号正通过C1耦合到Q2的基极。因此,在过程的第2步,Q2导通,Q1也随之导通,并启动一个非常快速的正反馈回路,该回路驱动两个晶体管进入饱和状态,并在数十纳秒内完成总线电容充电,消除R1上的压降并结束其功率消耗。
- 22pF C1的时间常数非常短,它作用于Q2的基极阻抗,使C1放电并终止对晶体管的驱动,从而使它们开始关断并结束有源上拉。这为Q1和Q2提供了从饱和状态恢复的时间。
- 下拉开始总线活动的下一个周期并通过D1对C1重新充电,这也可以保护Q2有限的(仅4.5V)最大反向Vbe额定值。
因此,我们关于节省上拉功率有了一个圆满的结局,节省了大约75%的功率,而且无需进行任何软件修改。