# 低功耗休眠漏电与周期性电流尖峰排查说明（对外沟通版）

## 1. 问题背景

当前设备在执行“关机/深度休眠”流程后，实测休眠电流仍然偏高，平均约数百微安量级；电流波形上还会周期性出现很窄的尖峰，尖峰宽度大约 5ms，峰值可到数 mA。

从串口日志和代码链路看，系统已经不是普通熄屏、浅睡或单纯停止 UI 的状态，而是已经执行了完整的深度休眠收口流程，并走到调用底层 PMU 深度休眠接口前的最后阶段。大部分外设、电源域、显示域、总线和后台线程都已经关闭或进入高阻/低功耗状态。

当前问题更像是以下几类原因之一：

| 方向 | 说明 |
|---|---|
| PMU/唤醒源配置问题 | 深度休眠入口、唤醒脚模式、唤醒滤波、LDO 保留策略可能未到最低功耗 |
| 外部唤醒传感器保活 | PA37 保持高电平给外部唤醒传感器供电，可能带来静态电流 |
| 周期采样尖峰 | 外部唤醒传感器低功耗 wakeup-sleep/周期采样可能形成 5ms 左右尖峰 |
| IO 回灌 | UART、PA44、PA43、SPI、I2C、ADC/NTC/CHG 等脚位可能存在回灌 |
| 外部 RAM 低功耗不足 | 已进入 low power，但仍需确认是否还需要更深的 DPD/half-sleep/断电策略 |

## 2. 当前现象

| 项目 | 当前观察 |
|---|---|
| 休眠电流 | 平均约数百微安，明显高于预期深度休眠电流 |
| 尖峰宽度 | 约 5ms |
| 尖峰幅度 | 峰值可到数 mA |
| 尖峰特征 | 规律出现，不像随机噪声，更像周期性唤醒/采样动作 |
| 休眠入口 | 日志显示已走到 PMU 深度休眠最后入口前 |
| 显示域 | 已停止刷新并硬断 |
| 无线链路 | 已关闭 |
| I2C/SPI | 已切高阻或静默，并关闭对应时钟 |
| 外部 RAM | 已进入低功耗 |
| 唤醒源 | 保留 PA44 作为 PMU 唤醒脚，PA37 保活外部唤醒传感器 |
| 调试串口 | PA18/PA19 调试阶段仍保留串口功能，暂未最终高阻 |

## 3. 当前睡眠入口

系统进入休眠主要有三类入口，但最终都汇聚到同一条深度休眠链路。

| 入口 | 触发方式 | 中间动作 | 最终入口 |
|---|---|---|---|
| 物理按键长按 | 用户长按 BACK/唤醒键 | 投递休眠请求 | 深度休眠总入口 |
| UI 关机菜单 | 用户点击 UI 中的 TURN OFF/关机选项 | 投递休眠请求 | 深度休眠总入口 |
| 低电量自动关机 | 电量过低倒计时结束 | 电源管理任务请求休眠 | 深度休眠总入口 |

现场复现主要来自物理按键长按入口。系统会先屏蔽外部 7.5s 复位链，避免关机收尾过程中被硬复位打断，然后继续执行正常深度休眠流程。

## 4. 当前深度休眠代码路径

当前实现不是 UI 直接断电，而是通过系统服务统一收口。

```text
按键/UI/低电量入口
  -> 投递休眠请求
  -> 系统任务消费休眠请求
  -> 延时约 20ms
  -> 停止 LED/振动等用户反馈
  -> 进入深度休眠控制器
  -> 执行外设、电源域、线程、存储和唤醒源收口
  -> 关闭中断
  -> 调用底层 PMU 深度休眠入口
```

这样做的目的，是避免 UI、显示线程、传感器线程、存储线程在硬件电源域关闭后继续访问已断电外设。

## 5. 完整进入深度休眠动作链

下表按日志和代码实际顺序整理。为便于对外沟通，保留 PA 引脚、寄存器和总线信息，但不写具体产品名和传感器型号。

| 阶段 | 动作 | 目的 | 当前状态/日志证据 |
|---|---|---|---|
| 入口保护 | 屏蔽外部 7.5s 复位链 | 避免关机收尾过程中被硬件复位打断 | 已执行 |
| Boot guard | 标记受控关机 | 避免下次启动被判定异常 rollback | 已执行 |
| 停止显示刷新 | 通知 UI data fetch / LVGL 停止 | 避免显示线程继续访问已断电显示域 | 已执行 |
| 振动提示 | 播放关机确认振动 | 用户反馈 | 已执行 |
| 静默提交线程 | 停止会抢 flash/KV/运行快照的线程 | 避免关机 commit 并发 | 已执行 |
| 提交用户配置 | 保存 UI/潜水/业务配置 | 防止配置丢失 | 已执行 |
| 提交时间 | 保存世界时钟/RTC 相关信息 | 保持唤醒后时间一致 | 已执行 |
| 保存运行快照 | 保存业务运行态/算法快照 | 支持唤醒后恢复必要状态 | 已执行 |
| 关闭无线链路 | 停止广播/连接/协议栈 | 降低无线功耗 | 已执行 |
| 电量计休眠 | 写 fuel gauge hibernate 配置并读回 | 降低电量计功耗 | 已执行 |
| 电池 ADC 收口 | PA30/PA31/PA32/PA33 收口 | 避免分压/NTC 漏电 | PA31 高阻，PA33 拉低，PA30/PA32 高阻 |
| 外部磁/运动传感器收口 | 退出工作态或关闭传感器 | 降低传感器功耗 | 已执行 |
| PA43 收口 | 先输出高，后续最终态输入无上下拉 | 避免片选脚或 SPI 域回灌 | 已执行 |
| 关闭灯光 | 关闭 LED/灯带/背光输出 | 避免光源功耗和数据线回灌 | 已执行 |
| 停止显示域线程 | 等待 data fetch / LVGL 协作退出 | 保证不再访问显示/外部 RAM | 已执行 |
| 强制显示/光机断电 | PA0 低、PA38 低，显示控制器/DMA off | 切断显示域电源 | 已执行 |
| 外部存储 SPI 静默 | CS 高，CLK/MOSI 低，MISO 高阻，SPI clock off | 避免外部存储或 SPI 线回灌 | 已执行 |
| 关闭马达/触觉驱动 | PA36 低，定时器/PWM off | 关闭触觉/马达相关功耗 | 已执行 |
| 外部 RAM 低功耗 | 调用外部 RAM low power 接口 | 降低外部 RAM 休眠电流 | 已执行 |
| 等待按键释放 | 等待 BACK/唤醒键释放 | 避免刚进入休眠立刻被唤醒 | 已执行 |
| 停止唤醒传感器后台线程 | 停止运行态 I2C 访问 | 休眠布防阶段独占 I2C2/唤醒传感器 | 已执行 |
| 配置唤醒传感器 | 配置阈值、锁存中断、wakeup-sleep/周期采样 | 保留重新开机唤醒能力 | 已执行 |
| 检查 PA44 | 确认唤醒脚回到高电平待命 | 降低假唤醒风险 | PA44 = 1 |
| 停 WDT | 停止系统 WDT/IWDT | 防止休眠过程中被 WDT 打断 | 已执行 |
| I2C2 高阻 | PA10/PA11 analog high-z，I2C2 clock off | 只保留 PA44 作为唤醒脚 | 已执行 |
| I2C1/I2C3 高阻 | PA39/PA40/PA41/PA42 analog high-z，clock off | 避免外部上拉或断域回灌 | 已执行 |
| WS2812/灯带收口 | PA26 analog high-z，PA27 低 | 避免灯带掉电后数据线回灌 | 已执行 |
| NTC/ADC/CHG 收口 | PA30/31/32/33/35 收口 | 降低分压链路和充电检测漏电 | 已执行 |
| 关闭外设时钟 | LCDC/SPI/I2C/DMA/EPIC/GPTIM/DMAC off | 降低 HPSYS 外设功耗 | 已执行 |
| 配置 PMU 唤醒源 | PA44 -> WKUP_PIN20，PIN0 low wake | 休眠后可按键唤醒 | 已执行 |
| 选择低功耗时钟 | RC32K ready | PMU/唤醒计数需要 | 已执行 |
| 最终硬件复查 | 打印 PMU/LDO/PAD/GPIO 最终态 | 给低功耗排查留证据 | 已执行 |
| 最后一跳 | 关闭中断并进入深度休眠 | 调用底层 PMU 休眠入口 | 已执行到入口前 |

## 6. 当前已确认关闭或收口的模块

| 模块 | 当前状态 | 证据/最终态 |
|---|---|---|
| 无线链路 | 已关闭 | 不再广播/连接 |
| UI / LVGL / data fetch | 已协作退出 | 显示域线程安全退出 |
| 显示/光机域 | 已硬断 | PA0 低，PA38 低，显示控制器/DMA off |
| 外部存储 SPI | 已静默 | CS 高，CLK/MOSI 低，MISO 高阻，SPI clock off |
| 外部 RAM | 已进入 low power | 已调用 low power 接口 |
| 电量计 | 已写 hibernate 配置 | 写入并读回确认 |
| 压力/深度传感器 I2C | SDA/SCL analog high-z，clock off | PA41/PA42 高阻 |
| 电源/电池 I2C | SDA/SCL analog high-z，clock off | PA39/PA40 高阻 |
| 唤醒传感器运行态 I2C | SDA/SCL analog high-z，clock off | PA10/PA11 高阻，仅保留 PA44 |
| 运动/磁传感器 | 已退出工作态或低功耗 | 仍需确认外部器件本身漏电 |
| 马达/触觉驱动 | 已关闭 | PA36 低，GPTIM/PWM off |
| 灯带/指示灯 | 已关闭 | PA26 高阻，PA27 低 |
| 电池 ADC/NTC | 已收口 | PA30/31/32 高阻，PA33 低 |
| 充电检测 | 已收口 | PA35 analog high-z |
| WDT/IWDT | 已停止 | 避免休眠中被复位 |
| 主要外设时钟 | 已关闭 | LCDC/SPI/I2C/DMA/EPIC/GPTIM/DMAC off |

## 7. 当前仍保留或需要重点确认的部分

这些项不是明确遗漏，而是当前唤醒设计和调试需要保留；但它们也是当前漏电和尖峰的重点嫌疑。

| 保留项 | 当前状态 | 保留原因 | 风险 |
|---|---|---|---|
| PA37 / 外设 3V3 保持脚 | 输出高 | 给外部唤醒传感器保活 | 可能带来静态漏电，或连带其它外设供电 |
| 外部唤醒传感器 | wakeup-sleep / 低功耗周期采样 | BACK/按键式重新开机唤醒 | 可能产生 5ms 周期电流尖峰 |
| PA44 / 唤醒中断脚 | pull-up input，PMU PIN0 low wake | 休眠唤醒脚 | 上拉、锁存中断、电平保持可能影响电流 |
| RC32K | 已启用 | PMU 休眠和唤醒计数需要 | 正常保留，但需确认配置 |
| AON/RTC/backup 域 | 保留 | 唤醒寄存器、备份标记、RTC | 正常保留，但需确认最低功耗配置 |
| 内部 Peri LDO | 日志显示保留 | 可能用于维持 PA37/唤醒源 | 可能是偏高静态电流来源 |
| PA18/PA19 UART | 调试阶段仍是 UART function + pull-up | 定位最后一跳日志 | 可能通过调试器或串口线回灌 |
| PA43 / 外部片选脚 | input no-pull，level=1 | 外部传感器断域前收口 | 可能经外部器件 IO 回灌 |

## 8. 最终 PMU/寄存器状态

现场最终指纹如下，建议原厂重点确认这些值是否符合“PA44 低电平保持唤醒 + 深度休眠”的最低功耗要求。

```text
PMUC: CR=0x0000d011 WER=0x00000008 WSR=0x00000000 WKUP_CNT=0x000f000f
AON_LDO=0x00000006
PERI_LDO=0x000a0b1b

CR  = 0x0000d011
PIN0_MODE=1
PIN0_SEL=20
HIBER_EN=0

WER = 0x00000008
PIN0=1

WSR = 0x00000000
PA44 = 1 before enter hibernate
```

| 字段 | 当前值 | 需要确认 |
|---|---:|---|
| `CR` | `0x0000d011` | 是否为正确的深度休眠前配置 |
| `WER` | `0x00000008` | PIN0 唤醒使能是否正确 |
| `PIN0_SEL` | `20` | PA44 -> WKUP_PIN20 映射是否正确 |
| `PIN0_MODE` | `1` | low-level / level hold wake 是否正确 |
| `HIBER_EN` | 最终打印前为 `0` | 是否由底层 PMU 休眠接口内部置位 |
| `AON_LDO` | `0x00000006` | 是否为最低功耗推荐值 |
| `PERI_LDO` | `0x000a0b1b` | 是否表示 Peri LDO 仍开启；是否必须保留 |
| `WKUP_CNT` | `0x000f000f` | 唤醒滤波/计数是否推荐 |

## 9. 最终 PAD/GPIO 状态

| 引脚/功能 | 当前最终态 | 需要确认 |
|---|---|---|
| PA00 / 显示复位 | output low | 是否足以避免显示域回灌 |
| PA01 / 大灯或指示灯 | output low | 是否仍有外部回路 |
| PA03 / 显示 CS | output low | 显示断电后 CS 拉低是否推荐 |
| PA04 / 显示 CLK | output low | 显示断电后 CLK 拉低是否推荐 |
| 显示 DIO0..3 | input pulldown | 是否符合显示接口休眠推荐 |
| PA26 / 灯带数据 | analog high-z | 避免灯带掉电后数据线回灌 |
| PA27 / 灯带电源 | output low | 关闭灯带电源 |
| PA18 / UART RX | UART function pull-up，level=1 | 调试阶段保留；量产休眠前是否必须高阻 |
| PA19 / UART TX | UART function pull-up，level=1 | 调试阶段保留；是否会经调试器回灌 |
| PA20 / LED/马达 PWM | output low | 是否仍有外部驱动漏电 |
| PA24 / SPI MOSI | output low | 外部存储断电/休眠后是否推荐 |
| PA25 / SPI MISO | input / high-z-ish，level=1 | 是否需要外部或内部上下拉 |
| PA28 / SPI CLK | output low | 外部存储休眠后是否推荐 |
| PA29 / SPI CS | output high | 外部存储非选中 |
| PA30 / BAT ADC | analog high-z | 是否仍有分压路径 |
| PA31 / BAT ADC GND | analog high-z | 是否会导致分压链残留 |
| PA32 / NTC ADC | analog high-z | NTC 采样脚收口 |
| PA33 / NTC VDD | output low | 关闭 NTC 供电 |
| PA35 / CHG# | analog high-z | 充电检测脚是否应高阻/上拉/下拉 |
| PA36 / 马达驱动 EN | output low | 关闭马达驱动 |
| PA37 / 外设 3V3 控制 | output high | 保活唤醒传感器；是否可改为更低功耗方案 |
| PA38 / 显示电源控制 | output low | 切断显示电源 |
| PA10 / I2C2 SCL | analog high-z | 唤醒传感器运行态 I2C 已释放 |
| PA11 / I2C2 SDA | analog high-z | 唤醒传感器运行态 I2C 已释放 |
| PA39 / I2C3 SDA | analog high-z | 电源/电池 I2C 收口 |
| PA40 / I2C3 SCL | analog high-z | 电源/电池 I2C 收口 |
| PA41 / I2C1 SDA | analog high-z | 压力/深度传感器 I2C 收口 |
| PA42 / I2C1 SCL | analog high-z | 压力/深度传感器 I2C 收口 |
| PA43 / 外部传感器片选 | input no-pull，level=1 | 是否可能经外部器件 IO 回灌 |
| PA44 / 唤醒中断 | pull-up input，level=1，PMU wake | 内部上拉/外部上拉/无上下拉哪种最低功耗 |

## 10. 异常现象的初步判断

| 异常 | 当前判断 | 理由 |
|---|---|---|
| 静态电流偏高 | 更像 PA37 保活域、内部 Peri LDO、PA44 唤醒脚、UART 或 IO 回灌 | 主显示域、无线、总线、外部存储和大部分传感器已收口 |
| 5ms 周期尖峰 | 更像外部唤醒传感器 wakeup-sleep/周期采样 | 尖峰很窄且规律，和周期采样行为匹配 |
| 休眠入口未真正进入 | 可能性较低，但仍需确认底层 PMU 最后一跳 | 日志已走到最终休眠入口前 |
| 外部 RAM 漏电 | 不是最高嫌疑，但仍需确认 | 已进入 low power，但不确定是否还需要 DPD/供电切断 |
| 调试串口回灌 | 需要单独验证 | PA18/PA19 当前仍保留 UART function + pull-up |

## 11. 重点怀疑项排序

| 优先级 | 怀疑项 | 为什么 |
|---|---|---|
| P0 | 外部唤醒传感器 wakeup-sleep / 周期采样 | 与 5ms 规律尖峰高度匹配 |
| P0 | PA37 外设 3V3 保活域 | 休眠中仍保持高电平，可能贡献主要静态电流 |
| P1 | `PERI_LDO=0x000a0b1b` | 可能代表内部 Peri LDO 未降到最低或仍保持 |
| P1 | PA18/PA19 UART 未高阻 | 串口和调试器容易造成额外漏电或回灌 |
| P1 | PA44 wake pin pull-up/latch | 唤醒脚保留，可能影响静态电流 |
| P2 | PA43 外部片选脚回灌 | 当前 input no-pull 且 level=1，需要确认外部连接 |
| P2 | SPI 外部存储 IO 组合 | 已静默，但仍需确认外部存储推荐态 |
| P2 | 外部 RAM | 已 low power，但仍需确认是否支持/需要更深模式 |

## 12. 建议向原厂确认的问题

| 编号 | 问题 | 目的 |
|---|---|---|
| Q1 | `CR=0x0000d011, WER=0x00000008, PIN0_SEL=20, PIN0_MODE=1` 是否是 PA44 低电平保持唤醒的正确配置？ | 确认 PMU 配置 |
| Q2 | `HIBER_EN` 在调用底层 PMU 休眠接口前打印为 0 是否正常？是否由底层接口内部置位？ | 确认最后一跳行为 |
| Q3 | `PERI_LDO=0x000a0b1b` 是否意味着内部 Peri LDO 仍开启？最低深度休眠电流推荐值是多少？ | 定位静态漏电 |
| Q4 | 如果需要外部唤醒传感器作为深度休眠唤醒源，PA37/外设 3V3 是否必须保持高？是否可只保留更小供电域？ | 降低保活域电流 |
| Q5 | 外部唤醒传感器 wakeup-sleep / 1s 周期采样是否会产生约 5ms、数 mA 的电流尖峰？ | 对齐尖峰来源 |
| Q6 | PA44 唤醒中断脚推荐使用内部 pull-up、外部 pull-up、下拉还是 no-pull？PMU low-level wake 是否有推荐 PAD 配置？ | 排除唤醒脚漏电 |
| Q7 | PA18/PA19 UART 在深度休眠前是否必须切 analog high-z？保留 UART function + pull-up 是否会影响电流？ | 排除调试串口漏电 |
| Q8 | PA43、SPI、I2C、ADC/NTC/CHG 等断域外设引脚推荐最终态是什么？ | 排除 IO 回灌 |
| Q9 | 外部 RAM 已进入 low power，深度休眠后是否还会保留供电？是否需要额外 deep power-down/half-sleep 配置？ | 排除外部 RAM 漏电 |
| Q10 | 是否有官方“深度休眠 + GPIO 唤醒 + 外部唤醒传感器保活”的最小参考工程？ | 建立对照基线 |

## 13. 建议实验矩阵

这些实验用于区分“静态漏电”和“周期尖峰”来源。

| 实验 | 改动 | 预期判断 |
|---|---|---|
| A. 关闭 UART 引脚 | 休眠前将 PA18/PA19 改 analog high-z，并断开调试器 | 如果静态电流下降，UART/调试器回灌成立 |
| B. 禁用外部唤醒传感器 | 临时不保留该传感器唤醒，只进入最小深度休眠 | 如果 5ms 尖峰消失，尖峰来自唤醒传感器 |
| C. 改变唤醒传感器采样周期 | 将 1s 周期改为 2s/5s 等 | 如果尖峰周期同步变化，唤醒传感器坐实 |
| D. PA37 拉低测试 | 临时不保活外部唤醒传感器，仅测电流 | 如果静态电流大幅下降，PA37 保活域是主耗电 |
| E. PA44 pull-up 策略切换 | 内部 pull-up / no-pull / 外部上拉对比 | 判断唤醒脚静态电流 |
| F. 外部 RAM low power 对比 | 打开/关闭外部 RAM low power，或尝试更深模式 | 判断外部 RAM 贡献 |
| G. SPI/I2C/ADC 脚最终态对比 | 高阻、上拉、下拉、输出固定态分别测试 | 判断 IO 回灌 |
| H. 最小休眠 demo 对照 | 官方最小工程 + 同一 PA44 唤醒脚 | 区分 SDK/应用/硬件板级问题 |
| I. 保留 PA44 但关闭 PA37 | 只保留唤醒脚，不给外部唤醒传感器供电 | 判断 PA44 是否经外部器件回灌 |
| J. 断开外部调试器 | 进入休眠后断开串口/下载器/USB 转串口 | 判断调试链路是否参与漏电 |

## 14. 对外描述问题可用文本

我们现在遇到一个低功耗问题：设备已经按软件流程进入深度睡眠/关机模式，日志里也能看到无线、显示、外设总线、传感器、外部 RAM 等都已经做了收口处理，但实际测出来的睡眠电流仍然偏高，平均大概在几百微安量级，不像是正常深睡电流。

更奇怪的是，电流波形里还会周期性出现很窄的尖峰，单个尖峰大概 5ms 左右，峰值能到几 mA。整体看起来像是某个保留域、唤醒源、外部传感器周期采样，或者 IO/调试口回灌在定时拉起电流。但目前我们把能想到的显示、电源、总线、传感器、存储、看门狗、外设时钟都逐项检查和关闭后，还是没有定位到明确来源，所以想请原厂帮忙确认深睡时 PMU/LDO/唤醒源/GPIO 最终态是否还有隐藏要求。

## 15. 现场日志关键摘录（保留引脚信息，去除具体器件型号）

```text
[input] 外部 7.5s 复位链已临时屏蔽，等待正常关机流程继续收尾
[key] BACK/唤醒键长按达到 5s，立即开始关机；松手后后台完成深度休眠
[pm] ===== 进入深度休眠模式 =====

[pm] boot confirmed / controlled powerdown
[pm] UI data fetch / LVGL 准备退出
[pm] 关机确认振动完成
[pm] commit user_settings done
[pm] commit world_time done
[pm] commit runtime snapshot done

[pm] 关闭无线链路...
[pm] 无线链路已关闭
[fuel] 关机 hibernate 配置写入并读回确认
[pm] 电池 ADC 收口完成：PA31 模拟高阻，PA33 拉低，PA30/PA32 模拟高阻
[pm] 外部磁/运动传感器已退出工作态
[pm] PA43 已恢复为外部片选输出高，后续最终态切 input no-pull
[light] Power OFF

[pm] 请求显示数据线程和 LVGL 线程协作退出...
[pm] 显示域线程已安全退出
[pm] 显示/光机域已强制断电：PA0 低，PA38 低，显示控制器/DMA off
[pm] 外部存储 SPI 静默完成：CS 高、CLK/MOSI 低、MISO 高阻、SPI clock off
[pm] 马达/触觉驱动和 GPTIM/PWM 已彻底关闭

[pm] 外部 RAM 进入低功耗模式...
[pm] 外部 RAM 已进入低功耗模式

[input] 检测到 BACK/唤醒键释放
[pm] 唤醒传感器后台线程已协作停止，关机布防可独占 I2C2
[input] 唤醒传感器 GPIO IRQ 已关闭，避免深度休眠前软件中断干扰
[input] 唤醒传感器休眠阈值已配置
[input] 唤醒传感器中断模式：锁存
[input] 唤醒传感器 wakeup-sleep 周期采样已配置，周期约 1000ms
[pm] PA44 电平 = 1，进入非触发待命状态

[pm] WDT/IWDT 已停止
[pm] 外部运动/磁传感器低功耗收口完成
[pm] I2C2 已切模拟高阻并关闭时钟：PA10/PA11，仅保留 PA44 作为唤醒源
[pm] 电池 ADC 收口完成：PA31 模拟高阻，PA33 拉低，PA30/PA32 模拟高阻

[pm] PA37 保持高电平，保活外部唤醒传感器
[pm] PA38 已重新配置为 NOPULL 并拉低
[pm] 显示 QSPI/并口脚按推荐态收口
[pm] PA26 灯带数据线模拟高阻，避免回灌
[pm] I2C1/I2C3 已切模拟高阻，避免外部上拉或断域回灌
[pm] PA35 充电检测脚 analog high-z

[pm] 所有未使用引脚已设为高阻态
[pm] 外设时钟已关闭：LCDC/SPI/I2C/DMA/EPIC/GPTIM/DMAC
[pm] PA44 -> WKUP_PIN20，低电平保持唤醒
[pm] PMU 寄存器：CR=0x0000d011, WER=0x00000008, WSR=0x00000000, WKUP_CNT=0x000f000f
[pm] RC32K 低功耗时钟已就绪
[pm] 最后检查：PA44 = 1
[pm] 即将调用底层 PMU 深度休眠接口

[pm][lp-fp] PMUC: CR=0x0000d011 WER=0x00000008 WSR=0x00000000 WKUP_CNT=0x000f000f AON_LDO=0x00000006 PERI_LDO=0x000a0b1b
[pm] 调试阶段：暂不提前关闭 UART，优先定位最后一跳是否异常
[pm] 关闭中断并进入深度休眠
```

## 16. 当前阶段结论

1. 当前软件不是普通浅睡，已经执行完整深度休眠收口链路。
2. 大部分可关闭外设已经关闭或高阻，包括无线、显示域、外部存储 SPI、外部 RAM、I2C1/I2C2/I2C3、运动/磁传感器、马达/触觉驱动、灯光、ADC/NTC、充电检测、WDT 和主要外设时钟。
3. 当前仍保留 PA37 外部 3V3、外部唤醒传感器、PA44 PMU wake、RC32K、AON/RTC、内部 Peri LDO，以及 PA18/PA19 调试 UART。
4. 5ms 规律尖峰最可疑来源是外部唤醒传感器 wakeup-sleep / 周期采样。
5. 静态漏电最可疑来源是 PA37 保活域、内部 Peri LDO、PA18/PA19 UART、PA44 唤醒脚、PA43/外设片选或其它 IO 回灌。
6. 建议优先做：关闭 UART、禁用唤醒传感器、改变采样周期、PA37 拉低、官方最小工程对照。

