详解BLE的数据传输过程

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

如今的社会已经从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 TypeCore Specification Supplement

LL层定义的广播报文的格式如下图:
在这里插入图片描述

详细介绍参看:蓝牙核心卷 5.2 , Vol 6, Part B, 2.3

  1. 用户设置广播参数和广播内容
    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层提供的接口来设置广播数据在这里插入图片描述

  1. 开启广播
    命令格式:
    在这里插入图片描述
    gap层提供的函数接口:uint32_t sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)
    HCI层提供的接口,ocf=0x00a,ogf=0x08
    在这里插入图片描述

  2. 广播的具体数据
    通过抓包工具得到的广播包的数据:
    在这里插入图片描述
    在这里插入图片描述

  • 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层。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值