芯科BG22学习笔记:11-如何实现低功耗beacon
实验目的:实现低功耗beacon广播
实验环境:Simplicity Studio V5
实验器材:Wireless Starter Kit Mainboard (BRD4002A Rev B06) + EFR32xG22 2.4 GHz 6 dBm QFN40 Radio Board (BRD4182A)
实验开始:
1. 新建工程,蓝牙工程输入soc empty
2. 修改app.c文件中sl_bt_on_event函数如下:
第一步:修改发射功率,BG22的发射功率是可调的,有两种PA模式,分别最大支持0dBm和6dBm的发射功率;
通过添加下面的语句将蓝牙广播TX Power设置为0dBm:
1 //设置发射功率 2 int16_t set_power; 3 sc = sl_bt_advertiser_set_tx_power(advertising_set_handle,0, &set_power); 4 app_assert_status(sc);
第二步:蓝牙广播通常在37,38和39这三个通道上进行广播,可以通过减少广播的通道数来降低功耗;
通过添加下面的语句将蓝牙广播设置为只在37通道广播信息:
1 //设置仅37通道广播 2 sc = sl_bt_advertiser_set_channel_map(advertising_set_handle,1); 3 app_assert_status(sc);
第三步:蓝牙SIG组织定义广播间隔为20ms到40.96秒之间,可以通过增大广播间隔来降低功耗;
通过修改参数160为1600,将广播间隔由100ms修改为1s:
1 // 广播间隔设置为1000ms,160改成1600 2 sc = sl_bt_advertiser_set_timing(advertising_set_handle, 3 1600, // min. adv. interval (milliseconds * 1.6) 4 1600, // max. adv. interval (milliseconds * 1.6) 5 0, // adv. duration 6 0); // max. num. adv. events 7 app_assert_status(sc);
第四步:将可连接广播修改为不可连接:
1 // 开始广播且广播不可连接 2 sc = sl_bt_legacy_advertiser_start(advertising_set_handle,sl_bt_legacy_advertiser_non_connectable); 3 app_assert_status(sc);
3. 修改完后保存并编译、烧录,打开Tools中的Energy Profiler查看电流消耗:
注意:
如果出现无法进入EM2,确保是否安装了某些插件,导致系统被限制进入EM2。譬如添加了串口组件,需要将限制关闭: