CI14LP低功耗方案说明¶
概述¶
CI14LP芯片支持低功耗方案,低功耗方案需要从硬件和软件两个方面一起协同工作实现。以下从硬件和软件两个方面详细说明实现方法。
低功耗硬件方案¶
CI14LP系列芯片支持低功耗方案的硬件方案是采用效率更高的DCDC电源替换芯片内部的LDO电源,DCDC电源效率可以达到95%以上,而LDO的效率只有30%,因此采用DCDC电源可以有效降低功耗。DCDC电源采用5v输入,1.1v输出接芯片的VDD11管脚输入。
CI14LP芯片的电源管理由SCU(System Control Unit)模块负责,支持多种电源模式(scu_power_mode_t):
| 电源模式 | 值 | 说明 |
|---|---|---|
| SCU_POWER_MODE_NORMAL | 0x1 | 正常工作模式(AON域正常,NPU域正常) |
| SCU_POWER_MODE_SLEEP | 0x0 | 低功耗模式(AON域正常,NPU域下电) |
| SCU_POWER_MODE_NOT_LOWPOWER | 0x5 | 退出低功耗时,硬件正在自动上电 |
| SCU_POWER_MODE_LOWPOWER | 0x2 | 进入低功耗时,硬件正在自动下电 |
低功耗软件方案¶
电源模式切换¶
CI14LP系列芯片的电源管理驱动位于 driver\ci14lp_chip_driver\inc\ci14lp_lowpower.h,支持以下电源模式(power_mode_t):
| 电源模式 | 值 | 说明 |
|---|---|---|
| POWER_MODE_ERR | -1 | 错误 |
| POWER_MODE_NORMAL | 0 | 正常模式 |
| POWER_MODE_DOWN_FREQUENCY | 1 | 降频模式 |
| POWER_MODE_OSC_FREQUENCY | 2 | 晶振时钟模式 |
| POWER_MODE_SLEEP | 998 | 休眠模式(暂不使用) |
| POWER_MODE_DEEP_SLEEP | 999 | 深度休眠模式(暂不使用) |
可通过 power_mode_switch() 接口切换电源模式,通过 get_curr_power_mode() 查询当前模式:
#include "ci_lowpower.h"
/* 切换到降频模式(仅保证识别功能) */
power_mode_switch(POWER_MODE_DOWN_FREQUENCY);
/* 切换到正常全速模式 */
power_mode_switch(POWER_MODE_NORMAL);
/* 查询当前所处的模式 */
power_mode_t mode = get_curr_power_mode();
注册进出低功耗用户扩展函数¶
可通过 register_lowpower_user_fn() 注册进入/退出低功耗模式的用户扩展回调函数,在模式切换时执行自定义操作(如关闭/打开外部器件电源):
#include "ci_lowpower.h"
void my_enter_lowpower(void)
{
/* 进入低功耗前的自定义操作,如关闭外部功放电源 */
}
void my_exit_lowpower(void)
{
/* 退出低功耗后的自定义操作,如打开外部功放电源 */
}
void app_init(void)
{
register_lowpower_user_fn(my_enter_lowpower, my_exit_lowpower);
}
系统级低功耗请求¶
CI14LP系列芯片在 system\ci14lp_system.h 中提供系统级低功耗请求接口:
#include "ci_system.h"
/* 请求进入超低功耗模式 */
enter_low_power_mode(SYS_REQ_ENTER_DEEP_POWER_MODE);
/* 请求进入低功耗模式 */
enter_low_power_mode(SYS_REQ_ENTER_LOW_POWER_MODE);
/* 判断系统是否从低功耗模式唤醒 */
int from_lowpower = is_from_lowpower_mode();
低功耗相关SCU配置¶
CI14LP系列芯片低功耗方案还包括以下SCU配置接口(位于 driver\ci14lp_chip_driver\inc\ci14lp_scu.h):
- PDN域电源控制(NPU域供电模式):
scu_pdn_power_en(ENABLE); //NPU域上电
scu_pdn_power_en(DISABLE); //NPU域下电
- 读取低功耗状态:
uint8_t status = scu_get_lowpower_status(PDN_SLEEP_VALUE); //PDN睡眠输出信号
uint8_t status = scu_get_lowpower_status(PDN_WFI_MODE); //PDN wfi输出信号
- 读取当前系统工作状态:
scu_power_mode_t mode = scu_get_power_mode();
- 低功耗模式下LDO1输出电压调整(该值只有在硬件自动下电时才会加载):
scu_enter_lowpower_ldo1_lv(SCU_LDO1_LV_2_5V); //低功耗模式下LDO1输出电压为2.5V
scu_exit_lowpower_ldo1_lv(SCU_LDO1_LV_3_3V); //非低功耗模式下LDO1输出电压为3.3V
- SRAM/ROM/IIS低功耗配置:
scu_sram_config(SCU_SELECT_SRAM0, SCU_SRAM_LOWERPOWER_EN, ENABLE); //使能SRAM低功耗
scu_rom_lowpower_en(ENABLE); //使能ROM低功耗
scu_iis_lowpower_en(ENABLE); //使能IIS低功耗
注意
- 系统初始化完成后应处于normal正常模式。
- 降频模式仅保证识别功能,主频降为12.288M。
- 晶振时钟模式仅保证VAD功能,需要在VAD START后切换到可以正常识别的模式。