BLE中LL层的跳频机制
BLE中LL层的跳频机制
介绍
为了保证通信的抗干扰性,在BLE LL层中设计了一个跳频机制。一般而言,在BLE中跳频只针对连接事件,而广播事件(周期性广播除外)是固定在37,38,39三个信道上发送的。另外BLE和传统BT的跳频机制是有所区别的,这里我们只针对SPEC中BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 6, Part B 4.5.8 Data and periodic physical channel index selection章节相关内容进行分析。
信道分类
在连接建立时,主设备应该扫描好BLE的37个连接信道,然后根据其空闲程度将其划分为可用信道和不可用信道两个类别。并形成一张Channel Map,由主机发给从机。随后双方根据特定算法,每次进行连接事件时选择Channel Map上其中一个可用信道进行通信。由于每次进行连接事件的信道频率都有所不同,所以这种机制又叫跳频。
信道选择算法1
基本流程
基本算法如下:
其中\(f_{n}\)为本次使用的信道,初值为0;\(f_{n+1}\)为下一次的使用的信道;\(hop\)为跳频阶跃值,取值为5-16;%为取模符号。
流程如下:
- 主机随机选择一个hop值,随后以\(fn\)初值为0开始计算\(f_{n+1}\)。
- 检查Channel Map,如果\(f_{n+1}\)为可用信道,则下次连接事件直接在该信道进行。
- 如果\(f_{n+1}\)为不可用信道,则按如下算法重新计算:
其中,\(f_{n+1}\)为前面算出来为不可用信道,\(f_{new}\)为Channel Map中可用信道的序号(升序),\(N\)为Channel Map中的可用信道的数量;
示例
示例一:
- 设\(fn\)=10, \(hop\)=8, 信道地图中的可用信道=[7, 8, 9,18, 21, 22, 23, 31, 32];
- \(f_{n+1}\)=(10+8) % 37=18, 因为18是可用信道,直接使用;
- 则下一次使用18信道作为连接事件使用的信道;
示例二,这里我们把18设为不可用信道:
- 设\(fn\)=10, \(hop\)=8, 信道地图中的可用信道=[7, 8, 9,17, 21, 22, 23, 31, 32];
- \(f_{n+1}\)=(10+8) % 37=18, 因为18不是是可用信道,需要重新计算;
- \(f_{new}\)=18 mod 9 (可用信道数) = 0, 则\(f_{new}\)= 0。
- 下一次连接事件使用可用信道列表中,序号为0的信道。即第一点中的7信道(物理信道从低到高,升序)。
信道选择算法2
算法二比算法一要更复杂,但性能更好。算法二的跳频随机性更好,能保证整个信道频谱能量更分散,发射功率谱密度更低。能更好的满足各国无线电法规中的发送功率要求。另外算法一只能用于连接事件,而算法二除了连接事件,还可以用与扩展广播。
基本流程:
算法二和一的基本思路一致。但在算法二中,跳频阶跃值\(hop\)不是选中后就固定不变的,而是会在每次的连接事件中通过伪随机算法重新计算。
这里可以分为两个步骤:
- 得到随机跳频阶跃值\(prn\_e\)
- 用\(prn\_e\)算出新的跳频信道\(unmappedChannel\)
- 如果新的跳频信道不属于可用信道,用\(prn\_e\)参数重新计算\(unmappedChannel\)
生成\(prn\_e\)
这里的\(prn\_e\)最复杂,整体的计算方法如下:
其中:
- \(counter\):当前信道值
- \(channelidentifier\):Access Address的高16bit和低16bit进行XOR运算
而上述框图中:
- XOR:代表异或操作
- MAM代表如下算法操作
- PERM代表如下算法操作
上述过程比较复杂,就不具体说明了。
生成\(unmappedChannel\)
在前面算出随机数\(prn_e\)后,再利用其算出下一次要跳频到的信道\(unmappedChannel\)。这里如果\(unmappedChannel\)属于可用信道,则直接使用。
如果不属于可用信道,则重新计算。
重新计算\(unmappedChannel\)
这里重新计算的方法和算法一类似,不再赘述。
示例
算法二的计算比较繁琐。这里我用ellisys自带的计算工具来演示:
这里先随便抓一包,随便得到一个access address。
然后打开计算器,设置下channel map,把刚刚抓到的access address复制进去,初始值counter我们默认为0好了。
随后计算器就算出来,0-4的连接事件会在哪信道上进行。