【蓝牙精品系列文档】【03_blemesh架构】01_Mesh承载层
2026/7/14 19:40:39 网站建设 项目流程

Mesh 承载层

核心概念

BLE Mesh 不直接使用 BLE 的连接态,而是基于广播态进行通信。承载层(Bearer)定义了 Mesh 消息如何在 BLE 传输层上发送和接收。

两种承载方式

1. ADV Bearer(广播承载)

Mesh 消息 → Network PDU → ADV Bearer → 广播信道 (37/38/39) 或扩展广播信道
  • 使用 BLE 广播信道传输 Mesh 数据
  • 不需要建立连接
  • 所有 Mesh 消息都通过广播发送
  • 支持传统广播(ADV_NONCONN_IND)和扩展广播(ADV_EXT_IND)
ADV Bearer 广播数据格式
AD Structure: ┌──────────────┬──────────────────────────┐ │ Length: 1B │ AD Type: 0x29/0x2A/0x2B │ │ │ AD Data: Mesh PDU │ └──────────────┴──────────────────────────┘

AD Type 值:

AD Type名称用途
0x29Mesh Provisioning PDU配网协议数据单元(PB-ADV)
0x2AMesh MessageMesh 普通消息(Network PDU)
0x2BMesh BeaconMesh 网络 Beacon 心跳包

标准 GAP AD Type(Flags0x01、UUID0x03、Service Data0x16等)见 week105_AD结构与广播数据.md

三类 AD Type 作用说明:

按 Mesh 节点生命周期,三种 AD Type 分工如下:

未配网阶段 配网进行中 已配网运行阶段 │ │ │ ▼ ▼ ▼ 0x2B Beacon 0x29 Provisioning 0x2A Message (Unprovisioned) (PB-ADV 配网 PDU) (Network PDU) │ │ │ 0x2B Beacon │ (Secure Network) ▼ 分配 NetKey / 地址
0x29— Mesh Provisioning PDU(配网协议数据单元)

使用场景:设备正在配网,Provisioner 与未配网节点通过PB-ADV广播交换配网数据。

主要作用:

  • 建立 / 关闭 PB-ADV 配网链路(Link Open / Link Close)
  • 交换配网能力(OOB 方式、元素数量等)
  • ECDH 密钥交换与认证(Public Key、Confirm、Random)
  • 下发NetKey、AppKey、Unicast Address等网络参数

特点:

  • 仅在配网过程中使用,配网完成后不再发送
  • 承载的是Provisioning PDU,不是 Network PDU
  • 对应 GATT 配网走PB-GATT(Mesh Provisioning Service 0x1827),不走 0x29

典型场景:工厂新设备首次上电,Provisioner App 扫描发现后将其加入 Mesh 网络。

0x2A— Mesh Message(Network PDU,已配网业务消息)

使用场景:设备已配网,在 Mesh 网络中传输正常业务数据。这是 ADV Bearer 上最常用的 AD Type。

主要作用:

  • 传输模型消息:Generic OnOff、Level、Lightness 等
  • 传输配置消息:Composition Data、AppKey Add、Relay 设置等
  • 支持多跳中继:节点收到后解密、TTL 减 1、再转发
  • 手机经 Proxy 写入的 Mesh 消息,最终也会以 0x2A 在 ADV Bearer 上广播

特点:

  • 只有已配网节点才会发送 / 接收
  • 需要NetKey才能解密;普通手机能扫到 0x2A,但无法解析内容
  • 承载经网络层加密 + 混淆后的 Network PDU

典型场景:开关发送 OnOff Set 控制灯;传感器上报状态;消息经 Relay 节点多跳转发。

0x2B— Mesh Beacon(网络 Beacon 心跳包)

使用场景:周期性广播,用于设备发现网络状态同步,本身不承载业务控制数据。

0x2B 内部用第 1 字节Beacon Type区分两种子类型:

Beacon Type名称设备状态作用
0x00Unprovisioned Device Beacon未配网宣告「我是可配网设备」,携带 UUID、OOB Information
0x01Secure Network Beacon已配网同步 IV Index、Key Refresh 等网络状态,携带 Network ID、Flags

Unprovisioned Device Beacon(Type=0x00)作用:

  • 让 Provisioner发现附近未配网设备
  • 提供 UUID 和 OOB 信息,供 Provisioner 决定配网方式

Secure Network Beacon(Type=0x01)作用:

  • IV Index 同步,防止全网 IV 不一致导致解密失败
  • Key Refresh 通知,NetKey 更新时通知全网节点
  • 网络健康监测,节点通过 Beacon 判断子网是否活跃

典型场景:Provisioner 扫描 0x2B 发现新灯;已配网节点每约 10 秒发送 Secure Network Beacon 维持网络同步。

速记:

  • 0x29= 配网专用(加入网络)
  • 0x2A= 业务专用(已配网后的控制 / 数据)
  • 0x2B= 心跳 / 宣告专用(未配网时被 discovery,已配网时同步网络状态)
BLE 5.x 扩展广播完整空口包格式
一、扩展广播整体物理层帧结构(所有扩展广播 PDU 通用)

所有 BLE 链路层数据包固定四层结构,扩展广播 / 传统广播物理层头部完全一致:

字段长度说明
Preamble 前导码1 字节 (1M PHY) / 2 字节 (2M PHY)01交替序列,射频同步、AGC 锁定
Access Address 访问地址4 字节广播固定地址:0x8E89BED6
LL PDU 链路层 PDU可变长度核心扩展广播载荷(下文重点拆分)
CRC 校验3 字节24 位 CRC 校验,校验整个 PDU 载荷

扩展广播两大核心 PDU 分工(BLE Mesh 必用)

  1. ADV_EXT_IND:主信道(37/38/39 传统广播信道)发送,不携带用户 / Mesh 有效数据,只通过AuxPtr指针告诉接收机:辅助包在哪条信道、何时接收、使用哪种 PHY;
  2. AUX_ADV_IND:次信道(0~36 全部数据信道)发送,承载完整广播数据,BLE Mesh 网络层 PDU 就封装在这里,单包最大254 字节AD 数据;

超长报文可追加AUX_CHAIN_IND链式分包,单条广播事件最大可传输上千字节。


二、核心 PDU 详细载荷格式(CEAPF 通用扩展广播载荷格式)

所有扩展广播 PDU(ADV_EXT_IND/AUX_ADV_IND)共用一套Common Extended Advertising Payload Format,结构分为:

2 字节 LL Header + 扩展头标志 Flags + 可选扩展头字段 + 广播 AD 数据

1. 链路层 LL Header(固定 2 字节,16 bit)

Bit 域位数含义
PDU Type4 bit0b0111= ADV_EXT_IND;0b1000= AUX_ADV_IND
RFU 保留1 bit固定 0
ChSel 信道选择1 bit辅助信道跳频算法开关
TxAdd 发送地址类型1 bit0 = 公网地址,1 = 随机私有地址
RxAdd 接收地址类型1 bit0 = 公网地址,1 = 随机私有地址(定向广播使用)
Payload Length8 bit后面整个载荷字节长度(最大 255)

2. 扩展头 Flags 标志位(1 字节)

决定后续哪些可选字段存在,Mesh 扩展广播固定开启:

  • Bit 0AdvA Present广播者地址存在(必选)
  • Bit 1TargetA Present定向目标地址(Mesh 非定向广播关闭)
  • Bit 2AuxPtr Present辅助指针存在(ADV_EXT_IND 强制开启)
  • Bit 3ADI Present广播集信息 SID/DID(多广播集必开)

其余 CTE、SyncInfo、ACAD 字段 Mesh 场景基本不用。

3. 关键字段详解(Mesh 扩展广播高频使用)

(1)AdvA(6 字节)

48 位广播 MAC 地址,Mesh 节点随机私有地址居多。

(2)AuxPtr 辅助指针(ADV_EXT_IND 核心,3 字节)

决定接收机如何找到AUX_ADV_IND辅助包,5 个子字段:

子字段位数说明
Channel Index6 bit0~36,辅助包使用的物理信道号
CA 时钟精度1 bit收发端晶振误差容错
Offset Units1 bit时间单位,0 = 30 μs,1 = 300 μs
AUX Offset13 bit主包结束后延迟多少个单位再发辅助包
AUX PHY3 bit000= 1M,001= 2M,010= Coded 远距离 PHY

(3)ADI 广播数据信息(2 字节)

  • SID(广播集 ID,4 bit):同一设备多组独立广播区分号,Mesh 独占 1 个 SID,可同时并行设备状态广播;
  • DID(数据 ID,12 bit):广播内容版本号,用于接收机过滤重复广播包。

4. AUX_ADV_IND 有效载荷(AD Data 区域)

真正存放 BLE Mesh 上层数据的区域,格式遵循标准 BLE AD 结构:

[1 字节长度] + [1 字节 AD Type] + [N 字节 AD 数据]

BLE Mesh 广播承载层 AD Type(同上表,详见上文「三类 AD Type 作用说明」):

AD Type名称用途
0x29Mesh Provisioning PDU配网协议数据单元
0x2AMesh MessageMesh 普通消息(Network PDU)
0x2BMesh BeaconMesh 网络 Beacon 心跳包

5. 传统广播 vs 扩展广播容量对比

特性传统 Legacy 广播扩展广播 AUX_ADV_IND
最大 AD 数据31 字节254 字节
Mesh 实际可用约27 字节(扣除封装头)250 字节以上
是否需要协议层分片长报文需要单包可完整承载,无需分片重组
承载信道37/38/390~36 数据信道

三、Mesh 扩展广播承载示意图
Primary Channel (37/38/39) ┌─────────────────────────────────────────┐ │ ADV_EXT_IND │ │ ┌────────────────────────────────────┐ │ │ │ LL Header │ │ │ │ PDU Type = ADV_EXT_IND (0x07) │ │ │ └────────────────────────────────────┘ │ │ ┌────────────────────────────────────┐ │ │ │ Extended Header │ │ │ │ - AdvA (6B) │ │ │ │ - AuxPtr ─────────────────────────┼─┼──┐ │ │ - ADI (2B) │ │ │ │ └────────────────────────────────────┘ │ │ │ AdvData (空或极少) │ │ └─────────────────────────────────────────┘ │ │ AuxPtr 指向 ▼ Secondary Channel (0~36) ┌─────────────────────────────────────────────┐ │ AUX_ADV_IND │ │ ┌────────────────────────────────────────┐ │ │ │ LL Header │ │ │ │ PDU Type = AUX_ADV_IND (0x08) │ │ │ └────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────┐ │ │ │ Exten

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询