智能手表低功耗设计:PMIC 选型与多域电源时序控制实操
智能手表电池就 300–500 mAh,屏幕常亮 + 心率 + GNSS 一开,峰值能冲到 200 mA,待机却要压到 μA 级——PMIC 如果只盯着"路数够不够",不盯轻载效率和时序,续航直接砍三分之一。下面这套在 nRF54 + 恒玄 + Apollo4 这类手表平台上验证过,从选型到时序代码闭环。
一、PMIC 选型:别只看路数,看三条曲线
典型手表电源域拆分:Always-on(RTC/按键/触控,0.8–1.2 V)、BB/AP(主控,0.7–1.1 V DVFS)、Display(OLED 1.8–3.3 V)、Sensor(心率/GNSS 1.8 V + 3.3 V IO)、无线(BLE/Wi-Fi 3.3 V),至少 3 路 buck + 4–5 路 LDO。选型时盯三个硬指标:
• 轻载效率曲线:10 μA–1 mA 这段是手表"抬腕亮屏间隙"的主战场,PMIC 在这段 η 要从 80% 起跳。Nordic nPM1300(IQ 0.4 μA,10 μA 时 η≈88%)和 TI BQ25120A(500 nA IQ,1 mA 时 η≈90%)是手表常客;老牌 DA1469x 配套 PMIC 也可以,但路数紧。
• DVFS 支持:BB/AP 域 buck 要能 I2C 调电压(0.7 / 0.9 / 1.1 V 三档),屏幕关、传感器歇的时候降压,nRF54 这类平台降 0.2 V 能省 25% 动态功耗。
• 自身 IQ + 休眠模式:全局 ship mode 下整表 IQ ≤ 1 μA,闹钟/抬腕唤醒靠 RTC + 按键中断拉 WAKE 脚唤醒 PMIC,别让 BB 一直喂 I2C。
⚠ buck 的开关频率挑 2–4 MHz(如 nPM1300 的 2 MHz、BQ25120 的 1.5 MHz 可配),外接 2.2 μH 0402 电感能压到 1 mm 高,手表壳里省 0.3 mm 很关键。
二、多域时序:上电"正序"、掉电"反序"
手表上电不是"全开",是分级唤醒;掉电反过来,防浪涌也防 LDO 倒灌。典型 5 域顺序:
阶段 域 动作
① Always-on(RTC/PMIC 自供) 按键/充电接入即起,给 BB 的 BUCK1 预充
② BB/AP 域 BUCK1 0.7 V(最低 DVFS)起 BB,BB 起来再 I2C 调高到 0.9 V 跑系统
③ Sensor 域 心率/加速度由 BB GPIO 拉 EN,按需开
④ Display 域 抬腕中断触发,BB I2C 调 OLED 那路 LDO 从 0→3.3 V
⑤ 无线域 BLE 广播/载波开启,GNSS 另拉一路
掉电严格反过来:无线→Display→Sensor→BB(DVFS 降到 0.7)→Always-on 留守。反序的意义是避免大负载先掉、小负载还在抽电导致的反向电流,LDO 没加 body diode 保护的话会烧。
三、时序代码:I2C 配置 + GPIO 联动
PMIC 的 EN 脚别全交给 I2C 寄存器——唤醒路径上 BB 还没起来的那段,要靠硬件 GPIO 链式 EN 先拉起来,BB 起来后再切 I2C 精细控。以 nPM1300 为例:
/* PMIC 初始化:BB 起来后调电压 + 配时序 */
static void pmic_init(void)
{
/* BUCK1 = BB 核心,0.7 V 启动 -> 系统起后升 0.9 V */
i2c_write(PMIC_I2C_ADDR, 0x55, 0x70); /* BUCK1_VOUT = 0.7 V */
i2c_write(PMIC_I2C_ADDR, 0x54, 0x01); /* BUCK1 enable */
/* LDO1 = OLED 3.3 V,初始关,抬腕再开 */
i2c_write(PMIC_I2C_ADDR, 0x60, 0x00); /* LDO1 off */
/* 配 GPIO2 为 LDO1_EN,外部 BB GPIO 可拉 */
i2c_write(PMIC_I2C_ADDR, 0x92, 0x02);
/* Ship mode 唤醒源:按键 + RTC alarm */
i2c_write(PMIC_I2C_ADDR, 0xC0, 0x03);
}
/* 抬腕亮屏:BB 侧调 PMIC */
void wrist_wake_display(void)
{
/* BUCK1 升到 0.9 V(BB 跑 UI)*/
i2c_write(PMIC_I2C_ADDR, 0x55, 0x90);
/* LDO1 开 OLED 3.3 V */
i2c_write(PMIC_I2C_ADDR, 0x60, 0xB0); /* 3.3 V + enable */
/* 心率 Sensor 域顺手开 */
gpio_set(HRM_PWR_EN, 1);
}
EN 脚链式写法(硬件级防抖序):
/* 硬件 EN 链:Always-on LDO → BB_BUCK_EN → Sensor_EN */
/* PMIC BUCK1_EN 脚直接接 BB 的 PWR_GOOD,BB 起来才拉 Sensor_EN */
gpio_config(BB_BUCK_EN, OUT);
gpio_config(SENSOR_EN, OUT | OPEN_DRAIN); /* PMIC GPIO 回灌保护 */
四、三个易翻车点
• BUCK 切电压别跨档跳:0.7→1.1 V 中间插 0.9,让 BB 的 DVS 过渡段 dv/dt ≤ 10 mV/μs,不然内核欠压锁死
• Ship mode 下 I2C 不通:调试口(SWD/串口)的电要挂在 Always-on 域,别挂 BB 域,不然 ship 后进不去
• LDO 倒灌:Display 域 OLED 的 3.3 V 如果来自系统 3.3 V 母线的 LDO,Display 先掉电时 OLED 面板电容会反向灌 LDO,选型时挑带 active discharge + reverse current protection 的(BQ25120 全系有,nPM1300 部分 LDO 有)
手表低功耗的真谛:PMIC 选轻载效率 + DVFS 的、时序硬件链 + I2C 双层控、上电正序掉电反序、ship 模式 IQ 压到 1 μA 内。这套跑完,300 mAh 电池的 1.78" 圆表,常亮秒针 + 全天心率 + 每晚睡监,能稳 5–7 天,比堆电池容量划算。





