1. 概述
对带电池产品来说,续航时间是比较关键的产品体验。增加续航时间:1. 电池容量增加,带来的即为体积重量增加,这对于轻便的移动产品设计带来更多的挑战。2. 单位时间内消耗的电量越少,则续航能力越长,因此实现低功耗技术,在不增加产品体积和重量下,可以延长产品续航时间,从而提升产品用户体验。
2. 方案架构
2.1 系统规格
2.1.1 运行环境
硬件:盘古芯片TCM内(SDRAM处于自刷新状态)-- TCM: 256K
CPU:主频最低12MHz,可根据需要调整为12*N MHz
软件:基础csi组件 + csi_pangu组件,无OS系统
2.1.2 API接口
a) csi/include
b) csi_pangu/include(精简版:当前支持uart、
timer、gpio、rtc及codec)
2.2 主要功能
2.2.1 主系统功能
唤醒源的配置,确保低功耗子系统的唤醒功能,每次进入低功耗子系统都可以动态设置;
外围器件设备的关闭、IP CLK关闭、IRQ关闭、CPU1&CPU2待机态,在LPM子系统内,这些都不需要运行,所以全部选择关闭来降低功耗;
与CPU2算法引擎的交互处理和与云服务交互处理都是正常的业务流程,不会因为低功耗而改变,只要是在主系统内都运行着。
2.2.2 低功耗子系统功能
频率调整和SDRAM自刷新设置,主要是为了进一步降低功耗,即调整CPU频率到12M,SDRAM处于极低功耗的自刷新模式;
MIC数据采集、语音算法处理和其他唤醒源的监测,主要是为了与主系统的功能切换,保持与主系统的统一处理,保障相同的用户体验。
3. 低功耗系统流程
1) 主系统设置唤醒源;
2) 关闭外围设备、关闭IP CLK、关闭IRQ、CPU1&CPU2处于待机态;
3) 系统进入低功耗系统后,根据传入的参数来配置低功耗的唤醒源;
4) 设置低功耗系统需要的主频(如12MHz);
5) SDRAM设置进入self refresh自刷新状态;
6) 启动codec定时器和初始化算法;
7) 算法处理和唤醒源检测;
8) 获取唤醒事件;
9) 关闭codec定时器和去初始化算法;
10) 系统主频恢复;
11) SDRAM退出自刷新,进入正常状态;
12) 保存唤醒源数据,退出低功耗系统,返回正常系统。
4 子系统流程
4.1 代码框架
当前LPM支持的唤醒源:超时唤醒、语音关键词唤醒、GPIO唤醒(可设置多个)。
lpm_init():作为LPM应用的入口函数,主要执行调频、算法使能和处理、唤醒源判断等处理逻辑。
4.2 语音采集和处理
进入低功耗时启动codec采集定时器;
传入的参数带有存储codec数据的ringbuffer信息(起始地址、长度);
定时器超时后,将codec dma的数据写入ringbuffer中;
LPM系统从ringbuffer中读取codec数据,调用算法处理函数,获知是否有语音唤醒事情产生。
4.3 编译及集成
cd solutions/tg6101_lpm_demo
make
5 主系统流程
5.1 新唤醒源的添加
#ifdef APP_KEY_USER
gpio_info.pin_id = APP_KEY_USER;
gpio_info.dir = GPIO_DIRECTION_INPUT;
gpio_info.irq_mode = GPIO_IRQ_MODE_LOW_LEVEL;
pm_wakeup_src_config(LPM_WAKE_REASON_GPIO, &gpio_info);
#endif
#ifdef APP_KEY_USER
pin_id = APP_KEY_USER;
pm_wakeup_src_enable(LPM_WAKE_REASON_GPIO, wku_cfg->wku_reason_user_key,
(void *)&pin_id);
#endif
5.2 唤醒事件处理
#ifdef APP_KEY_USER
case APP_KEY_USER:
app_lpm_button_handle(pin);
tgrs = PM_WAKEUP_REASON_USER_KEY;
break;
#endif
5.3 编译及集成
cd solutions/tg6101_smart_speaker
make
文章转载自:平头哥芯片开放社区 作者:diguago