Files
stc32g128k/Docs/50_module-breakdown/mod-power.md

35 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模块拆分 - 极低功耗与电源管理 (Docs/50_module-breakdown/mod-power.md)
本模块描述手环的低功耗管理、AMOLED 供电 PMIC 控制以及中断睡眠/唤醒时序。
## 1. 模块职责说明
* **职责范围**
1. 在系统上电时使能 SGM3833 升压芯片,为 OLED 屏提供稳定的显示电源。
2. **低功耗决策判定**
当主系统处于非警报状态,且连续 10 秒(`inactivity_timer >= 1000`)无任何按键或无线包事件时,判定系统进入 `STATE_SLEEP` 极低功耗睡眠。
3. **彻底切断 PMIC**
为消除 OLED 的静态负压漏电流,休眠前拉低 `SGM_CTRL = 0`,使 SGM3833 彻底断电。
4. **睡眠挂起配置**
使能 `INT2`(外部中断 2接射频接收引脚以及 P0 口引脚电平变化中断,然后将 STC32G 写入 `PCON |= 0x02` 进入停机Power-Down挂起状态关闭主高频振荡时钟全板功耗降至微安级。
5. **安全唤醒重初始化时序**
发生按键或无线信号中断时CPU 瞬间被唤醒。由于升压 PMIC 的输入电容充电及负压稳压需要时间,唤醒后**严禁立即写屏**。必须首先拉高 `SGM_CTRL = 1`,接着**软件强行阻塞延时 50ms**,等电网稳定后,再次完整初始化 RM69310 的寄存器参数,最后恢复待机屏幕重绘。
---
## 2. 接口与函数说明
* `void Power_Init(void)`:配置 `P3.4` (SGM_CTRL) 为推挽输出,默认输出高电平 `SGM_CTRL = 1`
* `void Enter_Low_Power_Sleep(void)`
1. 向 RM69310 屏幕控制器发送关闭显示命令(寄存器 0x28
2. 拉低 `SGM_CTRL = 0` 彻底切断 PMIC。
3. 配置并使能按键端口中断与 RF 中断。
4. 执行 `PCON |= 0x02` 挂起 CPU。
* `void Wakeup_Restore(void)`
1. 拉高 `SGM_CTRL = 1` 开启 SGM3833 供电。
2. 执行 `delay_ms(50)` 阻塞式等待电平平稳,过滤冲击电流。
3. 调用 `LCD_Init()` 重新对 RM69310 进行整套初始化配置,恢复写屏 GRAM 通道。
4. 状态机切回 `STATE_CLOCK` 并置 `Redraw = 1`
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->