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 的交互


数据物理信道的PDU包含Header、Payload、MIC三部分。MIC为信息完整性码,只有启用数据加密鉴权功能才会有这个为。Payload为数据负载,而Header包含数据传输的应答重传控制信息。其中Header的内容如下:

  • LLID:指示数据包是LL Data PDU还是LL Control PDU
  • NESN:指示下一个期望的包的序列号
  • SN:指示当前包的序列号,与NESN一起决定了数据包是否传输 OK,是否要进行重传和流控处理
  • MD:More Data,指示后面是否跟有更多的数据,有了这个 MD 对端才会打开接收窗口继续接收数据
  • CP:CTEInfo Present,指示空口包是否带CTE字段
  • RFU:RESERVED FOR FUTURE USE,即预留没用的字段
  • Length:指示Playload + MIC (如果有的话)的长度
  • CTEinfo:指示CTE的类型和长度

这里数据物理通道的作用和GAP协议的关系已经不大了,LL Header的作用是LL层本身自己的数据应答和重传功能

连接数据(LL Data)交互

连接数据交换过程

img

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

连接数据PDU格式

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

要注意这里的图中的L2CAP PDU实际是LL Payload

连接控制(LL Control)交互

连接控制的交互涉及到上次许多协议的概念,例如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的交互方式进行分析了解,才能更好的明白上次协议的各种概念。

posted on   不回本不改名  阅读(696)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示