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
基本流程
基本算法如下:
其中
流程如下:
- 主机随机选择一个hop值,随后以
初值为0开始计算 。 - 检查Channel Map,如果
为可用信道,则下次连接事件直接在该信道进行。 - 如果
为不可用信道,则按如下算法重新计算:
其中,
示例
示例一:
- 设
=10, =8, 信道地图中的可用信道=[7, 8, 9,18, 21, 22, 23, 31, 32]; =(10+8) % 37=18, 因为18是可用信道,直接使用;- 则下一次使用18信道作为连接事件使用的信道;
示例二,这里我们把18设为不可用信道:
- 设
=10, =8, 信道地图中的可用信道=[7, 8, 9,17, 21, 22, 23, 31, 32]; =(10+8) % 37=18, 因为18不是是可用信道,需要重新计算; =18 mod 9 (可用信道数) = 0, 则 = 0。- 下一次连接事件使用可用信道列表中,序号为0的信道。即第一点中的7信道(物理信道从低到高,升序)。
信道选择算法2
算法二比算法一要更复杂,但性能更好。算法二的跳频随机性更好,能保证整个信道频谱能量更分散,发射功率谱密度更低。能更好的满足各国无线电法规中的发送功率要求。另外算法一只能用于连接事件,而算法二除了连接事件,还可以用与扩展广播。
基本流程:
算法二和一的基本思路一致。但在算法二中,跳频阶跃值
这里可以分为两个步骤:
- 得到随机跳频阶跃值
- 用
算出新的跳频信道 - 如果新的跳频信道不属于可用信道,用
参数重新计算
生成
这里的
其中:
:当前信道值 :Access Address的高16bit和低16bit进行XOR运算
而上述框图中:
- XOR:代表异或操作
- MAM代表如下算法操作
- PERM代表如下算法操作
上述过程比较复杂,就不具体说明了。
生成
在前面算出随机数
如果不属于可用信道,则重新计算。
重新计算
这里重新计算的方法和算法一类似,不再赘述。
示例
算法二的计算比较繁琐。这里我用ellisys自带的计算工具来演示:
这里先随便抓一包,随便得到一个access address。
然后打开计算器,设置下channel map,把刚刚抓到的access address复制进去,初始值counter我们默认为0好了。
随后计算器就算出来,0-4的连接事件会在哪信道上进行。
总结
通过跳频机制,BLE可以有效降低碰撞几率。但要注意,这只是降低,而不是完全消除。实际情况中,BLE连接信道通信前是不会做的CCA信道监听的。一旦环境中蓝牙或者是2.4G设备多了,碰撞几率还是会大大发生,这里就需要到LL层中另外的一套重传机制了。当碰撞发生后,数据会出现乱码丢包,设备会自行跳到下一个可用信道进行重传。要是新的可用新的又碰撞,那就再跳。直到重传成功,或者跳的次数超过了连接参数中的latency和timeout指标,这时候就会判定为设备断连。
通过这样的一套跳频和重传机制,BLE能保证连接事件中数据要么成功发送对端,要么就直接断连。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现