I2C SPI UART混合总线低功耗设计实战 - 第1节

一、三种总线的物理层对比

做嵌入式低功耗设计,绕不开这三条总线:I2C、SPI、UART。它们就像工具箱里的三把螺丝刀,各有各的脾气。我刚开始做低功耗项目时,就吃过选错总线的亏——电池续航直接砍半。今天咱们先把它们的物理层掰开揉碎了看。

1.1 I2C:两线制,多从机

I2C 只有两根线:SCL(时钟)和 SDA(数据)。所有设备挂在同一条总线上,靠地址区分。物理层是开漏输出,加上拉电阻。

关键点:开漏结构意味着任何设备都能拉低总线,但拉高要靠上拉电阻。这直接决定了功耗——电阻越大,静态电流越小,但信号上升沿越慢。

我有个项目用 I2C 挂 8 个传感器,上拉电阻从 4.7kΩ 换成 10kΩ,待机电流降了 0.3mA。嗯,这点电流在电池供电系统里,可能就是多撑一周的差距。

1.2 SPI:四线制,全双工

SPI 用四根线:SCLK、MOSI、MISO、CS(片选)。每个从机独占一根 CS,所以线多,但速度快。物理层是推挽输出,不需要上拉电阻。

特性 I2C SPI UART
线数 2(SCL+SDA) 4+(SCLK+MOSI+MISO+CS) 2(TX+RX)
传输方式 半双工 全双工 全双工
时钟 主机提供 主机提供 双方约定波特率
最大速率 3.4MHz(高速模式) 50MHz+ 1Mbps 常见
功耗特点 静态电流小,动态随速率上升 推挽驱动,动态功耗较高 静态功耗极低

个人经验:SPI 的 CS 线在低功耗设计中经常被忽略。我曾经遇到一个传感器,CS 悬空时漏电 50μA——相当于整个系统待机电流的 1/3。后来加了个 100kΩ 下拉,问题解决。

1.3 UART:两线制,异步通信

UART 只有 TX 和 RX,没有时钟线。双方靠约定好的波特率同步。物理层通常是 RS-232 电平或 TTL 电平。低功耗场景下,我们常用 TTL 电平,因为电压低,功耗小。

UART 的功耗优势在于:不通信时,TX 和 RX 都是高电平,几乎没有静态电流。但要注意,波特率越高,每个 bit 的时间越短,动态功耗反而会上升。

二、低功耗设计的基本概念

低功耗设计不是玄学,是工程。说白了,就是让系统在完成同样工作的前提下,消耗最少的能量。度量指标就那么几个,但每个都有坑。

2.1 核心度量指标

  • 静态功耗:设备不干活时消耗的功率。I2C 的上拉电阻、SPI 的 CS 漏电、UART 的 TX 上拉,都是静态功耗的来源。
  • 动态功耗:设备干活时额外消耗的功率。跟时钟频率、总线负载、信号翻转率直接相关。
  • 平均功耗:一段时间内的总能耗除以时间。电池续航看这个。
  • 峰值功耗:瞬间最大功率。电源设计看这个。

避坑指南:我曾经设计一个手持设备,只关注了待机电流(2μA),没注意 SPI 通信时的峰值电流(50mA)。结果电池内阻大,通信瞬间电压跌落,MCU 复位了。后来加了颗 100μF 电容才稳住。

2.2 低功耗设计的三个层次

  1. 系统级:选什么 MCU、用什么总线、跑多快时钟。这个层次决定了功耗的天花板。
  2. 电路级:上拉电阻选多大、去耦电容放多少、电平转换怎么搞。细节决定成败。
  3. 软件级:什么时候唤醒、通信频率多高、数据包怎么打包。软件能省 30%-50% 的功耗。

你想想看,如果系统级选了个 200MHz 的 MCU,软件再怎么优化,待机功耗也下不来。反过来,选对了芯片,软件随便写写,功耗也不会太离谱。

三、知识体系框架

下面这张图,是我自己总结的混合总线低功耗设计知识体系。每次做新项目,我都会先过一遍这个框架,避免漏掉关键点。

混合总线低功耗设计知识体系 低功耗设计目标 系统级设计 电路级设计 软件级设计 MCU选型 / 总线选择 时钟频率 / 电压域 上拉电阻 / 去耦电容 电平转换 / 信号隔离 唤醒策略 / 通信频率 数据打包 / 休眠模式 度量指标:静态/动态/平均/峰值功耗 三个层次相互影响,系统级决定上限,电路级和软件级决定实际表现

四、低功耗设计的度量方法

光说不练假把式。度量功耗,得有工具和方法。我常用的方法就三种:

4.1 万用表测平均电流

最笨但最可靠的方法。串联一个万用表,测系统运行一段时间内的平均电流。注意要选能测小电流的表,Fluke 15B+ 这种级别的就行。

4.2 示波器测瞬态电流

用电流探头或者采样电阻,看通信瞬间的电流波形。我习惯在电源入口串一个 10Ω 采样电阻,用示波器看电压波形,再换算成电流。

小技巧:采样电阻不能太大,否则压降会影响系统工作。10Ω 对于 3.3V 系统、电流几十 mA 的场景刚好。压降也就几百 mV,系统还能扛得住。

4.3 专用功耗分析仪

如果预算允许,买个 Joulescope 或者 Otii。能同时看电压、电流、功率,还能积分算能耗。我团队里就有一台 Otii,做低功耗优化时天天用。

五、本章小结

三种总线的物理层差异,直接决定了它们的功耗特性。I2C 胜在静态功耗低、线少;SPI 胜在速度快、全双工;UART 胜在简单、静态功耗极低。低功耗设计不是选一个总线就完事了,而是要在系统、电路、软件三个层次上综合权衡。