4. 电源域划分:如何划分多个电源域,实现选择性供电

电源域划分,说白了就是把芯片内部不同功能模块的供电“切开”。

为什么要这么做?因为车规MCU里,有些模块得一直醒着,比如看门狗、RTC、唤醒逻辑。有些模块呢,大部分时间都在睡觉,比如CAN控制器、主存储器。你让它们一直通着电,那功耗就下不来。

我个人习惯,在设计初期就把电源域分成三类:常电域(Always-On)可关断域(Switchable)深度休眠域(Deep-Sleep)。这三类域,供电策略完全不同。

4.1 常电域:永远不能断电的部分

常电域,就是芯片的“生命线”。

我做过一个项目,客户要求MCU在12V电池断开后,还能维持RTC走时30天。那这个RTC模块就必须放在常电域里。常电域一般包含:

  • RTC模块:时间基准,断电就丢了。
  • 唤醒逻辑:比如CAN唤醒、LIN唤醒、GPIO边沿检测。
  • 备份寄存器:存一些关键状态,比如系统故障码。
  • 部分IO保持电路:确保休眠时IO电平不突变。

关键点:常电域的供电电压可以很低。很多车规MCU支持1.2V甚至0.9V的常电域电压。电压越低,漏电越小。我见过有人把常电域做到0.8V,RTC照样跑得稳稳的。

4.2 可关断域:按需供电的主力模块

可关断域,是功耗优化的主战场。

你想想看,MCU在正常运行时,CPU、Flash、SRAM、各种外设都开着。但进入休眠后,这些模块完全可以断电。怎么断?用电源开关(Power Switch)

电源开关有两种常见实现:

  • PMOS开关:适合中等电流(几十mA),压降小。
  • 电源管理IC(PMIC)配合:适合大电流(几百mA),外部控制。

我在项目中遇到过一个问题:某个外设模块断电后,它的输出引脚还连着其他域的输入。结果漏电电流达到了200μA!后来加了隔离单元(Isolation Cell)才解决。

避坑指南:我曾经因为没加隔离单元,导致休眠电流超标。后来学乖了,每个可关断域的边界,必须加ISO cell。ISO cell在域断电时,输出钳位到固定电平,防止漏电。

4.3 深度休眠域:极致低功耗的秘诀

深度休眠域,是车规MCU的“终极省电模式”。

这个域里,连常电域的大部分电路都关了,只保留最核心的唤醒逻辑。比如:

  • 一个极低功耗的定时器:周期唤醒。
  • 一个简单的GPIO检测电路:检测外部唤醒信号。
  • 备份寄存器:保存唤醒后的状态。

深度休眠域的功耗可以做到多低?我做过的一个项目,深度休眠电流只有1.2μA。秘诀就是:把常电域里所有不用的模块都关掉,只留一个微安级的唤醒定时器。

小技巧:深度休眠域的供电,可以用一个独立的LDO。这个LDO效率不用高,但静态电流必须极低。我习惯用那种静态电流只有几百纳安的LDO。

4.4 电源域划分的实战步骤

说了这么多理论,咱们来点实际的。电源域划分,我一般按以下步骤走:

  1. 列出所有功能模块:CPU、Flash、SRAM、CAN、LIN、SPI、I2C、ADC、RTC、唤醒逻辑、备份寄存器……
  2. 分析每个模块的供电需求:哪些必须常电?哪些可以关断?哪些可以深度休眠?
  3. 分组:把相同供电需求的模块分到同一个域。
  4. 设计电源开关:每个可关断域配一个PMOS或PMIC通道。
  5. 加隔离单元:域边界加ISO cell。
  6. 仿真验证:跑功耗仿真,看每个域的漏电和动态功耗。

举个例子,一个典型的车规MCU电源域划分如下:

电源域 包含模块 供电策略 典型功耗
常电域 RTC、唤醒逻辑、备份寄存器 始终供电,电压1.0V ~5μA
可关断域1 CPU、Flash、SRAM 休眠时断电 ~50μA(漏电)
可关断域2 CAN、LIN、SPI 休眠时断电 ~10μA(漏电)
深度休眠域 极低功耗定时器、GPIO检测 深度休眠时供电 ~1μA

4.5 电源域划分的常见误区

嗯,这里要注意几个坑:

  • 误区一:域越多越好。不是的。域太多,电源开关和隔离单元会占用大量面积,而且控制逻辑复杂。我一般控制在3-5个域。
  • 误区二:所有外设都放可关断域。有些外设,比如看门狗,必须常电。否则系统死机了,看门狗也断电了,谁来复位?
  • 误区三:忽略IO保持。域断电后,IO引脚如果没保持,可能会产生毛刺,导致外部电路误动作。一定要加IO保持电路。

核心总结:电源域划分,本质是“用面积换功耗”。你多花一点面积做电源开关和隔离单元,就能换来几个数量级的功耗降低。在车规MCU里,这笔买卖绝对划算。

好了,这一章就讲到这里。下一章咱们聊聊时钟门控,那是另一个降低动态功耗的利器。