低功耗¶
文档指引¶
睡眠唤醒流程请参见 低功耗开发指南
详细调试流程请参见 Low Power 应用指南
系统没有进入睡眠请参见 为什么没有进入睡眠模式
FAQ1 板子关机功耗怎么调试¶
关机接口
pm_shutdown(); // 在 app_pm.c 中有调用
不同系列芯片关机模式对比
芯片系列 |
关机模式 |
典型功耗 |
IO保持 |
唤醒源 |
|---|---|---|---|---|
SF32LF56x/SF32LF58x |
Standby |
~16uA |
所有IO保持输出 |
AON唤醒源 |
SF32LB52x/SF32LB55x |
Hibernate |
~4uA |
仅唤醒口保持 |
PMUC唤醒源 |
关机功耗检查步骤
检查硬件LDO
确认是否有长供电的LDO
检查电源网络设计
检查长供电外设功耗
G-Sensor、PPG、GPS、数字PA等
关机前需配置进入低功耗模式
检查IO配置
唤醒脚必须配置上拉/下拉(内部或外部均可)
Standby关机注意事项
确认关机前所有IO配置是否正确
FAQ2 板子待机功耗怎么调试¶
低功耗说明
系统空闲时会自动进入待机模式
打开
pm_debug宏后,通过串口日志[pm]打印确认系统唤醒和睡眠状态Pin脚配置文件:
bsp_power.c、bsp_pinmux.c、bsp_lcd_tp.c
关键函数
// 睡眠前配置,建议调试时所有IO在这里处理
BSP_IO_Power_Down();
// 唤醒后恢复
BSP_Power_Up();
术语
底电流:最低稳态电流
平均电流:工作周期内的平均功耗
FAQ3 IO口怎么配置不漏电¶
唤醒引脚配置 唤醒引脚必须有稳定的电平(软件或硬件拉高/拉低),因内部有专门的RTC唤醒电路设计
// 有外部硬件上/下拉的,不需要软件再配置 HAL_PIN_Set(PAD_PA44, GPIO_A44, PIN_PULLUP, 1); // 配置PA44为GPIO,内部上拉 HAL_PIN_Set(PAD_PA44, I2C1_SCL, PIN_PULLDOWN, 1); // 配置PA44为I2C1_SCL,内部下拉
输出使能引脚配置
// 正确配置:无上下拉,仅控制输出 HAL_PIN_Set(PAD_PA00, GPIO_A0, PIN_NOPULL, 1); // 无内部上下拉 BSP_GPIO_Set(0, 0, 1); // 输出低电平
有问题的配置(会导致漏电)
错误配置 |
现象 |
原因 |
|---|---|---|
|
漏电 |
上拉电阻与输出低电平冲突 |
|
漏电 |
下拉电阻与输出高电平冲突 |
外部上拉 + 输出0 |
漏电 |
外部上拉电流流向输出端 |
外部下拉 + 输出1 |
漏电 |
输出电流流向外部下拉 |
外设电源关闭后的引脚处理
// 关闭外设电源后,通信引脚需配置为高阻 HAL_PIN_Set_Analog(PAD_PA00, 1); // 配置PA00为高阻态 // 或配置为无上下拉输入+输出0 HAL_PIN_Set(PAD_PA00, GPIO_A0, PIN_NOPULL, 1); // PA00配置为GPIO,无内部上下拉 BSP_GPIO_Set(0, 0, 1); // GPIO_A0输出低电平
外设电源不掉电的通信IO处理方式
// 可配置为高阻,唤醒时需恢复 HAL_PIN_Set_Analog(PAD_PA00, 1); // 配置PA00为高阻态 // 或保持通信模式,需确认是否有外部上拉 HAL_PIN_Set(PAD_PA00, I2C1_SCL, PIN_NOPULL, 1); // PA00保持I2C1 SCL模式,无内部上下拉
FAQ4 为什么不睡眠¶
按照文档检查后未发现异常,通常是因为修改了默认睡眠流程导致系统不睡眠
// 检查 bf0_pm.c 文件中的 sifli_sleep 函数
rt_kprintf("[pm]S:%d,%d\n", mode, start_time); // 确认是否能执行到此(56x、55x、58x大小核都会执行)