【蓝牙】跳频算法实例分析

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


Post Reply
User avatar
逻辑的院子
Posts: 274
Contact:

抓包工具:frontline

跳频计算公式:F(n+1) = (F(n) + hop) % 37

其中:
F(n+1)为下一个连接事件使用的信道;
F(n)为当前连接事件使用的信道;
hop为跳频数,取值范围[516],由主机在发起连接的时候决定(CONNECT_IND);

公式在代码中可以简化为:
若 F(n) + hop < 37,则 F(n+1) = F(n) + hop
若 F(n) + hop > 37,则 F(n+1) = F(n) + hop - 37

CONNECT_IND(连接请求包)

连接请求包中包含公式中提到的hop值
连接请求包中包含当前可使用的Channel Map图,该Map图中所有信道都可用
Channel Map共5个字节,每个bit表示一个信道,包含广播信道(没有实际含义)

CONNECT_IND.png

Connect Event(连接事件)

ch默认值为0,由“CONNECT_IND”可知,hop = 10,代入公式:
F(n+1) = (F(n) + hop) % 37 = (0+10)%37 = 10
所以,第一个连接事件发生在ch10

Connect Event.png

CHANNEL_MAP_IND(信道更新)

由“CONNECT_IND”可知,hop = 10
由Channel Map可知,好信道数为29个,坏信道数为8个
由connInstant可知,Event Counter为0x007c的时候需要应用该Channel Map
好信道映射到数组map[29]中为:

Code: Select all

map[0] = ch0;
map[1] = ch9;
map[2] = ch10;
map[3] = ch11;
map[4] = ch12;
map[5] = ch13;
...

代入公式

Code: Select all

ch10 = ch29 + 10 - 37  = ch2, ch2是坏信道,需要重映射:2%29 = 2,所以map[2] = ch10
ch12 = ch2 + 10          = ch12,ch12是好信道
ch22 = ch12 + 10        = ch22,ch22是好信道
ch32 = ch22 + 10        = ch32,ch32是好信道
ch13 = ch32 + 10 - 37 = ch5,ch5是坏信道,需要重映射:5%29 = 5,所以map[5] = ch13
ch15 = ch5 + 10         = ch15,ch15是好信道

重映射:坏信道对好信道的总数N进行取余

LL_CHANNEL_MAP_IND.png

Tags:
Licco
Posts: 36

Re: 【技术干货】【蓝牙】跳频算法实例分析

专业,学习了 :mrgreen:



Last bumped by 逻辑的院子 on 2022年 Oct 19日 10:32.
我喜欢灌水,但不是水货 :idea:
Post Reply