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 低功耗设计的三个层次
- 系统级:选什么 MCU、用什么总线、跑多快时钟。这个层次决定了功耗的天花板。
- 电路级:上拉电阻选多大、去耦电容放多少、电平转换怎么搞。细节决定成败。
- 软件级:什么时候唤醒、通信频率多高、数据包怎么打包。软件能省 30%-50% 的功耗。
你想想看,如果系统级选了个 200MHz 的 MCU,软件再怎么优化,待机功耗也下不来。反过来,选对了芯片,软件随便写写,功耗也不会太离谱。
三、知识体系框架
下面这张图,是我自己总结的混合总线低功耗设计知识体系。每次做新项目,我都会先过一遍这个框架,避免漏掉关键点。
四、低功耗设计的度量方法
光说不练假把式。度量功耗,得有工具和方法。我常用的方法就三种:
4.1 万用表测平均电流
最笨但最可靠的方法。串联一个万用表,测系统运行一段时间内的平均电流。注意要选能测小电流的表,Fluke 15B+ 这种级别的就行。
4.2 示波器测瞬态电流
用电流探头或者采样电阻,看通信瞬间的电流波形。我习惯在电源入口串一个 10Ω 采样电阻,用示波器看电压波形,再换算成电流。
小技巧:采样电阻不能太大,否则压降会影响系统工作。10Ω 对于 3.3V 系统、电流几十 mA 的场景刚好。压降也就几百 mV,系统还能扛得住。
4.3 专用功耗分析仪
如果预算允许,买个 Joulescope 或者 Otii。能同时看电压、电流、功率,还能积分算能耗。我团队里就有一台 Otii,做低功耗优化时天天用。
五、本章小结
三种总线的物理层差异,直接决定了它们的功耗特性。I2C 胜在静态功耗低、线少;SPI 胜在速度快、全双工;UART 胜在简单、静态功耗极低。低功耗设计不是选一个总线就完事了,而是要在系统、电路、软件三个层次上综合权衡。