蓝牙BLE芯片PHY6222之如何降低功耗

低功耗模式

根据PHY的规格书描述,有四种模式:
在这里插入图片描述

基于规格书的介绍,就这四种模式细聊聊个人见解:
1.普通模式:即整个系统不会进入睡眠,适用于对功耗没有要求的场景
2.CPU休眠和深度睡眠模式,其实可以理解为同一种模式,因为他们支持唤醒源的方式都是一样的,均支持GPIO唤醒和定时器唤醒,可以自定义任意唤醒IO(注意看该IO是否支持作为唤醒IO),SRAM保持数量(64K SRAM被分为3块SRAM)以及蓝牙是否开启或关闭广播,我们可以称之为普通睡眠模式
3.standy模式:看代码,该模式在睡眠状态下只保持AON 和一块 SRAM0 区域内存,蓝牙状态也会被关闭,以及仅支持Io唤醒,唤醒后相当于系统重启
4.关机模式:也称之为power off模式;,整个系统以及外设都进入睡眠状态,仅支持IO唤醒,唤醒后相当于系统重启

so,根据笔者的项目经验,在考虑功耗的情况下,建议使用普通睡眠模式或者power off模式是最优方案选择,不要纠结standy模式,要纠结就自己去试,多问无意义。

功耗测试

环境

SDK路径:release_bbb_sdk-PHY62XX_SDK_3.1.3\example\ble_peripheral\simpleBlePeripheral
硬件:PHY6222开发板(带DCDC)
测试仪器:DMM7510仪器

测试数据

在这里插入图片描述

该数据仅个人测试参考

影响功耗的因素

从上述测试数据情况可以看出,影响蓝牙功耗的主要由这些因素:demo传送门提取码:j4ny

连接参数–》连接间隔-connection interval,从机延迟-Slave latency

连接间隔-connection interval减小,主从机通信更加频繁,功耗增加;
连接间隔-connection interval增加,主从机通信频率降低,功耗减少。
Slave Latency减少或为0,每次连接事件都有蓝牙交互,功耗增加;
Slave Latency增加,功耗减少。

// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL     24//32//80

// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL     800//48//800

// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_DESIRED_SLAVE_LATENCY         0

// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT          500//1000

广播间隔
广播间隔advInt 时间越大,功耗越小,反之越高;

    {
    	
        uint16 advInt = 800;//2400;//1600;//1600;//800;//1600;   // actual time = advInt * 625us
        GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
        GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
        GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
        GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
    }

SRAM的断电保持
保持数越多,功耗越大,,多保持一块SRAM应该给会多几个uA;

    hal_pwrmgr_RAM_retention(RET_SRAM0|RET_SRAM1|RET_SRAM2);
//    hal_pwrmgr_RAM_retention(RET_SRAM0);

发送功率以及主频
最大发射功率设置为0x3f,板子出来的发射功率应该在8±2dB;最高主频是64M。
发送功率和主频越高,功耗越大;反之越低;

static void hal_rfphy_init(void)
{
    //Watchdog_Init(NULL);
    //============config the txPower
    g_rfPhyTxPower  = RF_PHY_TX_POWER_0DBM ;

int  main(void)
{
  
    g_system_clk = SYS_CLK_XTAL_16M;//SYS_CLK_DBL_32M;//SYS_CLK_XTAL_16M;//SYS_CLK_DLL_64M;
   

设置睡眠模式

打开普通睡眠模式:CFG_SLEEP_MODE=PWR_MODE_SLEEP
关闭睡眠模式:CFG_SLEEP_MODE=PWR_MODE_NO_SLEEP

在这里插入图片描述

power off 模式配置

            LOG("power off\r\n");
            pwroff_cfg_t cfg =
            {
                .pin = P15,

                .type = POL_FALLING,
                .on_time = 3000
            };
            hal_pwrmgr_poweroff(&cfg, 1);

拓展

功耗跟上图出入较大的话,建议:
1.去掉所有LOG的初始化或者使用LOG
2.检查外设在睡眠前是否全部释放,相应的MODULE_e mod要hal_pwrmgr_unlock掉
3.检查所有events事件是否还是周期性触发
4.检查所有的IO在睡眠后是否有漏电的情况,如果IO在睡眠后存在电压差,就会漏电到地,所以一般IO在睡眠前要根据电路设置为输入上拉或者输入下拉;
5.设置广播信道,默认是同时3个信道同时发送广播数据(37,38,39).可以设置为一个或者两个信道应该也能降低一些功耗,不影响实际使用
6.把一些对实时性要求不高的代码放在XIP里面运行,如下图可以参考下,应该可以降低几uA功耗
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值