蓝牙相关学习:4.2.BLE空口包结构

您所在的位置:网站首页 蓝牙数据格式怎么自己规定 蓝牙相关学习:4.2.BLE空口包结构

蓝牙相关学习:4.2.BLE空口包结构

2024-07-13 01:36| 来源: 网络整理| 查看: 265

PDU PDU 基本数据结构LL Header 广播包(广播报文)Advertising HeaderPDU TypeAdvertising PDUScanning PDUInitialing PDU Payload lengthPayload (有效数据包)Advertising AddressAdvertising Data 完整数据包 数据包(数据报文)Data HeaderLL DATA PDULL Control PDU Payload LengthPayloadLL DATA PDUL2CAP PDU LengthL2CAP Channel ID (L2CAP CID) LL Control PDUOpcodeCtrData 参考地址

BLE 4.0 - BLE 5.0 ,BLE 5.1 的部分内容没有加入到里面,待添加

PDU 基本数据结构

PDU(protocol data unit,协议数据单元,BLE 数据传送的基本单元)前两个字节固定为LL header(1个字节长)和 payload length(1个字节长,又称data length),即可以展开为:

在这里插入图片描述

协议数据单元,又分为广播通道PDU和数据通道PDU

在这里插入图片描述

LL Header

长度为一个字节。 在广播包里他是 Advertising Header;在数据包里他是 data header

在这里插入图片描述

广播包(广播报文) Advertising Header

在这里插入图片描述

PDU Type:标识ADV

RFU : 预留

ChSel:如果本机支持跳频(Hopping)算法 #2,这设置成为 1

TxAdd:如果为 0 代表 ADV 是 public 类型的 Address,否则为 1,是 random 类型的 Address

RxAdd:如果为 0 代表期望的对端地址类型为 public,否则为1,代表期望对端的 Target Address 为 random(在指向性广播中使用,因为指向性广播,携带了对端地址,其他类型广播,这个 bit 没用)

PDU Type

在这里插入图片描述

Advertising PDU Control PDU NameDescriptionADC_IND(通用广播)Advertiser发送的、可被连接的、无方向的广播数据(connectable undirected advertising event)ADV_DIRECT_IND(定向广播)Advertiser发送的、可被连接的、单向广播数据(connectable directed advertising event)ADV_NONCONN_IND(不可连接广播)Advertiser发送的、不可被连接的、无方向的广播数据(non-connectable undirected advertising event)ADV_SCAN_IND(可扫描广播)Advertiser发送的、可接受SCAN_REQ请求的、无方向的广播数据(scannable undirected advertising event) Scanning PDU Control PDU NameDescriptionSCAN_REQ(扫描请求)Scanner发送的、向Advertiser请求额外信息的数据包(一般需要在收到ADV_SCAN_IND后才可发送)SCAN_RSP(扫描响应)Advertiser发送的、响应SCAN_REQ请求的数据包 Initialing PDU Control PDU NameDescriptionCONNECT_REQ(连接请求)Initiater 发起的、请求建立连接的数据包CONNECT_IND(5.1)

根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,手机在第三个广播事件的时候扫到了设备B,并发出了连接请求CONN_REQ(CONN_REQ又称为CONNECT_IND)。

转:详解BLE连接建立过程:https://www.cnblogs.com/iini/p/8972635.html

Payload length

在这里插入图片描述

数据包:长度域包含5个比特,有效值的范围是0~31。(原BLE4.0 4.1中 规定数据长度5个比特)

广播包:长度域包含6个比特,有效值的范围是6~37。

广播包和和数据包的长度域有所不同,主要原因是:广播包除了最多31个字节的数据之外,还必须要包含6个字节的广播设备地址。6+31=37,所以需要6比特的长度域。

在这里插入图片描述

转 :https://www.cnblogs.com/debugdabiaoge/p/15772546.html

Payload (有效数据包)

在广播包中,Payload由两部分组成,Advertising Address 和 Advertising Data组成,如下:

在这里插入图片描述

Advertising Address

Device Address,广播包中的强制字段(数据包里没有),俗称蓝牙MAC地址。 如果是广播包,则是advertiser的MAC地址;如果是scan包或者连接请求包,则是scanner的MAC地址。 蓝牙device address为6个字节,这样Advertising data最长为:37-6 = 31B,这就是广播包数据最长只能31个字节的由来(1M PHY)。

分类:

在这里插入图片描述

蓝牙协议分析(6)_BLE地址类型:http://www.wowotech.net/bluetooth/ble_address_type.html

一个BLE设备两种地址都可以使用(Public Device Address和Random Device Address)

Public Device Address

需要向IEEE购买;管理申请繁琐;不安全

Advertising Data

在这里插入图片描述 转:蓝牙协议分析(5)_BLE广播通信相关的技术分析 http://www.wowotech.net/bluetooth/ble_broadcast.html

广播数据(或者扫描应答数据)由一个一个的AD Structure组成,对于未满31bytes的其它数据,则填充为0(无效数据);

每个AD Structure由两部分组成:1byte的长度信息(Data的长度),和剩余的Data信息; Data信息又由两部分组成:AD Type(长度不定)指示该AD Structure的类型,以及具体的AD Data。

无效数据部分 广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的。

在这里插入图片描述

最关键的还是AD Type,BLE协议根据实际的应用场景,定义了各种各样的AD type,以及相应的数据格式,例如

参考地址: https://www.pianshen.com/article/7755244605/ https://www.jianshu.com/p/7d814c22a085

AD TypeValue描述备注Flags0x01标注蓝牙特性Service UUIDs0x02标注服务UUID非完整的16 bit UUID列表Service UUIDs0x03标注服务UUID完整的16 bit UUID列表Service UUIDs0x04标注服务UUID非完整的32 bit UUID列表Service UUIDs0x05标注服务UUID完整的32 bit UUID列表Service UUIDs0x06标注服务UUID非完整的128 bit UUID列表Service UUIDs0x07标注服务UUID完整的128 bit UUID列表Local Name0x08标注名称设备简称Local Name0x09标注名称设备全名TX Power Level0x0A标注射频发射功率表示设备发送广播包的信号强度Simple Pairing Option OOB Tags0x0D标注安全管理带我外标签设备类别Simple Pairing Option OOB Tags0x0E标注安全管理带我外标签设备配对的Hash值Simple Pairing Option OOB Tags0x0F标注安全管理带我外标签设备配对的随机值Security Manager TK Value0x10标注 带外方式配对绑定时的TKTK安全管理Security Manager Out of Band0x011标注带外特性标志带外安全管理Slave Connection Interval Range0x012标注连接参数范围外设(Slave)连接间隔范围List of 16-bit Service Solicitation UUIDs0x014标注主机特定服务服务搜寻16 bit UUID列表List of 128-bit Service Solicitation UUIDs0x015标注主机特定服务服务搜寻128 bit UUID列表Service Data0x016服务数据16 bit UUID Service,前两个字节是UUID,后面是Service的数据Public Target Address0x17公开目标地址,表示希望这个广播包被指定的目标设备处理,此设备绑定了公开地址Random Target Address0x18:随机目标地址,表示希望这个广播包被指定的目标设备处理,此设备绑定了随机地址Appearance0x19表示设备的外观Advertising Interval0x1A广播区间LE Bluetooth Device Address0x1BLE设备地址LE Role0x1CLE设备角色Simple Pairing Hash C-2560x1D256位设备配对的Hash值Simple Pairing Randomizer R-2560x1E256位设备配对的随机值Service Data - 32-bit UUID0x2032 bit UUID Service,前4个字节是UUID,后面是Service的数据Service Data - 128-bit UUID0x21128 bit UUID Service,前16个字节是UUID,后面是Service的数据3D Information Data0x3D3D信息数据Manufacturer Specific Data0xFF厂商信息厂商自定义数据,厂商自定义的数据中,前两个字节表示厂商ID,剩下的是厂商自己按照需求添加,里面的数据内容自己定义。

Flags bit 0: LE有限发现模式 bit 1: LE普通发现模式 bit 2: 不支持BR/EDR bit 3: 对Same Device Capable(Controller)同时支持BLE和BR/EDR bit 4: 对Same Device Capable(Host)同时支持BLE和BR/EDR bit 5…7: 预留

Security Manager Out of Band bit 0: OOB Flag,0-表示没有OOB数据,1-表示有 bit 1: 支持LE bit 2: 对Same Device Capable(Host)同时支持BLE和BR/EDR bit 3: 地址类型,0-表示公开地址,1-表示随机地址

完整数据包

在这里插入图片描述

0d 03 4e 00 00 80 03 26 aa d6 be 89 8e 00 24 40 9c d0 38 c1 a4 02 01 06 03 03 1a 18 09 ff 5a a5 a4 c1 38 d0 9c 40 0c 09 44 46 53 4b 30 34 2d 39 43 34 30 93 52 e4

我们传输的数据结构:

aa d6 be 89 8e 00 24 40 9c d0 38 c1 a4 02 01 06 03 03 1a 18 09 ff 5a a5 a4 c1 38 d0 9c 40 0c 09 44 46 53 4b 30 34 2d 39 43 34 30 93 52 e4

aa – 前导帧(preamble) d6 be 89 8e (0x8E89BED6) – 访问地址(access address) 00 – LL帧头字段(LL header) 24 – 有效数据包长度(payload length) 40 9c d0 38 c1 a4 (0xA4C138D09C40)– 广播者设备地址(advertiser address) 02 01 06 03 03 1a 18 09 ff 5a a5 a4 c1 38 d0 9c 40 0c 09 44 46 53 4b 30 34 2d 39 43 34 30 – 广播数据 93 52 e4 – CRC24值

数据包(数据报文) Data Header

在这里插入图片描述

转:BLE(8)—— 连接态数据包组成( Connection Packets PDUs)https://stephenzhou.blog.csdn.net/article/details/95938674

LLID : 用于区分这个 Connection 的包是普通的数据包(L2CAP 的起始/连续/空包),还是 Control PDU

NESN:下一个期望的对端包的 Sequence Number NESN 和 SN 来决定了数据包是否传输 OK,也就是是否需要重传

SN:当前包的 Sequence Number NESN 和 SN 来决定了数据包是否传输 OK,也就是是否需要重传

MD:是否有 More Data MD 决定了后面是否跟有更多的数据。有了这个 MD,对端才会开窗继续来收数据。

RFU:预留

在这里插入图片描述

LL DATA PDU

当 Connection 的包体中 LLID 是 01’b 或者 10’b 的时候,说明这个是个数据包(L2CAP的)

如下,是01的时候,是数据包 在这里插入图片描述

如下,是10的时候,是数据包 在这里插入图片描述

如上,01的时候数据包是空包,10的时候数据包是普通数据包

在这里插入图片描述

LL Control PDU

当 Connection 的包体中 LLID 是 11’b 的时候,说明这个是个控制包(LL Control PDU)

如下,11的时候是控制包

在这里插入图片描述

Payload Length

在这里插入图片描述

数据包:长度域包含5个比特,有效值的范围是0~31。 原BLE4.0 4.1中 规定数据长度5个比特。BLE4.2以后可以修改。

Payload LL DATA PDU

LL DATA PDU数据包就是 L2CAP的数据包。

在这里插入图片描述

如果包含MIC部分

在这里插入图片描述

mic是消息完整性检查分场景的(如果payload 为空或者该linklayer 没有加密可以不添加mic部分,反之添加mic部分)

L2CAP PDU Length

表示后面information payload的长度,information payload最大长度除了受这个L2CAP length字段约束,同时还受MTU的限制。

MTU,Maximum Transmission Unit,是ATT层与L2CAP层可以交互的最大数据长度,或者说是Client与Server可以交互的最大长度。

总结一下,蓝牙spec里面定义了2个长度字段: LL data length和L2CAP length,同时ATT层还定义了一个MTU,以限制ATT PDU最大长度。 LL data length可以通过LL_LENGTH_REQ和LL_LENGTH_RSP来动态改变,MTU size则可以通过后面要讲到的Exchange MTU Request和Exchange MTU Response来改变,而L2CAP length无法动态改变,也就是说不能超过65535。

L2CAP Channel ID (L2CAP CID)

逻辑通道的ID,BLE使用固定的通道编号,也就是说虽然蓝牙spec里面也允许BLE使用connection oriented channel,但大部分BLE协议栈实现的时候都是使用固定的通道编号,通道编号定义如下所示:

Value描述0x0004用于ATT协议0x0005用于L2CAP信令0x0006用于安全管理

待续,先这样吧

LL Control PDU

连接建立之后,Master或者Slave可以借助Link Layer Control Protocol (LLCP),通过LL Control PDU,对连接进行管理控制

数据格式如下:

在这里插入图片描述

LL Control PDU是在Link layer层直接进行交互的,他们不会经过后面的L2CAP层。

Opcode OpcodeControl PDU NameDescription0x00LL_CONNECTION_UPDATE_IND更新链接参数0x01LL_CHANNEL_MAP_REQ(4.2)更新链接的 Channel Map0x01LL_CHANNEL_MAP_IND(5.1)更新链接的 Channel Map0x02LL_TERMINATE_IND断开连接请求0x03LL_ENC_REQ加密流程相关交互0x04LL_ENC_RSP加密流程相关交互0x05LL_START_ENC_REQ加密流程相关交互0x06LL_START_ENC_RSP加密流程相关交互0x07LL_UNKNOWN_RSP收到未知的 LLCP 后的回复0x08LL_FEATURE_REQ请求交换 Feature 的交互,蓝牙设备连接后用于数据0x09LL_FEATURE_RSP请求交换 Feature 的交互0x0ALL_PAUSE_ENC_REQ重启加密流程相关交互0x0BLL_PAUSE_ENC_RSP重启加密流程相关交互0x0CLL_VERSION_IND交换蓝牙协议版本0x0DLL_REJECT_IND拒绝请求0x0ELL_SLAVE_FEATURE_REQSlave 请求 Feature0x0FLL_CONNECTION_PARAM_REQ更新链接参数0x10LL_CONNECTION_PARAM_RSP更新链接参数0x11LL_REJECT_EXT_IND扩展类型的拒绝请求0x12LL_PING_REQ加密后的 PING 流程交互0x13LL_PING_RSP加密后的 PING 流程交互0x14LL_LENGTH_REQ更新空口数据长度0x15LL_LENGTH_RSP更新空口数据长度0x16LL_PHY_REQPHY 更新相关交互0x17LL_PHY_RSPPHY 更新相关交互0x18LL_PHY_UPDATE_INDPHY 更新相关交互0x19LL_MIN_USED_CHANNELS_INDChannels 相关的配置All other valuesReserved for FutureUse 预留

在这里插入图片描述

CtrData

待续,先这样吧

参考地址

抄的大佬,做的学习笔记。

转 :BLE(3)—— 空口数据包组成 :https://stephenzhou.blog.csdn.net/article/details/94676596

转:详解BLE空口包格式—兼BLE Link layer协议解析 https://www.cnblogs.com/iini/p/8977806.html

蜗窝科技:http://www.wowotech.net/sort/bluetooth

BLE:https://blog.csdn.net/zhoutaopower/category_9083143.html

https://blog.csdn.net/freemote/article/details/120165736



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3