如今的社会已经从IT时代过渡到了DT时代,数据的重要性不言而喻。将数据安全快速的传输给对方是一件非常重要的事情,如今诞生了很多不同的传输技术,每一种传输技术都是为了和对方进行数据交互。BLE技术也是这样,它的最终目的就是为了在两个设备间进行数据交互。我们从BLE的本质出发,搞清楚它是如何实现数据交互的,也就真正搞清楚了BLE的工作原理。
下面从3个方面,逐步讲解BLE的数据收发过程。
本文结合nordic的代码和蓝牙核心规范5.2来进行介绍。本文认为你对BLE协议栈的各个层已经有了一个大概认识,对BLE协议栈还不太熟悉的朋友可以参看拙作:蓝牙低功耗(BLE)协议栈
一 广播
1.1 从设备
从设备想要别人能够发现自己就需要不停的进行广播。
Host层通过HCI层定义的接口来设置广播数据。
HCI层的命令格式如下图:

设置广播数据的命令格式如下图:

指令详细介绍参看:蓝牙核心卷 5.2 , Vol 4, Part E, 7.8.7
- OpCode,0x0008,两个字节
- parameter Total Length,一个字节,也就是Advertising_Data_Length,根据Advertising_Data计算得来
- Advertising_Data, 由HCI 以上层传下来
事实上只有Advertising_Data会通过空中发送。Advertising_Data的格式如下:

详细介绍参看:蓝牙核心卷 5.2 , Vol 3, Part C, 11
可以看到广播数据可能有多个元素:AD Structure 1,AD Structure 2 … AD Structure N,每一个AD Structure的格式为,1个字节长度,一个字节AD Type,n个字节的AD Data。广播数据包也遵循一定的格式,广播包的数据格式参看:AD Type和Core Specification Supplement
LL层定义的广播报文的格式如下图:

详细介绍参看:蓝牙核心卷 5.2 , Vol 6, Part B, 2.3
- 用户设置广播参数和广播内容
ble_gap.h
//设置广播参数,以及广播类容
uint32_t sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)
-
设置广播参数,ocf=0x006,ogf=0x08
命令格式:

gap协议层会根据HCI层提供的接口来设置广播参数

-
设置广播数据,ocf=0x0008,ogf=0x08
gap协议层会根据HCI层提供的接口来设置广播数据
-
开启广播
命令格式:

gap层提供的函数接口:uint32_t sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)
HCI层提供的接口,ocf=0x00a,ogf=0x08

-
广播的具体数据
通过抓包工具得到的广播包的数据:


-
aa, 前导码
-
d6 be 89 8e,接入地址:0x8e89bed6。(蓝牙传输均使用小端模式)
-
40 19,报头
- 0000b,PDU Type,ADV_IND,普通广播. 详见:Vol 6, Part B, 2.3, Table 2.3
- 0b, RFU,未使用
- 0b, ChSel, 通道选择,未使用
- 1b,TxAdd,广播者的mac地址类型,1表示随机地址
- 0b,RxAdd, 扫描者mac地址类型,未知
- 19,数据长度,指的是Payload的长度
-
8b 89 e6 26 c9 4c: 0x4cc926e6898b mac地址, Payload的一部分
-
02 01 1a , AD Structure 1,广播报文的第一个元素
- 02,长度
- 01,类型,«Flags»
- 1a,数据

-
02 0a 0c
- 02, 长度
- 0a,类型,«Tx Power Level»
- 0x,数据

-
0c ff 4c 00 10 07 57 1f 6c 06 2f 1d 98
- 0c,长度
- 0xff,自定义类型
- 4c 00 10 07 57 1f 6c 06 2f 1d 98 ,数据
-
4c 00, 前两个字节代表厂商,0x004c代表Apple, Inc.厂商定义

-
10 07 57 1f 6c 06 2f 1d 98, 自定义的数据
-
-
7b 53 ef,0xef537b CRC校验
从设备设置的广播数据流向:用户调用GAP提供的接口,GAP调用HCI层接口,HCI层再传给LL层。

本文详细解读了BLE技术的数据收发过程,包括从设备的广播设置、主设备的扫描连接、发现服务的分组操作,以及主设备的写命令和从设备的通知发送。通过结合Nordic代码与蓝牙5.2规范,深入剖析了BLE协议工作原理。
最低0.47元/天 解锁文章
2210

被折叠的 条评论
为什么被折叠?



