蓝牙BLE LongRange帧结构分析

BLE Long Range(也称为Coded PHY)是蓝牙5.0引入的新特性,它通过前向纠错(FEC)编码技术,显著提升了蓝牙的通信距离和可靠性。下面这个表格汇总了BLE Long Range帧的主要组成部分,你可以快速了解其核心结构:

组成部分长度 (Coded PHY)功能描述
前导码 (Preamble)80或80比特用于接收机的时间和频率同步。
编码指示符 (CI)2比特指示FEC Block 2使用的编码方案:01表示S=8,10表示S=2。
接入地址 (Access Address)256比特标识数据包身份。广播包固定为0x8E89BED6;数据包则为连接的随机值。
FEC Block 1 (包含PDU)-经过FEC编码(S=8)的数据块,承载核心的协议数据单元。
TERM13或11比特FEC Block 1的终止符。
FEC Block 2 (包含CRC)-编码方案由CI指示(S=2或S=8),包含CRC校验码。
TERM23或11比特FEC Block 2的终止符。

🔍 详解帧结构与数据关系

BLE Long Range的帧结构设计是其实现长距离和强抗干扰能力的关键。

  • 核心机制:前向纠错 (FEC):BLE Long Range通过降低物理层传输速率并加入冗余信息来实现更远的传输距离。接收端可以利用这些冗余信息自动检测并纠正传输过程中的错误,无需重传,从而在信号更弱的条件下也能保证通信。这种编码过程产生了两个主要的FEC块:

    • FEC Block 1:始终使用S=8编码(即1个原始数据位扩展为8个符号位,有效速率为125kbps),负责承载核心的协议数据单元(PDU)。
    • FEC Block 2:其编码方案由CI字段动态指示,可以是S=2或S=8,负责承载CRC校验码等信息。这种灵活性允许在数据负载的可靠性和传输效率之间进行权衡。
  • 数据生成与流动:应用数据首先按照蓝牙协议栈的层次结构,从ATT/GATT层开始,经过L2CAP层封装,形成LL PDU。这个PDU在Long Range模式下,会被放入帧结构中的FEC Block 1。随后,系统会为PDU计算一个CRC校验码,并将其放入FEC Block 2。CI字段则根据对链路质量和传输效率的考量,被设置为相应的值,以指明FEC Block 2使用的编码方案。

🎯 特别注意CI字段

CI(Coding Indicator) 是一个至关重要的2比特字段,它紧跟在接入地址之后,直接决定了FEC Block 2所使用的编码方式:

  • 当 CI = 01 时,表示FEC Block 2使用 S=8编码(125kbps速率)。
  • 当 CI = 10 时,表示FEC Block 2使用 S=2编码(500kbps速率)。

这里有一个关键点:FEC Block 1(承载PDU)始终使用S=8编码。而CI字段仅指示FEC Block 2的编码方式。这样的设计使得接收设备能够正确解码紧随其后的FEC Block 2,从而获取CRC等信息,完成数据包的校验。

💎 小结

BLE Long Range通过引入FEC编码机制,构建了一个包含FEC Block 1和FEC Block 2的帧结构。CI字段作为连接这两个部分的“指令官”,确保了接收方能准确解析整个数据包。这种以牺牲一定传输速率换取极高通信可靠性的方式,正是BLE Long Range实现超远距离通信的秘诀。

希望这些解释能帮助你更好地理解BLE Long Range的帧格式。如果你对协议中其他部分(例如不同类型的PDU结构)还有兴趣,我们可以继续探讨。

** 送给BLE Long Range modem的比特流无法像1M/2M PHY那样,以简单的LSB顺序直接、清晰地辨认出各个字段的边界。

下面是详细的解释,说明为什么不能以及它是如何工作的。

BLE 1M/2M PHY:简单直观

在1M/2M PHY下,数据包的构成是直接的串联:
[8-bit Preamble] + [32-bit Access Address] + [PDU] + [CRC]

  • 调制方式:使用GFSK,1个比特对应1个调制符号。
  • 结果:比特流与符号流一一对应。接收机可以通过寻找特定的前导码模式(如01010101或10101010),很容易地实现比特同步,一旦同步,后续的Access Address、PDU等字段的边界就自然确定了。你可以像读一个字节数组一样,按位去解析它。

BLE Long Range (Coded PHY):复杂且具有状态性

BLE Long Range的整个发送和接收过程是一个状态机,其流程和结构远比1M/2M模式复杂。下图清晰地展示了这一过程:

flowchart TD
    A[输入: 原始比特流] --> B[FEC 编码器<br>S=2 或 S=8]
    B --> C[模式转换<br>比特→符号对]
    C --> D[调制器<br>(发送波形)]
    
    E[接收机<br>(捕获波形)] --> F[状态1: 搜索前导码<br>进行“符号同步”]
    F -- 同步成功 --> G[状态2: 解码CI<br>需切换模式]
    G -- CI指示S=2 --> H[模式A: FEC Block 2 = S=2]
    G -- CI指示S=8 --> I[模式B: FEC Block 2 = S=8]
    H & I --> J[完成整个数据包解码]

造成这种复杂性的根源在于两个关键技术:

  1. 前向纠错 (FEC) 编码

    • S=2编码:将1个原始比特扩展为2个符号的码字。有效速率500kbps。
    • S=8编码:将1个原始比特扩展为8个符号的码字。有效速率125kbps。
    • 后果:比特流和最终发送的符号流不再是1:1的关系。你无法通过数比特来直接定位边界,因为1个比特已经“扩散”成了2个或8个符号。
  2. 模式转换 (Pattern Mapper)

    • 这是最关键的一点。编码器输出的并不是简单的0和1,而是符号对。
    • 它遵循一个查找表,例如:
      • 11 -> +- (映射到频率偏差)
      • 10 -> ++
      • 00 -> -+
      • 01 -> --
    • 后果:整个发射过程是一个连续的状态机。接收机必须首先在符号级别进行同步,识别出经过扩展和模式映射后的前导码模式,而不是在比特级别。

接收机如何工作:一个状态机的过程

接收机无法直接“看到”边界,而是必须通过以下步骤来推断出边界:

  1. 第一阶段:搜索前导码 (Preamble)

    • 接收机在符号流中搜索一个已知的、重复的符号模式。这个模式对应于经过S=8编码和模式映射后的80-bit前导码(例如,80个1或0)。
    • 此阶段的目标是达成符号同步和频率同步。接收机此时还不知道CI和Access Address的起始边界。
  2. 第二阶段:解码CI (Coding Indicator)

    • 一旦前导码同步完成,接收机就知道接下来的符号属于CI字段。
    • 关键:CI字段自身也是经过S=8编码的。接收机必须对这2比特对应的符号组进行解码,才能得到CI的值(01或10)。
    • 直到这一刻,接收机才确定了FEC Block 2的编码方案(S=2还是S=8)。
  3. 第三阶段:解码接入地址 (Access Address) 和 FEC Blocks

    • 接收机继续解码接下来的符号流。Access Address同样使用S=8编码。
    • 在解码完Access Address后,接收机进入FEC Block 1。FEC Block 1的终止符TERM1告诉解码器这里是一个边界。
    • 然后,接收机根据第二阶段解码出的CI值,切换到相应的模式(S=2或S=8)去解码FEC Block 2。

总结对比

特性BLE 1M/2M PHYBLE Long Range (Coded PHY)
同步级别比特同步符号同步
字段可见性比特流中直接可见比特流中不可见,被编码和映射
解析方式简单的线性解析复杂的状态机解析
关键依赖找到前导码即可知一切必须解码CI后才能解析后半部分数据包

所以,回到您的问题:您无法从送给modem的比特流中直接辨认出边界。整个结构对于调制器来说是一个连续的、经过编码和映射的符号序列,而对于解调器来说,是一个需要通过同步、解码CI来逐步推进的状态机过程。CI的作用就是在这个状态机中,作为一个关键的模式切换指令。

在BLE LongRange (Coded PHY)模式下,整个数据包,从第一个比特到最后一个比特,包括Preamble、Access Address、CI、TERM、PDU和CRC,全部都会经过FEC编码和模式映射的处理,然后才被送给调制器。

这与BLE 1M/2M PHY有根本性的不同。为了更直观地理解这两者的本质区别,我们可以通过下图来对比它们的数据处理流程:

flowchart TD
    subgraph BLE_1M_2M [BLE 1M/2M PHY 处理流程]
        A1[原始数据包比特<br>Preamble/AA/PDU/CRC] --> A2[直接调制<br>GFSK]
        A2 --> A3[输出射频信号]
    end

    subgraph BLE_LR [BLE LongRange PHY 处理流程]
        B1[原始数据包比特<br>Preamble/AA/CI/PDU/CRC] --> B2{FEC 编码器}
        
        B2 -- 整个数据包<br>统一进行S=8编码 --> B3[模式映射<br>比特→符号对]
        B3 --> B4[调制并输出<br>射频信号]
        
        B2 -- CI字段 --> B5[解码CI]
        B5 -- 指示FEC Block 2<br>使用S=2编码] --> B6[FEC Block 2 部分<br>单独进行S=2编码]
        B6 --> B3
    end

如上图所示,BLE LongRange的处理流程核心在于:

  1. 整体统一编码:数据包被看作一个整体进行第一阶段的FEC编码(S=8)。这意味着Preamble、Access Address、CI等控制字段本身也成为了“被保护的数据”,它们不再是直接可辨的简单比特序列。
  2. 动态编码切换:唯一的特殊性在于CI字段,它自身被S=8编码保护,但其内容(01或10)决定了数据包后半部分(FEC Block 2)是继续使用S=8还是切换到S=2进行编码。这正是接收机需要先解码CI才能解析后续数据的原因。
  3. 符号流输出:最终,所有经过编码的比特都会通过“模式映射器”转换为在空气中传输的复杂符号流(如+-, ++等)。

所以,你无法在送给调制器的比特流中直接找到清晰的字段边界,因为整个结构已经被FEC编码“打散”和“重塑”了。接收机必须作为一个复杂的状态机,通过同步、解码CI,才能一步步地还原出原始的数据包结构。这正是BLE LongRange为实现更远距离和更强抗干扰能力所付出的代价——接收机复杂度的显著增加。

BLE5.0 - Long-range mode Long-range mode (Coded PHY)? https://www.jianshu.com/p/277813a059b1 兼容4.2 - 1M PHY 更高的通信速率 - 2M PHY 更远的通信距离 - 1M CODED PHY Android 8.0 Oreo(API LEVEL 26)开始在BLE Manager里增加了5.0BLE相关方法,可以使用下面三个方法来鉴定你的手机对5.0BLE支持到什么程度。 isLe2MPhySupported - Return true if LE 2M 阅读详情

相关推荐

低功耗蓝牙(BLE)-- Architecture篇

BLE 工作在非授权的 2.4 GHz ISM 频段,采用跳频的方式来对抗干扰和衰落,并提供许多 FHSS (Frequency-Hopping Spread Spectrum)载波。BLE协议目前支持1Mb/s,2Mb/s,500kb/s和125kb/s四种通信速率,对于BLE设备来说,其中1Mb/s 是必须要支持的,2Mb/s,500kb/s和125kb/s速率是可选的。其中500kb/s和125kb/通过前向纠错编码的方式,分别使用2个符号代表1比特(S=2),和使用8个符号代表1比特...

qq_38475134的博客 4731

BL2028n,BLE+Wi-Fi双模SOC-物联网iot芯片,上海博通-Matter协议,layou指南

BL2028N 是一款高度集成的双模蓝牙 5.2 和 Wi-Fi 802.11n 组合解决方案,芯片集成了完整的Wi-Fi 和蓝牙应用所需的硬件和软件资源。BL2028N 不仅支持经典蓝牙标准速率连接即 BR 和 EDR,同时支持所有的 BLE 5.2 速率和功能,包括 Long Range、High Data Rate、以及最多四天线的 AoA/AoD 定位。BL2028N 支持的深度睡眠模式,可以在几个微安的电流下,运行 32 位时钟,并可以被此时钟唤醒或者被任何GPIO 唤醒。

V13662648446的博客 1284

蓝牙BLE 2M/1M/LongRange模式频偏分别是多少

初始精度(±150 kHz):就像一把尺子的出厂校准,要求 1M 和 2M 这两把“尺子”在没开始测量前,自身的准确度都必须很高(误差小于150kHz)。调制频偏(±250 kHz vs ±500 kHz):就像用尺子画波浪线。1M 模式画得慢(1Mbps),所以波浪的幅度可以小一些(±250kHz);而 2M 模式画得快(2Mbps),为了能看清波浪,必须把幅度画得更大(±500kHz),否则在高速下就变成一条直线了。测试初始载波频偏时,标准对 1M 和 2M 的要求是一样的(±150 kHz)。

m0_49540263的博客 387

汇顶ble-long rang添加

现在以两个bit位标识一个信息位,那么2bit就有四种可能,00,01,10,11,同时可以规定当接收端接受到的数据位为00和10的时候都表示信息位0,接受数据位为01和11的时候都表示数据1,这样就大大提高了容错率,比如实际发送端要发送一个信息位是1,其编码为01发出,但是受到了干扰,导致 数据被接受后解析出来了11(01中的0变为了1),但是因为我们规定了01和11都是标识信息1,所以虽然受到了干扰导致数据出现看错误,但是由于编码的方式不同,接收端还是正确的解析得到了正确的信息是1。

qq_46430624的博客 2040

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 675

Jupyter Notebook 命名出现“error”且运行后没反应

Jupyter Notebook 命名出现“error”且运行后没反应提前声明错误截图(方便大家看看是不是自己的错误)解决方法 提前声明 我的问题是在看到答主 @开始King的回答后才解决的,因为答主大大的文章后面有些地方不是很详细,我在这里再在King大大的基础上完善一下子 错误截图(方便大家看看是不是自己的错误) 1.命名失败,上面出现一个“error”字样 2.运行失败,无论是点击上方的运行按钮还是按快捷键shift+enter 都只会向下再增加一个代码块,而不会运行程序。 (也不是很多人出现的[*

qq_52770743的博客 1万+

ESP32连接PDM麦克风操作指南:新手入门必看

手把手教你如何将ESP32与PDM麦克风连接,采集音频数据并用于音频分类应用。内容涵盖硬件接线、代码配置及实际调试技巧,适合初学者快速上手esp32在声音识别场景中的使用。

weixin_42590539的博客 1325

PX4自定义uORB消息与MAVLink消息映射实战:从飞控到QGC地面站完整流程解析

本文详细解析PX4飞控中自定义uORB消息与MAVLink消息映射的完整流程,涵盖从飞控内部消息定义、MAVLink消息创建到QGC地面站接收显示的全链路实践。重点介绍如何使用mavlink inspector工具进行调试,解决版本兼容性和多实例消息处理等常见问题,为无人机开发者提供可靠的实时数据监控方案。

ll5678的博客 1064

STM32驱动AD7779:双极性电源下8通道同步ADC的SPI配置与数据采集实战

本文详细介绍了在双极性电源供电下,使用STM32通过SPI接口驱动AD7779同步ADC芯片实现8通道高精度数据采集的实战经验。重点解析了电源设计、抗干扰处理、寄存器配置、SPI通信技巧及数据校准方法,帮助工程师解决工业测量中的同步采样与噪声控制难题。

e3f4g5的博客 363

【七.三维视觉与视频分析】【1.点云处理:PointNet++/PointTransformer】

各位老铁,今天咱们要聊的可不是普通的二维图像处理,而是三维视觉领域最硬核的技术——点云处理。从最早的PointNet到如今的PointTransformer,这场技术进化堪比三维版的"像素革命"。今天咱们就深入解剖两大里程碑:PointNet++和PointTransformer,保证让你看完全文就能在点云领域横着走!想象一下,你抓了把沙子撒在空中,每粒沙子的位置都是三维坐标——这就是点云的典型形态。最后送大家一句话:点云处理就像在三维宇宙中寻找星辰的轨迹,既要望远镜的宏观视野,也要显微镜的细致入微。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 469

Agent Harness Engineering: AI Agent 执行管控与安全沙箱 原理与最佳实践

我们正站在计算范式转移的历史节点上。2024-2026 年间,AI 系统从被动的内容生成器(Generative AI)演变为主动的行动执行者(Agentic AI)。这一转变的根本特征是:根据 2026 年初的行业数据:然而,能力的提升伴随着风险的指数级增长。2024-2026 年间发生的多起标志性安全事件揭示了 Agent 系统的脆弱性:案例 1:Slack AI 数据外泄事件(2024 年 8 月)案例 2:制造业供应链攻击(2026 年 Q3)案例 3:Arup 深度诈骗案(2026 年 9 月)这

AI天才研究院 1652

GEE:哨兵时间序列遥感数据和动态阈值方法计算物候时期EOS/SOS(2)

本文将分享和解释论文《Improved Estimates of Arctic Land Surface Phenology Using Sentinel-2 Time Series》中使用到的基于阈值估算北极地区的植被物候,特别是北极地区的植被季节开始和结束的日期(SoS和EoS)的方法和代码。该方法使用的是使用哨兵2数据,并实现了两种阈值方法( 无平滑的阈值方法、平滑后的阈值方法)。

养乐多的博客 2962

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 蓝牙解调端LPF的目的是什么,为什么GFSK 1M模式截止频率是0.65MHz
下一篇: 蓝牙BT_BR/EDR和BLE区别与联系
enmouhuadou
博客等级 码龄6年 687粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值