首先提出一个在蓝牙领域很重要的一个概念"BLE" 即 "Bluetooth Low Energy "我觉得这一块是非常需要和大家探讨一下,因为功耗这个问题是所有穿戴式设备都会面对的一个很核心的问题,关乎到用户的体验,同时也是一个产品长久发展的生命线,这其中的大道理大家都清楚,不说闲话。
接下来我将从两方面介绍解决这个问题。分别是硬件设计和嵌入式程序的编写和调试来分析
关键字:内部DC-DC稳压器
硬件:这部分重点是对芯片内部稳压器的选择,不同的稳压器( LDO , DC-DC )会造成不同的电路消耗
下面两种内部稳压器
- 内部LDO稳压器
- 内部DC-DC稳压器
LDO是系统默认的稳压器,而DC-DC稳压器可以作为LDO稳压器的替代品。与使用LDO稳压器相比,使用DC-DC稳压器具有更低的功耗,但是使用DC-DC稳压器需要连接外部LC滤波器
核心电路设计:直接上图
由于默认选择的是内部LDO稳压器,因此如果需要切换到内部的DC-DC稳压器,还需在软件中设置
- 在主函数main.c中,初始化softDevice协议栈前,执行NRF_POWER->DCDCEN=1 。或者在初始化softDevice协议栈后,执行sd_power_dcdc_mode_set(1) .
- 在sdk_config.h配置文件中勾选NRF_POWER_ENABLED 使能选项,同时把选项下的DC/DC使能选项NRFX_POWER_CONFIG_DEFAULT_DCDCEN进行勾选
关键字:GPIOTE
GPIOTE事件有两种模式:高精度模式 / 低精度模式
如果只是检测IO口电平,建议使用低精度模式,也就是所有的输入信号都使用一个中断申请,库函数在下面的地方要改为 false .
GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
关键字:进入idle模式
有sofeDevice协议栈:sd_app_evt_wait();
无sofeDevice进入idle模式的代码:
__WFE(); // Clear the internal event register. __SEV(); __WFE();
关键字:
项目需求对功耗的影响:
1:扫描处理消耗
扫描间隔设置
扫描窗口时间设置
扫描超时时间设置
2:广播处理消耗
广播的时间间隔(超时时间),超时后要做哪些处理
每个广播包的广播有效数据的字节数
持续广播还是定时广播
每个广播的处理时间