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三个广播信道上发送广播包,作为一个广播事件周期。
扫描
扫描流程
扫描流程为主机监听广播包后,发起扫描请求和接收扫描响应的过程。具体流程如下:
-
从机设备进行广播,周期性发送广播包ADV_IND
-
当主机监听到从机设备发送的广播包后,可以向从机设备发送扫描请求包SCAN_REQ
-
但从机听到主机发送的扫描请求包后,可以进行响应并发送扫描响应包
该过程用于主机设备在不与从机设备发生连接的情况下,能获取更多的信息。
需要注意的是,广播类型可以设置为不可扫描的(Non-scannable)。这样的广播主机发送扫描请求包将得不到从机的应答。
扫描请求包
基本的扫描请求包SCAN_REQ格式如上,包含:
- ScanA:扫描设备的MAC地址
- AdvA:广播设备的MAC地址
扫描响应包
基本的扫描响应包SCAN_RSP格式如上,包含:
- AdvA:广播设备的MAC地址
- ScanRspData:扫描响应数据,0-31字节。格式要求和广播数据意义。
连接
连接建立流程
连接建立流程如下:
- 从机发送广播包
- 主机收到广播包后,向从机发送连接请求包。
- 双方根据连接请求包中的内容,同步连接参数。然后在协商好的时间点进行连接事件(交换连接数据包)
这里的流程说明比较简略。具体的流程说明和参数解释需参考开头说的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中的网络层,负责将设备进行拓扑组网。现在连接已经建立,剩下的就是更高层次的通信需求。
连接数据交换过程
上图为连接事件中主从数据交换的过程示意图。相关过程如果要展开来讲会涉及高层次协议概念,这里读者只需了解它的本质只是简单的主从数据包交换即可。
连接数据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的交互方式进行分析了解,才能更好的明白上次协议的各种概念。
标签:层中,LL,扫描,连接,广播,GAP,PDU From: https://www.cnblogs.com/simpleGao/p/17483115.html