低功耗

文档指引

FAQ1 板子关机功耗怎么调试

  1. 关机接口

pm_shutdown();  // 在 app_pm.c 中有调用
  1. 不同系列芯片关机模式对比

芯片系列

关机模式

典型功耗

IO保持

唤醒源

SF32LF56x/SF32LF58x

Standby

~16uA

所有IO保持输出

AON唤醒源

SF32LB52x/SF32LB55x

Hibernate

~4uA

仅唤醒口保持

PMUC唤醒源

  1. 关机功耗检查步骤

  • 检查硬件LDO

    • 确认是否有长供电的LDO

    • 检查电源网络设计

  • 检查长供电外设功耗

    • G-Sensor、PPG、GPS、数字PA等

    • 关机前需配置进入低功耗模式

  • 检查IO配置

    • 唤醒脚必须配置上拉/下拉(内部或外部均可)

  • Standby关机注意事项

    • 确认关机前所有IO配置是否正确


FAQ2 板子待机功耗怎么调试

  1. 低功耗说明

  • 系统空闲时会自动进入待机模式

  • 打开 pm_debug 宏后,通过串口日志[pm]打印确认系统唤醒和睡眠状态

  • Pin脚配置文件:bsp_power.cbsp_pinmux.cbsp_lcd_tp.c

  1. 关键函数

// 睡眠前配置,建议调试时所有IO在这里处理
BSP_IO_Power_Down();

// 唤醒后恢复
BSP_Power_Up();
  1. 术语

  • 底电流:最低稳态电流

  • 平均电流:工作周期内的平均功耗


FAQ3 IO口怎么配置不漏电

  1. 唤醒引脚配置 唤醒引脚必须有稳定的电平(软件或硬件拉高/拉低),因内部有专门的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,内部下拉
    
  2. 输出使能引脚配置

    // 正确配置:无上下拉,仅控制输出
    HAL_PIN_Set(PAD_PA00, GPIO_A0, PIN_NOPULL, 1);    // 无内部上下拉
    BSP_GPIO_Set(0, 0, 1);                           // 输出低电平
    
  3. 有问题的配置(会导致漏电)

错误配置

现象

原因

PIN_PULLUP + 输出0

漏电

上拉电阻与输出低电平冲突

PIN_PULLDOWN + 输出1

漏电

下拉电阻与输出高电平冲突

外部上拉 + 输出0

漏电

外部上拉电流流向输出端

外部下拉 + 输出1

漏电

输出电流流向外部下拉

  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输出低电平
    
  2. 外设电源不掉电的通信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大小核都会执行)