NXP BLE SOC低功耗模式调试总结

NXP系列MCU共6种低功耗模式。
908X系列BLE SOC支持其中两种,为PD0,PD1。根据手册两种模式区别:
在这里插入图片描述PD1为最低功耗模式,所有外设时钟都关闭,只能通过IO或电压比较唤醒。经测试,PD1下MCU的功耗为0.8uA。
PD0为普通低功耗模式,最主要的区别就是蓝牙内核还开着,所以可以根据这一点,设计低功耗广播的方案,即设备待机时,蓝牙一直广播。
这个方案的好处是,通过蓝牙连接来唤醒设备,不存在误触问题。旧方案是通过手触摸或双击等触摸类唤醒,很多应用场景会误触开机。配合PD1还可以设计为:待机为PD1,触摸后设备低功耗广播,蓝牙连接后进入工作模式,若一段时间无连接退回到PD1。

经测试,蓝牙休眠时功耗为2.5uA~3uA,通过修改广播间隔,可以进一步降低广播的整体平均功耗。
经过查看文档及调试,发现他进入低功耗的原理是在APP IDLE时进入低功耗,真正进入低功耗后阻塞在一段汇编代码中。
PD0模式注意点:
1.手册说PD0可以通过蓝牙事件唤醒,包括广播、连接等事件。低功耗广播时,系统是周期性的被唤醒的,在发广播包时被唤醒。但是一般的应用其实是只想蓝牙连接时唤醒,所以在广播时,不能跑其他业务逻辑。
这个问题其他有的厂家的SOC是这样设计的:广播不会唤醒,只有蓝牙连接时才唤醒,即广播时程序不会唤醒跑自己写的业务,这样我们在开发时更简单一些,无需在广播时把自己的业务干掉。

2.若只想低功耗广播,则不能开启低功耗软定时器,因为这个定时器是使用RTC实现的,RTC会唤醒系统。

3.退出低功耗时需要这样禁止设备再进入低功耗:

//               PWR_PreventEnterLowPower(true);  //调用这个会增加功耗
                PWR_DisallowDeviceToSleep();      //不调用这个会不停的进入低功耗,导致app不能正常运行

(这里看到他函数命名的意思的低功耗 != 休眠? 有待考察)

使能空闲时低功耗:

//进入PDO或PD1
void Enter_PD(uint8_t PDmode)
{
    switch(PDmode)
    {

        case 0: 
                PWR_ChangeDeepSleepMode(3); //Allow PD0
                PWR_AllowDeviceToSleep();
                PWR_PreventEnterLowPower(false);

            break;
        case 1:
                PWR_ChangeDeepSleepMode(4); //Allow PD1
                PWR_AllowDeviceToSleep();
                PWR_PreventEnterLowPower(false);
            break;

    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值