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

基本流程

基本算法如下:

fn+1=(fn+hop)%37

其中fn为本次使用的信道,初值为0;fn+1为下一次的使用的信道;hop为跳频阶跃值,取值为5-16;%为取模符号。

流程如下:

  1. 主机随机选择一个hop值,随后以fn初值为0开始计算fn+1
  2. 检查Channel Map,如果fn+1为可用信道,则下次连接事件直接在该信道进行。
  3. 如果fn+1为不可用信道,则按如下算法重新计算:

fnew=fn+1%N

其中,fn+1为前面算出来为不可用信道,fnew为Channel Map中可用信道的序号(升序),N为Channel Map中的可用信道的数量;

示例

示例一:

  1. fn=10, hop=8, 信道地图中的可用信道=[7, 8, 9,18, 21, 22, 23, 31, 32];
  2. fn+1=(10+8) % 37=18, 因为18是可用信道,直接使用;
  3. 则下一次使用18信道作为连接事件使用的信道;

示例二,这里我们把18设为不可用信道:

  1. fn=10, hop=8, 信道地图中的可用信道=[7, 8, 9,17, 21, 22, 23, 31, 32];
  2. fn+1=(10+8) % 37=18, 因为18不是是可用信道,需要重新计算;
  3. fnew=18 mod 9 (可用信道数) = 0, 则fnew= 0。
  4. 下一次连接事件使用可用信道列表中,序号为0的信道。即第一点中的7信道(物理信道从低到高,升序)。

信道选择算法2

​ 算法二比算法一要更复杂,但性能更好。算法二的跳频随机性更好,能保证整个信道频谱能量更分散,发射功率谱密度更低。能更好的满足各国无线电法规中的发送功率要求。另外算法一只能用于连接事件,而算法二除了连接事件,还可以用与扩展广播。

基本流程:

​ 算法二和一的基本思路一致。但在算法二中,跳频阶跃值hop不是选中后就固定不变的,而是会在每次的连接事件中通过伪随机算法重新计算。

这里可以分为两个步骤:

  1. 得到随机跳频阶跃值prn_e
  2. prn_e算出新的跳频信道unmappedChannel
  3. 如果新的跳频信道不属于可用信道,用prn_e参数重新计算unmappedChannel

生成prn_e

这里的prn_e最复杂,整体的计算方法如下:

其中:

  • counter:当前信道值
  • channelidentifier:Access Address的高16bit和低16bit进行XOR运算

而上述框图中:

  • XOR:代表异或操作
  • MAM代表如下算法操作

  • PERM代表如下算法操作

上述过程比较复杂,就不具体说明了。

生成unmappedChannel

在前面算出随机数prne后,再利用其算出下一次要跳频到的信道unmappedChannel。这里如果unmappedChannel属于可用信道,则直接使用。

如果不属于可用信道,则重新计算。

重新计算unmappedChannel

这里重新计算的方法和算法一类似,不再赘述。

示例

算法二的计算比较繁琐。这里我用ellisys自带的计算工具来演示:

这里先随便抓一包,随便得到一个access address。

然后打开计算器,设置下channel map,把刚刚抓到的access address复制进去,初始值counter我们默认为0好了。

随后计算器就算出来,0-4的连接事件会在哪信道上进行。

总结

通过跳频机制,BLE可以有效降低碰撞几率。但要注意,这只是降低,而不是完全消除。实际情况中,BLE连接信道通信前是不会做的CCA信道监听的。一旦环境中蓝牙或者是2.4G设备多了,碰撞几率还是会大大发生,这里就需要到LL层中另外的一套重传机制了。当碰撞发生后,数据会出现乱码丢包,设备会自行跳到下一个可用信道进行重传。要是新的可用新的又碰撞,那就再跳。直到重传成功,或者跳的次数超过了连接参数中的latency和timeout指标,这时候就会判定为设备断连。
通过这样的一套跳频和重传机制,BLE能保证连接事件中数据要么成功发送对端,要么就直接断连。

posted on   不回本不改名  阅读(1457)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示