BLE中GAP层中广播、扫描、连接等概念在LL层的具体实现

发布时间 2023-06-15 15:52:27作者: 不回本不改名

BLE中GAP层中广播、扫描、连接等概念在LL层的具体实现

在spec中GAP的章节里对广播、扫描、连接的概念进行了说明。但缺乏具体实现的解释。

Vol 3: Core System Package [Host volume]

Part C: Generic Access Profile

而在LL层章节中则提供了相关GAP相关数据包交互的流程。

Vol 6: Core System Package [Low Energy Controller volume]

Part B: Link Layer Specification

4 Air Interface protocol

为了更好的理解BLE中GAP协议,对LL层相关基本流程进行分析是很有意义的。这里只对GAP中的传统(Legacy)广播、扫描连接进行基本分析。扩展广播和扫描连接在另外章节做分析。为了能更好的从LL层向GAP层过度,这里我们仍采用LL层中Physical channel的定义来做分类。

Advertising physical channel 的交互

广播

广播包解析

传统广播使用的基本广播包ADV_IND PDU结构如上,该PDU被包含在LL层的封包中。PDU结构包含

  • AdvA:广播地址,即MAC地址

  • AdvData:广播数据,0-31长度,格式有相关要求。

对于其他类型的广播,PDU结构会有区别。例如定向广播还会包含主机设备地址,用于指定哪个主机允许搜到该广播信号。具体情况需查询spec中的说明。

广播流程

​ 广播流程如上图,广播设备连续在37、38、39三个广播信道上发送广播包,作为一个广播事件周期。

扫描

扫描流程

​ 扫描流程为主机监听广播包后,发起扫描请求和接收扫描响应的过程。具体流程如下:

  1. 从机设备进行广播,周期性发送广播包ADV_IND

  2. 当主机监听到从机设备发送的广播包后,可以向从机设备发送扫描请求包SCAN_REQ

  3. 但从机听到主机发送的扫描请求包后,可以进行响应并发送扫描响应包

该过程用于主机设备在不与从机设备发生连接的情况下,能获取更多的信息。

需要注意的是,广播类型可以设置为不可扫描的(Non-scannable)。这样的广播主机发送扫描请求包将得不到从机的应答。

扫描请求包

基本的扫描请求包SCAN_REQ格式如上,包含:

  • ScanA:扫描设备的MAC地址
  • AdvA:广播设备的MAC地址

扫描响应包

基本的扫描响应包SCAN_RSP格式如上,包含:

  • AdvA:广播设备的MAC地址
  • ScanRspData:扫描响应数据,0-31字节。格式要求和广播数据意义。

连接

连接建立流程

连接建立流程如下:

  1. 从机发送广播包
  2. 主机收到广播包后,向从机发送连接请求包。
  3. 双方根据连接请求包中的内容,同步连接参数。然后在协商好的时间点进行连接事件(交换连接数据包)

这里的流程说明比较简略。具体的流程说明和参数解释需参考开头说的spec里的章节。

连接请求包

连接请求包内如如上,包含:

  • InitA:主机MAC地址
  • AdvA:从机MAC地址
  • LLData:连接建立参数

其中LLData中的参数包含:

  • AA:链路层的访问地址Access Address。即把LL包的AA又复制了一遍过来。

  • CRCInit:CRC校验的初始值

  • WinSize:发送窗口的大小

  • WinOffset:发送窗口的偏移

  • Interval:连接间隔

  • Latency:可以跳过的连接事件

  • Timeout:连接超时时间

  • ChM:可用连接数据信道图

  • Hop:跳频算法

  • SCA:休眠时钟精度

相关参数只做简单介绍,具体说明请参考spec。

Data Physical Channel 的交互

连接数据交互

数据通道的信息交互已经和GAP层无关了,GAP层类似于OSI中的网络层,负责将设备进行拓扑组网。现在连接已经建立,剩下的就是更高层次的通信需求。

连接数据交换过程

img

上图为连接事件中主从数据交换的过程示意图。相关过程如果要展开来讲会涉及高层次协议概念,这里读者只需了解它的本质只是简单的主从数据包交换即可。

连接数据PDU格式

数据交互部分的PDU内容与LL层和GAP层已经无关了,而是涉及L2CAP层概念,在L2CAP层中的PDU分为各种类型,例如上图是L2CAP中B帧类型的PDU结果。这里读者无需了解这个B帧是什么,只需要知道数据交互也还是以PDU形式进行的即可,而PDU中具体的内容则会在L2CAP层协议得解析文章中再做具体分析。

连接控制交互

连接控制的交互涉及到上次许多协议的概念,例如SMP层的加密请求,PHY层的通信速率改变、GAP层的连接参数更新等。这些行为具象化到LL层就是连接控制交互的各种PDU。由于本文只关注LL层和GAP层的联系,因此只以连接参数更新为例进行介绍,其他请参考spec。

PDU基本结构

连接控制PDU基本结构如上,其中:

  • Opcode:为operation码,指示是何种操作,在上一篇PDU总结中对所有的控制PDU都进行了总结,详情情况上一篇博客。

  • CtrData:具体操作内容。

连接参数更新

连接参数更新的流程如上图。详细说明参考spec如下章节

Vol 6: Core System Package [Low Energy Controller volume]

Part B: Link Layer Specification

5 Link Layer control

5.1 Link Layer control procedures

连接参数更新请求包

连接参数更新请求包的Opcode为0x00,即LL_CONNECTION_UPDATE_IND。CtrData中包含连接参数,具体内容和连接请求包一样。

总结

LL层作为支撑,将上层协议的各种概念都具象化为一种种PDU,然后组成包发到空中。通过对PDU的内容结构,PDU的交互方式进行分析了解,才能更好的明白上次协议的各种概念。