TI_BLE软件开发者指导6——L2CAP(笔记)

Texas Instruments CC2540/41
Bluetooth® Low Energy
Software Developer’s Guide
v1.3.2
Document Number:SWRU271F

《低功耗蓝牙开发权威指南》
Robin Heydon著,陈灿峰、刘嘉 译
机械工业出版社
2014.6

TI_BLE软件开发笔记6-L2CAP

标签:读书笔记 BLE

  • TI_BLE软件开发笔记6-L2CAP
    • 背景
    • L2CAP信道
    • L2CAP数据包结构
    • 低功耗信令信道
      • 1 命令拒绝
      • 2 连接参数更新请求和响应

Logical Link Control and Adaptation Protocol,L2CAP是个复用层,可以让BLE复用三条不同的信道。也支持数据的分割和重组功能,使得较大的报文可以在底层无线电中传输。

1 背景

和经典蓝牙完全不同,低功耗蓝牙的一个基本概念在于无连接模式。用户只在需要发送数据的时候才建立连接,其他时候设备可以长期处于断开连接状态。为了实现该功能,无连接模式必须扩展到L2CAP层,并且只能使用固定信道。这是由于固定信道无需配置任何的参数,一旦底层链路建立连接,固定信道便可立即投入使用,免去了建立信道耗费的额外时间。
在经典蓝牙中,信道分为两种类型:固定信道和面向连接信道。只要两个设备建立连接,固定信道就已经存在。固定信道主要作为信令信道。面向连接信道可以随时建立,只需要给对端发送一些L2CAP信令即可。

2 L2CAP信道

信道是指一个数据包序列,连接两个设备上的一对服务。在两个设备间允许同时启用多条信道。
BLE只支持固定信道。固定信道指的是两个设备一建立连接就已经存在的、没有任何配置参数的信道。得益于未来扩展的灵活性,还可以日后根据需要添加面向连接信道。
L2CAP信道标识符如下所示:

信道标识符 用法
0x0000 保留:不能使用
0x0001 经典蓝牙信令信道
0x0002 “无连接”信道
0x0003 AMP管理协议
0x0004 属性协议
0x0005 低功耗信令信道
0x0006 安全管理协议
0x0007 ~ 0x003E 保留:日后可能使用
0x003F AMP测试协议
0x0040 ~ 0xFFFF 面向连接信道

信道标识符0x0003用于当需要高速率传输数据时所使用的Alternate MAC/PHY协议。信道标识符0x003F用于测试Alternate MAC/PHY控制器。
BLE一共使用了3条信道:0x0004用于属性协议;0x0005用于低功耗蓝牙信令信道;0x0006用于安全管理。

3 L2CAP数据包结构

每个L2CAP数据包的净荷前端都包含一个32位比特报头。假设使用分割和重组,那么数据包的长度信息必须包含在包头中,以便判断数据包的结束。使用分割和重组机制需要为每个通过HCI接口的数据包打上标记,分为开始数据包还是延续数据包。
L2CAP数据包结构如下所示:
TI_BLE软件开发者指导6——L2CAP(笔记)_第1张图片
长度字段表示报头后的信息载荷字节数。在所有BLE信道上,信息载荷均始于23字节的最大传输单元(Maximum Transmission Unit,MTU)。MTU表示在一个L2CAP信道中信息载荷的最大字节数。这意味着,所有BLE设备必须支持在空间传输27字节数据包——4字节包头+23字节信息载荷。

4 低功耗信令信道

低功耗信令信道用于主机层级的信令。L2CAP命令数据包如下所示:
TI_BLE软件开发者指导6——L2CAP(笔记)_第2张图片
每个低功耗信令信道的数据包均含有一操作码,随后为各种参数。低功耗信令信道支持的命令操作码如下:

  • 命令拒绝
  • 连接参数更新请求
  • 连接参数更新响应

无论什么时候发送信令命令,其信息载荷总是包含一标识符。该标识符长度仅1字节,用于匹配请求和响应。例如,如果请求的标识符为0x35,则响应该请求的数据包也必须使用0x35作为标识符。如此一来,只要每个请求有不同的标识符,多个请求便能同时发送。由于在用完所有标识符之前不允许重复使用,实现时一般会采用增量操作以确保符合该规定,但有一个例外:不嗯能够使用标识符0x00.
在BLE中,由于只定义一种请求命令类型,并且该请求命令仅用于没有其他请求发送的情况,标识符的逻辑相对简单。

4.1 命令拒绝

“命令拒绝”用于拒绝设备收到的不支持的信息包。包含一个原因代码以及相关信息。其中的原因代码可以是“命令不理解”或“信令MTU溢出”。当接收到的命令大于23字节时可以使用“信令MTU溢出”原因代码。

4.2 连接参数更新请求和响应

“连接参数更新请求”命令可以让从设备更新链路层连接参数,这些参数包括连接事件间隔、从设备延迟以及监控超时,过程如下:

    participant 主设备
    participant 从设备
    从设备->主设备:L2CAP连接参数更新请求
    主设备->从设备:L2CAP连接参数更新响应
    从设备->主设备:链路层连接更新请求(瞬时)
    Note left of 主设备:瞬时
    Note over 主设备,从设备:启用新连接参数

在连接中,如果从设备希望修改当前的连接参数则可以使用该命令。连接参数更新请求命令仅用于从设备向主设备发送,因为主设备随时都能启动链路层连接参数更新控制规程。如果该命令有主设备发送,从设备会将其视为一个错误,并返回带有“命令不理解”原因代码的“命令拒绝”命令。
从设备可以在任何时候发送给命令。收到该信息的主设备如果可以修改连接参数,则将返回“连接参数更新响应”,其中的结果代码设为“接收”,随后主设备将会启动链路层连接参数更新控制规程。如果主设备不同意从设备的请求参数,可以发送结果代码为“拒绝”的连接参数更新响应命令以拒绝请求。此时从设备有两个选择,要么接受主设备希望的正在使用的连接参数,要么终止连接。

你可能感兴趣的:(TI-BLE,读书笔记)