BlueZ蓝牙广播协议(一)

1.概述

蓝牙广播是一种常见的无线通信方式,用于在短距离范围内传输数据。在蓝牙广播中,数据的传输是通过广播数据包实现的,而这些数据包包含了特定的数据结构。

2.BLE数据包格式 - 空中包

BLE链路层(Link Layer)只定义了一种空中包格式:

Preamble(前导帧)| Access Address | PDU(protocol data unit,协议数据单元) | CRC(cyclic redundancy check,循环冗余校验)

ATT、GATT、GAP层 都是基于数据信道包的payload(PDU)的概念

2.1 Preamble(前导帧)

固定值通常为0x55或者0xAA

2.2 Access Address:

Access Address用来标示接收者ID或者空中包身份,根据Access Address的不同,区分两种Packet类型:广播包和数据包

  • 广播包: Access Address 固定为0x8E89BED6
  • 数据包: 是数据信道空中包的简称,数据包只在数据信道上传输,即除37/38/39之外的其余37信道(Bluetooth LE总共占用40个信道)。

2.3 协议数据单元PDU

PDU(protocol data unit,协议数据单元)前两个字节固定为LL header(1个字节)和payload length(1个字节,又称data length)

PDU进一步为:LL Header | Payload Length | Payload

PDU 是 BLE 协议栈链路层的核心概念,定义了设备间数据交换的基本格式。无论是广播还是连接状态下的通信,都依赖于特定类型的 PDU 来完成任务。

3. BLE广播包

广播包,全名蓝牙广播通道(channel)空中包,即在蓝牙广播通道上(37/38/39)传输的空中包,为两种空中包的一种。

对于广播包,PDU段的格式为:

LL Header(1 Byte) | Payload Length(1 Byte) | Payload(6-37 Bytes)

3.1 LL Header字段

PDU段的LL Header,即Advertising Header,其8个bit定义如下所示:

  • Bit0:接收地址类型

  • Bit1:发送地址类型

  • Bit2-3:保留

  • Bit4-7:广播报文类型,具体定义如下:

    类型用法
    0000ADV_IND可连接非定向广播
    0001ADV_DIRECT_IND可连接定向广播
    0010ADV_NONCONN_IND不可连接非定向广播
    0011SCAN_REQ扫描者需要获得更多信息的扫描请求
    0100SCAN_RSP响应来自扫描者的扫描请求
    0101CONNECT_REQ发起者的连接请求
    0110ADV_SCAN_IND可扫描、不可连接的无定向广播
    xxxx保留

3.2 Payload Length字段

该字段占1个字节, 广播报文规范的长度范围是6-37字节。

3.3 Payload字段

针对蓝牙广播数据结构Payload的直观表示通常包括以下几个重要部分:
在这里插入图片描述

  • Device Address:蓝牙MAC地址(6 Bytes)是强制的,非广播包,数据包也要强制
  • 对于ADV_IND、SCAN_RSP两种类型的广播包,Advertising data的最大值为37 - 6 = 31字节,这就是广播包数据最长只能为31个字节的由来
  • ADV_DIRECT_IND 直连广播包净荷格式由6字节的广播设备地址和6字节的目标设备地址组成
  • SCAN_REQ 扫描请求包净荷格式由6字节的扫描设备地址和6字节的广播设备地址组成。远程发起连接的设备,搜索到周围正在广播的设备后,一般会发送扫描请求。

对于一个可连接非定向广播而言,主机设备仅通过广播能够获取到其的数据长度为被动接收的ADV_IND:31个字节 + 主动扫描的回复包SCAN_RSP:31个字节 = 62个字节

每一个广播事件包含三个广播包,即分别在37/38/39三个射频通道上同时广播相同的信息

3.4 广播数据包结构

蓝牙广播数据结构是指:在蓝牙广播过程中传输的数据包的组织形式和内容格式,它属于PDU的Payload数据。
蓝牙广播数据包的主要格式:一个广播包是由若干个广播单元AD Structure构成的。
每个广播单元的组成(AD Structure)是:

  • 第一个字节: 是长度值 length,表示接下来的 length个字节是数据部分,长度不包含自己本身;
  • 第二个字节:是数据类型Type,决定了AD Data的数据代表的是什么以及怎么解析,广播数据最长31字节。
  • 第三个字节:从这个字节开始就是数据部分。
    广播内容和扫描回复内容的格式定义是通用的。都是长度+数据的方式,其中数据又分成类型+实际数据,如下图:

在这里插入图片描述

广播包的数据由多个 AD Structure 组成,每个结构包含3个字段:

  • 应用数据的结构格式:AD Structure 1 | AD Structure 2 | … | AD Structure N
  • AD structure的格式为:Length(1 Byte) | Type(1 Byte) | Data
  • Length(1字节):表示Type和Data的长度
  • Type(1字节):数据类型标识,表示Data的用途。0x02表示不完整的16位服务UUID(示例值:0x180A),0x09表示设备完整名称,0x0A表示发射功率等级,0x19表示设备外观,0xFF表示自定义数据(可以私有定义)等等,具体定义见如下:
  • 特别地说明,广播名称属于type:0x09,可以选择放置在ADV_IND(主动广播包),或者ADV_RSP(扫描响应包),由于Length和Type各占用了一个字节,那么BLE广播名称的最大有效长度为31 - 2 = 29个字节。

如下是蓝牙广播数据结构直观的表示通常包括以下几个重要部分:
在这里插入图片描述

3.5 AD Structure类型

在这里插入图片描述

3.6 广播包实例

广播数据包结构体实例:
在这里插入图片描述
数据解析说明:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值