4. 低功耗时钟系统配置与优化
在 Silicon Labs 的低功耗 MCU(如 EFM32、EFR32 系列)中,时钟系统是功耗预算里最容易被低估、却影响最直接的一环。同一颗芯片,运行同一段代码,仅因时钟源与分频配置不同,电流就可能从几百微安降到几微安。理解 HFXO、LFXO、HFRCO、LFRCO、ULFRCO 这五个时钟源的特性与代价,是低功耗优化的第一课。
五个时钟源的本质差异
这五个时钟源可以按“精度—功耗—启动时间”三个维度来理解。HFXO 是外部高频晶振,通常 38.4 MHz 或 32 MHz,精度可达 ±10 ppm 级别,但驱动它需要持续电流,典型工作电流在 200~400 µA 量级,且启动需要数百微秒到数毫秒。HFRCO 是内部高频 RC 振荡器,可选 1~38 MHz,无需外部器件,启动仅需几微秒,但精度较差(出厂校准后约 ±1%~±3%),且频率越高功耗越大。LFXO 是外部 32.768 kHz 晶振,精度 ±20 ppm 左右,工作电流通常低于 1 µA,是低功耗 RTC 与长时间计时的首选。LFRCO 是内部低频 RC,约 32.768 kHz,功耗与 LFXO 接近甚至更低,但精度只有 ±1%~±5%,且随温度漂移明显。ULFRCO 是超低功耗内部 RC,约 1 kHz,电流可低至几十纳安,但精度极差(±30% 以上),只适合“唤醒看门狗”这类对时间精度无要求的场景。
选择策略:按任务时间尺度分层
实际工程中不要“一个时钟走天下”,而应按任务的时间尺度分层配置。第一层是“常开域”:RTC、看门狗、低频定时器,应挂在 LFXO 或 LFRCO 上,让它们在 EM2/EM3 深度睡眠下继续计数。第二层是“突发高性能域”:ADC 采样、射频收发、加密运算,需要 HFXO 或 HFRCO 提供高频时钟,用完立即关闭。第三层是“极低功耗唤醒域”:ULFRCO 驱动看门狗或极慢速唤醒定时器,让系统在 EM4 下也能周期性醒来。
一个常见的误区是:为了“省事”把系统时钟一直挂在 HFXO 上。假设 HFXO 工作电流 300 µA,而任务实际只需要每 10 秒唤醒 5 ms 做一次采样,那么占空比仅 0.05%,平均电流本可低至 0.15 µA 量级;若一直开着 HFXO,平均电流就被抬到 300 µA,相差三个数量级。正确做法是:睡眠时切到 LFXO/LFRCO,唤醒后短暂切到 HFRCO 或 HFXO,处理完再切回。
时钟门控:关掉不用的分支
Silicon Labs 的 CMU(Clock Management Unit)允许对每个外设单独门控时钟。原则很简单:不用就关。例如未使用的 USART、LEUART、I2C、TIMER,应在初始化后通过 CMU_ClockEnable(cmuClock_XXX, false) 关闭其时钟分支。门控不仅省去外设自身的动态功耗,也减少时钟树翻转带来的开关功耗。需要注意的是,某些外设(如 LEUART)在 EM2 下仍需时钟才能唤醒,这类外设不能盲目关闭,而应确认其是否处于“低功耗仍工作”模式。
分频配置:频率与功耗的平方关系
数字电路的动态功耗近似满足 P ∝ C·V²·f。电压固定时,功耗与频率近似成正比。因此把 HFRCO 从 38 MHz 降到 19 MHz,核心动态功耗大致减半;降到 1 MHz,则降到约 1/38。分频通过 CMU_ClockDivSet(cmuClock_HF, cmuClkDiv_4) 这类调用完成。但分频不是越低越好:频率太低会导致任务执行时间变长,若任务本身有实时性要求,反而可能因“跑得慢、醒得久”而增加总能耗。经验法则是:在满足截止时间的前提下,选最低可用频率,即“跑得慢一点,但跑得短一点”与“跑得快、早睡”之间取能耗最小点。
实测对比方法与示例数据
要验证配置效果,最直接的方法是在 VDD 回路串入电流表或使用 Simplicity Studio 的 Energy Profiler。测试时保持固件逻辑不变,只切换时钟源与分频,记录 EM0 运行电流与 EM2 睡眠电流。下面是一组教学示例数据(基于典型 EFM32 参数合理假设,非实测值),用于说明量级差异:
| 配置 | EM0 运行电流 | EM2 睡眠电流 | 适用场景 |
|---|---|---|---|
| HFXO 38.4 MHz,不分频 | 约 8.5 mA | — | 射频收发、高速运算 |
| HFRCO 19 MHz,不分频 | 约 3.2 mA | — | 中等负载任务 |
| HFRCO 1 MHz,不分频 | 约 0.6 mA | — | 低速控制、传感器轮询 |
| LFXO 32.768 kHz 驱动 RTC | — | 约 0.9 µA | 长时间计时、日历 |
| LFRCO 32.768 kHz 驱动 RTC | — | 约 0.7 µA | 对精度要求不高的计时 |
| ULFRCO 1 kHz 驱动看门狗 | — | 约 0.05 µA | EM4 极低功耗唤醒 |
从表中可以看出:高频域每降一档频率,运行电流大致按比例下降;而低频域的选择对睡眠电流影响在亚微安级别,看似很小,但在电池供电、要求十年寿命的应用中,0.2 µA 的差异就足以决定成败。例如一颗 1000 mAh 的纽扣电池,若平均电流 1 µA,理论寿命约 114 年;若 2 µA,则约 57 年——量级差异直接体现在产品规格上。
CMU_OscillatorReady),不能在未稳定前就切换系统时钟,否则会导致取指错误或外设异常。从 HFXO 切回 HFRCO 前,也应确认当前没有依赖 HFXO 精度的外设(如高速 USART)正在传输。
总结来说,低功耗时钟优化的核心不是“记住五个名字”,而是建立“按任务时间尺度分层、按需开关、按截止时间选频”的配置思维。HFXO 与 LFXO 提供精度,HFRCO 与 LFRCO 提供灵活与低功耗,ULFRCO 提供极限待机。把它们放在正确的位置,功耗自然就降下来了。