ble:连接流程中,平均电流的影响参数都有哪些
ble-mcu中,都是以平均电流来计算功耗的,我现在想知道ble的整个连接流程中,平均电流的影响参数都有哪些;
那我们得先知道平均电流是啥,然后得知道连接流程是咋样的,以及连接流程中都需要设置哪些参数?
1 平均电流

电流: 单位时间内通过的电荷量,单位A,mA;
平均电流:工作周期内,各个离散电流的电荷量累加后,对工作周期取平均值;单位A,mA;
电池容量:电池能输出的总电荷量;单位C,Ah,mAh;
电池时间:电池容量 / 平均电流;
eg:假设广播平均电流30uA =0.03mA,电池时间h = 电池容量38mAh/0.03mA = 1266h;
ps:为什么电流定义不关注横截面呢?
比如一段管子<粗细粗>,当电荷在细的地方通过慢时电场瞬间改变;所以粗的地方的电荷量也就变一致;横截面不影响电荷量;
ps:在A,mA的电流单位中已经包含了时间"每秒";
**************
2 ble连接流程
对于slave而言,就是advertising >> slave role connection >> idle;
对于master而言,就是scanning >> initiating >> master role connection >> idle;
其中在telink-sdk中,只有advertising, slave role connection有低功耗处理,idle可以调用api低功耗处理,其他状态下没有低功耗处理;

3 advertising/scanning state
我们先看下广播和扫描的操作是咋样的?概括来说就是间隔周期,间隔周期内的持续时间,持续时间内的射频电路开启的消耗;

3.1 广播参数
| 参数名称 | 协议层级 | 典型取值范围 | 功耗影响 | 影响说明 |
|---|---|---|---|---|
| TX Power | RF | -40 dBm ~ +10 dBm >>3db,0db | 大 | 发射功率越高,瞬时电流越大 |
| Advertising Interval | LL | 20 ms ~ 10.24 s >>30ms,50ms | 大 | 间隔越短,广播次数越多,TX 射频开启次数增加 |
| Advertising Event Length | PHY | 几百 µs ~ 1 ms+ | 大 | 单次广播事件持续时间,数据是从GAP>>LL>>PHY的, |
| Primary PHY | PHY |
1M PHY / 2M PHY / Coded PHY:S=2,S=8 |
\ |
ADV默认1M,LL建连后交换PHY mask看mcu是否切2M; 1M/2M的射频参数没区别,2M速率快时间短 1MPHY:1byte =8us, 2MPHY:1byte=4us |
| Filter Policy | LL | Allow Any / White List | 不过滤,每个req设备都会回包,还是过滤下; | |
| Advertising Type | LL |
ADV_IND / ADV_NONCONN_IND / ADV_SCAN_IND / ADV_DIRECT_IND |
可连接可扫描广播会触发额外交互 |
|
| Directed Advertising | LL | 高速直连 | 高频率短间隔,极高瞬时功耗(特定用法) | |
| Advertising Channel Map | PHY | ch37/38/39 | 默认 3 个信道,减少信道数可略微降功耗 | |
| Advertising Data Length | GAP | 0 ~ 31 bytes | 数据越长,TX 时间越长 | |
| Scan Response Data Length | GAP | 0 ~ 31 bytes | 被扫描时才发送,但增加整体平均功耗 |
3.2 扫描参数
| 参数名称 | 协议层级 | 典型取值 | 功耗影响 | 影响说明 |
|---|---|---|---|---|
| Scan Interval | LL | 2.5 ms ~ 10.24 s | 大 | 扫描周期 |
| Scan Window | LL | ≤ Scan Interval | 大 | 扫描周期内的射频时间 |
| Scan Type | LL | Passive / Active | \ | Passive不要发送 Scan Request |
| Scan PHY | PHY | 1M / Coded | Coded PHY 接收时间更长 | |
| Channel Map | PHY | ch37/38/39 | 通常设置不了 | |
| Duplicate Filtering | LL | Enable / Disable | 减少无效处理 | |
| Scan Filter Policy | LL | Allow Any / White List | 减少无效接收 | |
| Extended Scanning | LL | Legacy / Extended | 扩展包更长 |
3.3 代码配置
blc_ll_setAdvData( (u8 *)tbl_advData, sizeof(tbl_advData) );
blc_ll_setScanRspData( (u8 *)tbl_scanRsp, sizeof(tbl_scanRsp));
blc_ll_setAdvParam(ADV_INTERVAL_50MS, ADV_INTERVAL_50MS, ADV_TYPE_CONNECTABLE_UNDIRECTED, OWN_ADDRESS_PUBLIC, 0, NULL, BLT_ENABLE_ADV_ALL, ADV_FP_NONE);
blc_ll_setAdvEnable(BLC_ADV_ENABLE); //ADV enable
blc_ll_setScanParameter(SCAN_TYPE_PASSIVE, SCAN_INTERVAL_100MS, SCAN_WINDOW_50MS, OWN_ADDRESS_PUBLIC, SCAN_FP_ALLOW_ADV_ANY);
blc_ll_setScanEnable (BLC_SCAN_ENABLE, DUP_FILTER_DISABLE);
rf_set_power_level_index (RF_POWER_P3dBm);
3.4 典型值
Online Power Profiler for Bluetooth LE - opp - Online Power Profiler - Nordic DevZone >> nordic在线计算平均电流,有帮助;
TX假设广播间隔30ms,16字节,0dBm >> 100ms大约0.03mA;
RX根据TX估测可知 扫描占空比50% >> 每秒2.7mA;
RX虽然不向外发射信息,可是RX在工作的时候射频前端也需要开着,所以RX和TX工作时的平均电流接近,RX时间长所以功耗高;
4 connection state
| 参数名称 | 协议层级 | 典型取值 | 功耗影响 | 说明 |
|---|---|---|---|---|
| Connection Interval | LL | 7.5 ms ~ 4 s | 极大 |
主从设备之间连接事件的周期,单位 1.25ms;间隔越长,平均功耗越低 master放入 CONNECT_IND 指令中,双方必须采用 |
| Slave Latency | LL | 0 ~ 499 | 大 |
Slave 允许跳过响应的 event master放入 CONNECT_IND 指令中,Slave必须采用 |
| Supervision Timeout | LL | 100 ms ~ 32 s | 间接 |
监督超时,超时未收到数据包则断开连接,影响最长休眠时间 master放入 CONNECT_IND 指令中,双方必须采用 |
| Connection Event Length | LL | 几百 µs ~ 数 ms | 大 |
单次连接事件包持续时间 LL-PDU为一个空中包数据,CEL为第一包LL-PDU到最后一包LL-PDU的持续时间 |
对于master而言,需要参加每个connection event,没有slave lantency;在每个connection interval间隔内,master有数据的话就发数据包,没有数据就发个空包;
ble_sts_t blc_ll_createConnection( scan_inter_t scanInter, scan_wind_t scanWindow, init_fp_t fp, u8 peerAdrType, u8 *peerAddr, own_addr_type_t ownAdrType,
conn_inter_t conn_min, conn_inter_t conn_max, u16 conn_latency, conn_tm_t timeout, u16 ce_min, u16 ce_max );
u8 status = blc_ll_createConnection( SCAN_INTERVAL_100MS, SCAN_WINDOW_100MS, INITIATE_FP_ADV_SPECIFY, pa->adr_type, pa->mac, OWN_ADDRESS_PUBLIC, \
CONN_INTERVAL_31P25MS, CONN_INTERVAL_48P75MS, 0, CONN_TIMEOUT_4S, 0, 0xFFFF);
5 idle state
对于telink的低功耗有3种模式
| 选项\睡眠模式 | suspend | deep sleep retetion | deep sleep |
|---|---|---|---|
| SRAM | 保留 | 只保留first 16K/32K | 丢失 |
| digital register | 保留 | 丢失 | 丢失 |
| analog register | 保留 | 丢失 | 丢失 |
| 电流 | 60-70uA | 2-3uA | < 1uA |
| BLE状态 | 连接 | 断开 | 断开 |
| 对应日常 |
工作时的休眠态 |
BLE长睡眠后重新连接 只有PM硬件模块维持工作 |
设备断电, 如果flash电流流出可能测到1-2uA电流 |
6 设备连接
6.1 l指拨
6.1.1 指拨 >> 手机 >> 头盔
1 指拨按键 >> 触发开机自动广播30s
2 打开手机app >> 连接装备 >> 自动扫描蓝牙 >> 连接指拨
3 打开头盔 >> 自动连接手机 >> 此时指拨会断开自动重新头盔,或按键触发自动重连头盔
4 断开头盔 >> 指拨断连
6.1.2 指拨 >> 头盔 >> 手机
1 按键指拨 >> 触发开机自动广播15s
2 打开头盔 >> 后台自动扫描连接 >> 连接指拨
3 打开手机 >> 自动连接头盔和指拨的数据
4 断开手机 >> 头盔和指拨还是自动保持连接
6.1.3
指拨 + 手机+头盔 时,指拨优先连接头盔,指拨控制手机的操作应该是通过头盔转发的;
指拨 + 手机 时,指拨控制手机的操作应该是通过手机app去调用的;
指拨与设备连接后将会始终保持连接,直到手机app或头盔断开;
指拨参数:广播时长30s;加密方式应该为标准加密的pin码加密,pin码通过指令在app中传输给指拨;
头盔参数:头盔后台始终扫描;
l-手机app连接,app关闭后重新打开,app不会自动重连指拨;
6.2 d指拨
1 打开指拨 >> 自动广播15s
2 码表开机 >> 后台自动扫描连接
码表与指拨建立连接后将始终保持连接,直到码表关机
指拨参数:广播时长15s,发射功率4dB,加密方式大概为额外加了校验指令的加密方式,第三方设备不允许绑定;
6.3 连接参数Interval
由上可知平均电流主要由连接参数决定,所以在此把几个连接参数给列出来
作为保持连接的空包,有26bytes;lRemote的ATT-payload为8bytes,空中包34bytes
l_helmet + remote >> Interval: 50 (62.5 msec) + Latency: 0 + Timeout: 400 (4000 msec);
l_app + remote >> Interval: 40 (50 msec) + Latency: 0 + Timeout: 500 (5000 msec);
l_app + l_helmet >>
d_码表 +dRemote >> 初始化时 Interval: 40 (50 msec) + Latency: 0 + Timeout: 400 (4000 msec);
>> sdp后更新 Interval: 40 (50 msec) + Latency: 33 + Timeout: 510 (5100 msec);

浙公网安备 33010602011771号