一、概述

BLE广播是低功耗蓝牙协议最重要的组成部分之一。深入理解如何使用广播可以有效降低蓝牙模块的功率、提高连接速度以及改善连接的可靠性。

BLE蓝牙协议一共有三层,分别是应用层,主机层和控制器层。

应用层:涵盖与应用程序实现的实际用例相关的所有内容的逻辑、用户界面和数据处理。 应用层协议的架构高度依赖于每个特定用例(use case)。它包括各种各样的配置文件(profile)。配置文件定义了层与层之间(App <-> Host)的垂直交互以及设备之间特定层的对等交互。每个特定用例,例如心率配置文件(HRP),由一项或多项服务(service)组成。
主机层:包括逻辑链路控制与适配协议(Logical Link Control and Adaptation Protocol,即L2CAP),属性协议(Attribute Protocol,即ATT),安全管理(Security Manager,即SM),通用属性配置文件(Generic Attribute Profile,即GATT)和通用访问配置文件(Generic Access Profile,即GAP)。

控制器层:包括物理层(Physical Layer),链路层(Link Layer)。主机与控制器之间通过HCI(Host Controller Interface)接口连接。

二、BLE物理层

BLE频道

BLE物理层的基本特征参数如下:

调制方式GFSK速率1Mbps
通道数量40频带间隙2MHz

BLE的频谱范围时2.402GHz ~ 2.480GHz,一共分为40个频道,每个频道带宽为1MHz,从通道0到通道39,其中通道37,38和39是广播频道,其他是数据通道。最新的BLE规范(5.x),对广播通道进行的扩展,使蓝牙设备也可以在其他通道上发送广播报文。本文主要介绍基本广播通道37,38和39。它们在2.4GHz的频谱范围内的位置如下图所示。

 BLE广播间隔

当一个BLE设备处于广播模式时,它周期性地在每个广播通道上发送广播报文。每两组广播报文之间的时间间隔由一个固定的间隔和一个随机的延时组成,其中固定间隔取值范围是20毫秒到10.24秒,步长为0.625毫秒,随机延时是一个取值范围是0到10毫秒的伪随机值,由系统自动产生并加入到广播间隔中。这主要是用来减少设备之间的信号冲突的几率,提高BLE连接的可靠性。另外需要提醒一下的是,广播间隔和连接间隔不是同一个概念。

虽然广播间隔的取值范围很广,但大部分的设备遵循以下广播间隔取值指引。

  • 小于100毫秒:适用于激进的设备
  • 100 ~ 500毫秒:常用快速广播,适用于大部分设备
  • 1000 ~ 2000毫秒:适用于连接网关且对延时要求不高的设备

三、BLE广播报文

广播报文结构

一个完整的BLE广播报文由四部分组成,分别是前导码、接入地址、协议数据单元和CRC校验码。

  • 前导码:用来同步时序,可以是0x55或者0xAA,由接入地址的第一个比特决定。如果接入地址的第一个比特是“0”,则前导码是0x55;如果接入地址的第一个比特是“1”,则前导码是0xAA。 在广播报文里面,这一字节为0xAA。
  • 接入地址:长度为4个字节,广播报文的接入地址为0x8E89BED6
  • 协议数据单元:包含两个字节的报头和0 ~ 37字节的净荷
  • CRC校验码:长度为3个字节

广播报文之PDU报头

  • PDU Type:PDU类型,标识广播报文的类型
  • RFU:Reserved For Future,保留位
  • TxAdd:发送地址类型,标识广播地址是公有地址还是随机地址
  • RxAdd:接收地址类型,广播报文不使用这一比特
  • Length:长度,标识净荷的长度(6 ~ 37字节)

PDU类型

PDU类型值PDU类型说明
0b0000ADV_IND:通用广播指示可连接到任何主设备
0b0001ADV_DIRECT_IND:定向连接指示与ADV_IND类似,表示可连接到特定主设备
0b0010ADV_NONCONN_IND:不可连接指示不可连接,对周边设备广播
0b0110ADV_SCAN_IND:可扫描指示类似ADV_NONCONN_IND,但可通过扫描响应获得额外的信息
0b0011SCAN_REQ:主动扫描请求由扫描设备主动发送
0b0100SCAN_RSP:主动扫描响应由广播设备发送的扫描响应
0b0101CONNECT_REQ:连接请求由发起设备(主设备)发起连接请求
其他值保留保留

广播报文之PDU净荷

  • AdvA: 广播设备地址,分为公有地址和随机地址。
  1. 公有地址:类似MAC地址,由OUI和一个唯一的数字组成
  2. 随机地址:为了防止设备被跟踪,广播地址可以是随机的。随机地址又分为静态设备地址(Static Device Address)、私有设备地址(Private Device Address)和不可解释私有地址(Non-resolvable Private Address)。
  • AdvData:广播数据,包含N个AD Structure,每个AD Structure由Length,AD Type和AD Data组成
Length (长度)AD Type和AD Data的长度
AD Type (类型)指示AD Data数据的含义
AD Data (数据)广播数据

广播报文之CRC检验码

报文的最后是3个字节的循环冗余校验。CRC对报头、长度域以及净荷域进行计算。该CRC的计算公式如下:

CRC = x^{24} + x^{10} + x^{9} + x^{6} + x^{4} + x^{3} + x^{1} + x^{0}

(未完待续)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐