当前位置:   article > 正文

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

蓝牙pdu

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

在这里插入图片描述

  1. PDU Type:标识ADV

  2. RFU : 预留

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

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

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

PDU Type

在这里插入图片描述

Advertising PDU
Control PDU NameDescription
ADC_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 NameDescription
SCAN_REQ(扫描请求)Scanner发送的、向Advertiser请求额外信息的数据包(一般需要在收到ADV_SCAN_IND后才可发送)
SCAN_RSP(扫描响应)Advertiser发送的、响应SCAN_REQ请求的数据包
Initialing PDU
Control PDU NameDescription
CONNECT_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

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

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

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

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

  5. 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 NameDescription
0x00LL_CONNECTION_UPDATE_IND更新链接参数
0x01LL_CHANNEL_MAP_REQ(4.2)更新链接的 Channel Map
0x01LL_CHANNEL_MAP_IND(5.1)更新链接的 Channel Map
0x02LL_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 请求 Feature
0x0FLL_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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/368271
推荐阅读
相关标签
  

闽ICP备14008679号