7.41. 功耗优化说明

Overview

7.41.1. 操作说明

  • 电压配置

    详情查看 系统部分VDDIO_SYSVDD_DCDC14系统电压配置说明

  • tools/isd_config_rule.c 系统频率配置

    /*clock modules configuration*/
    OSC=OSC0;             [OSC0|OSC1|OSC_RTC|HTC]
    OSC_FREQ=24MHz;
    OSC_HC_EN=0;
    OSC_1PIN_EN=0;
    #if defined CONFIG_OVERCLOCKING_ENABLE
    SYS_CLK=396MHz;          [320M 240M 192M 160M 120M 96M 48M 24M 40M 24M,当SYS_CLK为其他值时sdram时钟跟随系统时钟]
    HSB_DIV=1; [高速总线时钟分频系数 HSB_DIV+1]
    LSB_DIV=1; [低速总线时钟分频系数 LSB_DIV+1]
    #else
    SYS_CLK=320MHz;          [320M 240M 192M 160M 120M 96M 48M 24M 40M 24M,当SYS_CLK为其他值时sdram时钟跟随系统时钟]
    HSB_DIV=1; [高速总线时钟分频系数 HSB_DIV+1]
    LSB_DIV=2; [低速总线时钟分频系数 LSB_DIV+1]
    #endif
    

    SYS_CLK配置如上, 频率从大到小, 功耗依次降低, 如需最优功耗, 在不影响程序使用前提下, 往低的配(如opus编解码最小需要在96MHz系统时钟下运行)

  • sdk_ld_sfc.c 代码段放置与缓存区配置(不带SDRAM情况下)

    FREE_DACHE_WAY = 7; //max is 7
    FREE_IACHE_WAY = 0; //max is 7
    CACHE_RAM_SIZE = FREE_DACHE_WAY*4K+FREE_IACHE_WAY*4K;
    

    默认工程FREE_DACHE_WAY配置为7, 如需最优功耗, 则配置成0, 由于此时CACHE_RAM_SIZE = 0, 放在cache_ram的段需要移动位置

    . =ORIGIN(cache_ram);
    .cache_ram_data ALIGN(4):
    {
        #include "driver/cpu/wl82/system_data.ld"
        . = ALIGN(4); // must at tail, make ram0_data size align 4
    } > cache_ram
    
    .cache_ram_bss ALIGN(4):
    {
        *(.memp_memory_x)
        . = ALIGN(4); // must at tail, make ram0_data size align 4
    } > cache_ram
    

    cache_ram_bss 段内容放到 ram0_bss 里, cache_ram_data 段内容放到 ram0_data

  • 降低BLE功耗配置(以demo_ble为例)

    • 降低BLE模拟发射功率:

      需在BLE初始化完后调用, 可以在 app_main.c bt_ble_module_init()之后调用

      void app_main()
      {
          puts("------------- demo_ble app main-------------\n");
      
          extern void bt_ble_module_init(void);
          bt_ble_module_init();
          wifi_set_pwr(6); //功率选择档位 0-6, 0功率最低
      }
      
    • 降低BLE数字发射功率:

      需在BLE初始哈完成前调用, 可以在 app_main.c bt_ble_module_init()之前调用

      void app_main()
      {
          puts("------------- demo_ble app main-------------\n");
      
          extern void bt_ble_module_init(void);
          extern void bt_max_pwr_set(u8 pwr, u8 pg_pwr, u8 iq_pwr, u8 ble_pwr);
          bt_max_pwr_set(6, 6, 6, 11);  //第4个参数为BLE功率参数, 0-11
          bt_ble_module_init();
      }
      
  • 蓝牙不操作,只操作wifi的开关控制功耗(如此关wifi, 功耗相当于SDK只开启了蓝牙, 注意函数的调用先后)

//关闭wifi
extern void wifi_rf_off();
wifi_off();
wifi_rf_off();

//开启wifi
extern void wifi_rf_on();
wifi_rf_on();
wifi_on();

7.41.2. 功耗场景

详情参考[场景功耗测试] doc/stuff/场景功耗测试.xlsx

7.41.3. 常见问题