时间:2025-11-04 08:28
人气:
作者:admin
liwen01 2025.10.02
WiFi、蓝牙都是使用无线电进行数据交互,但是无线电是不可靠的传输,它会反射、散射、折射、衍射还会相互干涉。从用户的体验来看,就是无线信号强度变弱,连接中断、掉线、音频卡顿、失真、配对困难、传输速率下降等。
为解决无线通信中的各种问题,蓝牙模块在物理层、链路层、软件协议栈上都做了些不同的处理,使不可靠的无线传输逐渐地变为可靠的数据传输。
无线信号通信中的不可靠性,一部分源自于无线信号衰减、干扰,另一部分源自于无线数据的数据安全。
信号从发射端传播到接收端过程中,强度逐渐减弱的现象称为信号衰减,衰减的原因有:
(a)自由空间路径损耗
路径损耗是指电磁波从发射天线传播到接收天线的过程中,信号强度的衰减。
即使在没有障碍物、没有反射、没有散射的理想环境中,信号也会衰减,这种损耗就叫自由空间路径损耗。
(b)穿透损耗
穿透损耗是指电磁波在穿过某种物体(例如墙壁、窗户、门、地板等)时,由于能量的吸收、反射、散射和折射等作用,导致信号强度降低的现象。
常见的如在拥挤的地铁上,手机放在口袋中,无线耳机有时就会出现断断续续的情况,主要原因是因为无线电穿透人体后信号强度降低了,导致数据接收不稳定。
(c)多径损耗
在无线电波传播过程中,信号不仅会沿着直线路径从发射端传到接收端,还可能被周围的物体(如建筑物、墙壁、地面等)反射、折射、散射或绕射,形成多个路径同时到达接收端的现象,这就叫做多径传播(Multipath Propagation)。
而由于这些路径的长度不同、到达时间不同、相位不同,它们在接收端会叠加,有时候会相互增强,有时候却会相互抵消,产生信号的波动,这种现象造成的信号衰减就称为 多径损耗(Multipath Loss)
这也叫电磁波的干涉
上图中两个波 f(x) 与 g(x) 它们相互干涉形成了紫色的波 f(x)+g(x),改变 g(x) 的相位,可以看到相干波峰值被加倍或者被抵消为 0。在无线电信号中表示信号增强和衰减
(d)噪声干扰
蓝牙标准使用的是2.4 GHz ISM(Industrial, Scientific and Medical)频段。 这个频段是与Wi-Fi(2.4GHz)重合的。
除了WiFi,还有微波炉、ZigBee、LoRa、等各种设备都是运行在该频段,它们间相互干扰,对于蓝牙而言,就容易出现上面提到的:连接中断、掉线、音频卡顿、失真、配对困难、传输速率下降等问题。
(e)天线方向性与增益
方向性描述了天线把能量集中到某个方向的能力。
全向天线:像一个灯泡,360° 辐射,适合覆盖大范围但距离较近的区域
定向天线:像手电筒,能量集中在一个方向,适合远距离通信
天线增益(Antenna Gain)表示天线将电磁能量聚焦到某个方向的能力,用来衡量信号强度的提升程度,通常单位是 dBi(相对于理想全向天线的增益)。
增益越高 → 信号在特定方向上越强 → 能传播得更远。
不同国家地区对电磁辐射的要求不一样,所以也不能简单粗暴地通过提升增益来提高信号。
(a)配对与身份验证安全
主要体现在配对过程易受攻击
(b)加密与隐私问题
加密强度不足
(C)协议层漏洞
蓝牙协议栈实现复杂,容易被发现安全漏洞。例如:
为了解决无线网络的不可靠问题,蓝牙对信号进行了调制处理,在链路层将数据进行进一步的封装,然后再对数据进行加密、白化、FEC编码等操作,使蓝牙无线信号逐渐地变为可靠的数据传输方式。
无线信道(天线发射、接收)只能处理模拟信号,也就是连续变化的波(电磁波)。
调制的本质是把数字数据“转换”成可以在无线信道中传输的波形,比如频率、相位、幅度的变化。
对无线信号进行调制,是为了能高效、可靠地通过无线信道传输数据。
在蓝牙设备中,不同工作模式下的调试方式都不一样。
| 模式 | 调制方式 | 速率 | 备注 |
|---|---|---|---|
| BR | GFSK | 1 Mbps | 最基础的蓝牙模式 |
| EDR | π/4-DQPSK, 8DPSK | 2 / 3 Mbps | 提升数据速率的经典蓝牙模式 |
| BLE 1M | GFSK | 1 Mbps | BLE 默认模式,低功耗 |
| BLE 2M | GFSK | 2 Mbps | BLE 高速模式 |
| BLE Coded | GFSK + FEC 编码 | 125/500 kbps | BLE 长距离模式(低速高可靠) |
使用场景:BR、LE 1M/2M PHY
特点:
使用它的原因:
使用场景:EDR(2 Mbps)
特点:
使用它的原因:
使用场景:EDR(3 Mbps)
特点:
使用它的原因:
使用场景:LE Long Range(远程模式,1M PHY编码)
调制:GFSK + FEC(前向纠错)
特点:
使用它的原因:
这里介绍的是蓝牙链路层的数据包格式,其中BR与EDR链路层数据包格式是相似的,但它们与 BLE 在链路层的数据包格式却差异很大
(a)Access Code(接入码)
所有蓝牙数据包的开头都有一个接入码。这个码由主设备分配,是从设备同步和识别主设备的关键部分。接收端通过匹配 Access Code 来判断该包是否是发送给自己的。
Access Code 的长度为 72 bit,主要作用是:
(b)Header(包头)
包头携带的是控制信息,该控制信息控制着链路层的逻辑和通信协议流程,并且为了增加可靠性,会进行 3 次重复发送 + 多比特纠错。
总长度是 54 bit ,是由 18bit 的信息重复 3 次构成。
包含字段有:
(c)Payload(负载)
负载中包含实际的数据内容。不同的 BR 包类型支持不同长度的 Payload(如 DM1、DH1、DM3、DH3、DM5、DH5),总的长度范围是0 ~ 2745 bit
主要结构有:
(d)调制方式
在 BR 数据包中,所有的字段和数据都是使用 GFSK 调制方式。
EDR 链路层数据包中包含了 6 个组成部分,使用了两种不同的调制模式。
(a)Access Code(接入码) 与 Header(头部)
BR 与 EDR 在Access Code(接入码) 与 Header(头部) 部分是完全相同的。
它们使用相同的数据结构,以及它们都是采用 GFSK 调制方式。
(b)Guard(保护间隔)
Guard 是 EDR 独有的部分,因为 EDR 使用两种调制模式。
EDR 数据部分使用 DPSK(差分相移键控)调制,而前面的部分用的是 GFSK(高斯频移键控),中间需要一点间隔时间(guard time)切换调制方式,避免误码。
Guard 的作用就是为后续使用不同调制方式的部分做准备,避免调制冲突。
(c)Sync(同步)
Sync(同步)的作用是为了接收端的解调器可以正确解码 DPSK 信号。
Sync 字段有特定比特图案,帮助接收端锁定时钟与相位,对准 DPSK 调制的起始点。
(d)Enhanced Data Rate Payload(增强速率载荷)
该部分是承载实际数据内容的部分。
它使用 π/4-DQPSK 或 8DPSK 调制技术,以更高的速率(2 Mbps 或 3 Mbps)传输数据,相比基本速率的 GFSK 更快。
(e)Trailer(结尾段)
Trailer 是 EDR 数据包中用于“优雅地收尾”DPSK 调制段的符号填充区,确保收发双方同步、调制状态切换顺畅,并不承载实际业务数据。
它的具体符号由控制逻辑决定,长度也不是固定的。
| 对比项 | BR | EDR |
|---|---|---|
| 调制方式 | 全程 GFSK | GFSK(前导)+ DPSK(数据) |
| 数据率 | 1 Mbps | 2 Mbps 或 3 Mbps |
| 结构复杂度 | 简单 | 复杂(多字段用于调制转换) |
| 新增字段 | 无 | Guard、Sync、Trailer |
| 应用 | 基本数据传输、语音 | 高速音频、更快文件传输 |
因为 EDR 对带宽的要求比较高,所以在一个数据包中,它使用了两种调制方式。
为了两种调制方式能更好地同步,所以新增加了Guard、Sync、Trailer 字段。
整体而言,BR 与 EDR 在链路层中的数据包格式是相似的。
这是 蓝牙5.0及以上在低功耗通信中引入的一种编码方式,用于扩展通信距离(Long Range 功能)。
它使用前向纠错(FEC)和编码因子 S=2 或 S=8 进行低速率的高可靠通信。
BLE 整个数据包可分为两个部分:
(a)Preamble(前导码)
用于接收端的频率同步和位同步,固定长度为10bit(1010101010),编码后为80 µs,它固定使用 S=8 编码 。
它主要用于无线同步,帮助接收端完成:自动增益控制(AGC)、解调器定时同步、滤波器稳定。
(b)Access Address(接入地址)
长度为 32 bits,编码后为 256 µs 。 每个连接事件中唯一的 32 bit地址。
同时,也用于标识连接和广播事件,如果是广播,通常固定为:0x8E89BED6(广播包)
(c)CI(Coding Indicator)
长度为 2 bits(编码后 16 µs)
作用:
S=2 → 高速传输;S=8 → 高可靠传输(更适合远距离或低信噪比)。(d)TERM1(终止字段1)
长度为 3 bits,编码后 24 µs
作用是:FEC Block 1 的结尾标记,用于接收端同步恢复。
(e)PDU(Protocol Data Unit)
该部分为链路层实际的数据,长度为:1~255 Byte
(f)CRC(循环冗余校验)
CRC 是用作链路层校验,长度为 24 bits,编码后为 24 × S µs
CRC 确保 PDU 数据的完整性。
(g)TERM2(终止字段2)
长度为:3 bits(编码后为 3 × S µs) 它是FEC Block 2 的结尾标志
| 项目 | BLE | EDR |
|---|---|---|
| 用途定位 | 低功耗、低速、远距离通信(如IoT、穿戴设备) | 面向高速数据传输(如音频、文件传输) |
| 调制方式 | GFSK + FEC(S=2或S=8) | GFSK(前导段) + π/4-DQPSK or 8DPSK(有效载荷段) |
| FEC | FEC Block 1 和 Block 2 | 不支持FEC,依靠ARQ重传机制 |
| 同步机制 | 使用 Preamble + Access Address + Coding Indicator + TERM | 使用 Access Code 进行同步 |
| 速率 | 较低,S=8时只有 ~125 kbps,S=2时为 ~500 kbps | 2 Mbps(π/4-DQPSK)或 3 Mbps(8DPSK) |
| 复杂度 | 结构复杂,字段多、时序明确,适配纠错和冗余 | 结构较简单,强调速率优先 |
| 适用场景 | IoT、低功耗传感器、BLE广播、远距离设备通信 | 蓝牙耳机、音频传输、大文件传输 |
| 控制字段 | 有 CI(Coding Indicator)指示调制编码 | 无明确调制指示字段 |
| 数据段 | 属于 FEC Block 2,编码后传输 | 直接使用DPSK调制方式传输 |
在上面链路层数据包格式中,我们看到 BR 与 EDR 的包格式是相似的,它们的数据处理流程也是相似。
它们都有 HEADER 和 PAYLOAD 部分,在数据处理流程中,这两部分又存在差异。
Header 从生成到被接受被解析,需要经过下面一个流程:
TX header → HEC generation → whitening → FEC encoding → RF interface(发送)
→ RF interface(接收)→ decoding → de-whitening → HEC checking → RX header
(a)HEC generation(Header Error Check 生成)
在蓝牙 BR/EDR 模式中,链路层包头是18 bit(3字节中的前18位),蓝牙协议为其添加 8 bit的 HEC 校验码,用于 检测头部是否在传输过程中出现比特错误。
HEC generation 的目的:
HEC 有专门的生成算法,对于接收方,接到 Header 后按算法校验即可。
(b) Whitening(数据白化)与 de-whitening
Whitening 是一种数据随机化处理技术,目的是避免数据中出现长时间的 0 或 1 序列,以改善频谱分布、降低误码率,提高抗干扰能力。
数据白化的目的:
减少长时间不变的比特模式(如 00000 或 11111):
改善频谱平坦性:
避免信道的系统性偏差被数据“触发”:
Whitening 的工作原理:
发送端:蓝牙使用 线性反馈移位寄存器(LFSR) 生成伪随机序列,并将其与原始数据进行 按位异或(XOR),从而达到扰动的目的。
接收端:只需要使用相同的 LFSR 初始化参数,对接收到的数据再次 XOR,即可恢复原始数据(de-whitening)。
数据经过白化之后,也就不会存在多个连续的 0 或是多个连续的 1 了。
(c)FEC encoding(前向纠错编码)
FEC(前向纠错编码)是一种在发送数据时添加冗余信息的技术,以便接收端即使在数据传输中出现部分比特错误,也可以检测并纠正错误,而不必请求重传。
在蓝牙 BR/EDR 模式中,FEC 主要用于增强链路的可靠性,特别是在噪声大、信号弱的环境下。
在 BR/EDR中, FEC encoding 的使用范围是:
| 数据部分 | 使用 FEC | 编码类型 |
|---|---|---|
| Access Code | 是 | 1/3 Rate FEC |
| Header | 是 | 1/3 Rate FEC |
| Payload | 可选 | 1/3 或 2/3 Rate FEC,或不使用 |
蓝牙支两种 FEC 编码方式:
具体编码细节这里不做介绍了,对应于接收端,它需要做的是解码。
(d)RF Interface(射频接口)
RF Interface(射频接口) 是蓝牙协议栈的物理层(PHY)部分,负责将经过编码和调制的数据转换为无线电信号(电磁波)进行无线传输,并在接收端完成反向过程。
RF Interface 发送端的主要任务有:
RF Interface 接收端的主要任务有:
RF Interface 还需要控制发送与接收模式的切换,蓝牙 RF 与 与WiFi 一样,都是半双工工作模式,不能同时收发数据,它们是时分复用的模式。
在 BR/EDR中,包头与负载数据的处理方式大致是相同的,但也存在差异。
在同一个数据包中,为啥要做两种不同的数据处理方式呢?这背后的设计逻辑是:
导航信息,必须保证极高的可靠性,因此强制使用 FEC 和 HEC,即便牺牲带宽。较大区别的是数据加密和CRC校验
(1)CRC → E0
先计算 CRC,再进行 E0 加密
加密流程
解密流程
优点:
缺点:无法抵御主动篡改攻击(bit flipping 攻击)
(1)AES-CCM → CRC
先加密数据,再计算 CRC
加密流程
解密流程
优点:更高的安全性、更强的抗篡改能力
缺点:计算开销较高
这里我们介绍的是BLE PDU(数据负载)部分的数据处理流。
BLE的PDU又因为数据是否使用FEC编码而区分为:BLE Uncoded PHYs 和 BLE coded PHYs
BLE Uncoded PHYs
BLE 使用的加密,就是上面介绍的AES-CCM → CRC,白化过程也相似,不同的是调制模式和 RF 模块 ,这部分前面也已有介绍。
数据加密部分,BLE 与 EDR 之间的区别:
| 对比项 | BLE | EDR |
|---|---|---|
| 加密算法 | AES-CCM(128-bit) | E0 stream cipher(40/56/128bie) |
| 密钥长度 | 固定 128 位(强安全性) | 最长 128 位,早期设备可能是 40 或 56 位 |
| 安全管理协议 | SMP(Security Manager Protocol) | HCI、LMP、Link Manager |
| 加密层级 | 仅加密 链路层 Payload | 加密整个 Baseband 层(基本带帧结构) |
| 加密启动时机 | 连接建立后,主设备发起加密请求 | 连接建立期间协商密钥,立即启用加密 |
| 抗攻击能力 | 强(AES 标准,使用随机数生成密钥) | 中等偏弱(E0 被认为不够强) |
| 防重放攻击 | 有(Nonce + Packet Counter) | 无明显防重放机制 |
| 是否支持认证 | 支持,使用配对和绑定机制 | 支持,使用 PIN 码等验证方式 |
AES-CCM 与 E0 加密的区别
| 特性 | AES-CCM | E0 |
|---|---|---|
| 标准 | NIST 标准对称加密算法 | 蓝牙自定义流密码 |
| 安全性 | 被广泛认为是安全的 | 已经被研究界攻击过多次 |
| 用途 | BLE / Zigbee / LoRa 等标准 | 仅用于蓝牙 EDR Baseband 层 |
BLE coded PHYs 与 BLE Uncoded PHYs 的区别是多加了FEC encoding 和 Pattern mapper 步骤。
(a)FEC encoding
LE Coded PHY 使用的是一种称为 (3,1) 确定性卷积码(deterministic convolutional code),也被称作 Rate 1/3 卷积编码。
核心特征:
(b)Pattern Mapper
Pattern Mapper 的目的是将 FEC 输出的比特流映射为更长的符号序列(spreading pattern)以增强信号可靠性。
Pattern Mapping 的规则:
这些符号不是新的信息位,而是用来占据无线信道,提高解码器从噪声中恢复原始比特的能力。
具体 Pattern Mapping 表:
蓝牙规范定义了一个固定的映射表:
| FEC 比特 | S=2 映射符号模式(2bit) | S=8 映射符号模式(8bit) |
|---|---|---|
| 0 | 01 |
00001111 |
| 1 | 10 |
11110000 |
对于 S=2:
0 ➜ 011 ➜ 10对于 S=8:
0 ➜ 000011111 ➜ 11110000蓝牙模块为了使不可靠的无线信号变为可靠的无线数据通信,在数据包、数据处理流程、信道、协议栈等等方面都做了很多处理。
这里主要介绍了蓝牙信号的干扰,链路层各模式下的数据包组成、数据处理流程,下一章我们将介绍蓝牙的传输层 HCI 。