芯片开放社区
直播中

王军

7年用户 1754经验值
私信 关注
[技术讨论]

TG6101开发实战:低功耗子系统开发过程

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
  • 进入LPM低功耗系统目录
  • 编译LPM demo,编译成功后,Makefile脚本自动拷贝并转化为solution需要的文件

5 主系统流程

5.1 新唤醒源的添加

  • 主系统的LPM模块在初始化时,可以在函数app_lpm_init()内增加相应的唤醒源。如增加一个USER KEY的GPIO唤醒

#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
  • 主系统在每次系统调用时,在函数app_lpm_wakeup_reason_config()内增加相应的唤醒源使能。如增加USER KEY的GPIO唤醒使能

#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);
#endif5.2 唤醒事件处理

  • 系统在LPM内通过唤醒源唤醒后退出回到主系统,主系统根据不同的唤醒源进行不同的唤醒事件处理,保证和正常模式下相同的处理流程。

        #ifdef APP_KEY_USER
                case APP_KEY_USER:
                    app_lpm_button_handle(pin);
                    tgrs = PM_WAKEUP_REASON_USER_KEY;
                    break;
        #endif5.3 编译及集成

cd solutions/tg6101_smart_speaker
make
  • 进入tg6101_smart_speaker系统目录
  • 重新编译系统solution。

文章转载自:平头哥芯片开放社区 作者:diguago

更多回帖

发帖
×
20
完善资料,
赚取积分