蓝牙技术原理のBT协议の蓝牙核心协议の逻辑链路控制和适配协议-L2CAP
书上这部分的小节逻辑性有点不强。。。
0. Overview
L2CAP主要负责高层协议复用,分段与重组,组管理,以及终端设备之间服务质量的传输。
- L2CAP允许高层的协议和应用传输的L2CAP数据分组的最大长度为64K。
- L2CAP只支持ACL一种链路类型,不支持SCO链路。
- L2CAP依靠基带层上的完整性检查来保护传输的信息。且禁用ACL链路上的AUX1分组 ( 因其不支持完整性检查 )。
- L2CAP具有其他通信协议的接口(如SDP, RFCOMM, TCS等),下图给出了L2CAP与其他协议的关系。
- 若需提供可靠的传输,广播分组在L2CAP中是禁用的 ( 注意前提条件 ) 。


1. 基本操作
两个蓝牙设备单元之间的ACL链路通过链路管理器来建立。基带协议保证了数|据分组传输的有序性,也提供了全双工的信道。但是并不是所有的L2CAP的通信都是双向的。组播和非双向业务(如视频业务)只需要单工信道而不需要双工信道。
L2CAP通过基带层定义的一些机制,为数据传输提供了一条可靠的信道。基带协议中规定信道的可靠性通过以下一些机制来保证:
- 如果接收到请求,可以对数据进行完整性检查;可以对数据分组进行重发,直到接收到确认分组或者重发超过了一定的时限。由于有时候确认分组也可能会丢失,因此设置重发与超时是有必要的。
- 如果需要提供可靠的传输,广播分组在 CAP中是禁用的,因为基带协议中使用1位的序列码(SEQN)来滤除重复的分组,而所有包含 L2CAP分组第一段的广播分组中该序列比特都是相同的。
1.1 信道标识符
L2CAP是建立在"信道"概念的基础之上。信道标识符(CID)表示的是一条L2CAP的逻辑信道端点的名称。每条 L2CAP逻辑信道的每个端点都由一个信道标识符来标识。下表中给出了信道标识符的说明。从 0x0001 到 0x003F 的标识符保留用作特殊的L2CAP功能,如:
- 0x0001用于信令,用来创建一条面向连接的数据信道以及协商更改这些信道的特性;
- 0x0002用于所有输入的无连接数据业务;
- 空标识符0x0000被定义为一个非法标识符并不得用于任何目标端点;
- 其他的标识符可以根据实际应用的需要,由这些应用来自由管理。
在本地设备和远端设备之间同时存在多条L2CAP信道的情况下,本地设备中这些不同的L2CAP信道端点将对应不同的CID。
CID的分配与特定设备有关,即使与一个本地设备相连的多个远端为各自信道端点分配了相同的 CID 值,该本地设备仍然能够区分这些设备和信道。
【这两句话注意区分:第一句是说在设备A,远端设备B之间存在a,b,c,d四条L2CAP信道,那么a,b,c,d信道端点在设备A中将有不同的CID;第二句话意思是设备A与远端设备A, B,C,D四个设备相连,那么在设备B,C,D中,其信道端点的CID相同,那么此时设备A仍然可以识别出B,C,D设备和他们与设备A之间的信道。】

1.2 分段和重组
为了提高传输效率,在 L2CAP中定义了分段和重组(SAR)的操作。
SAR 支持最大传输单元(MTU)的传输,该传输单元的长度要比基带分组的最大长度还要大。通过把包含高层协议的分组分配到多个基带分组上传输,可以降低系统开销。所有的L2CAP分组都可以分段在基带数据分组上传输。L2CAP本身并不执行分段和重组的操作,但是L2CAP分组的格式可以支持将分组调整到较小的物理帧的长度。
在发送端,高层协议分组被分成多个较小的数据块,这些数据块通过主机控制器接口(HCL)被传送到链路管理器。
在接收端,根据HCI提供的或者分组头中包含的信息,分段的数据被重新组合成完整的L2CAP。
其实分段和重组只使用了基带分组的开销很小。基带分组中,ACL链路数据分组的 有效荷载头 中的 L_CH 字段表明了该有效荷载 为 L2CAP 分组的开始段或者后续段。
(1)分段
-
高层协议负责发往L2CAP层的分组长度在MTU之内;
-
L2CAP负责把这些分组分段,组成协议数据单元 (PDU) 发给下面协议层;
-
若 L2CAP 直接运行在基带协议基础上,那 L2CAP 应用将把高层协议分组分段组成基带协议,便于无线信道来传输。
-
若L2CAP运行在HCI上 ( 一般是这样 ),L2CAP应用将把已分段的数据块发送到主机控制器,然后这些数据块将被转换为基带分组。
注意!!!在与同一个L2CAP分组相关的所有L2CAP分段都被发送到基带层之前,不得再向同一个目的设备发送新的L2CAP分组。
(2)重组
基带协议对ACL分组的发送是按顺序的,并且通过16位 CRC 来确保数据的完整性。
通过自动重复请求(ARQ)机制,基带协议支持可靠的连接。基带控制器接收到ACL分组时,它或者在每个分组到达时即通知L2CAP层,或者在接收缓冲区已满或定时器超时时,将分组到达的消息通知L2CAP层。
L2CAP应用通过分组头中的长度字段来进行一致性校验,并舍弃那些与长度字段不相符的分组。如果对信道的可靠性没有要求,那么只需将长度不符的分组丢弃; 如果对信道可靠性有要求,还需要向更高的协议层通报

本文深入解析蓝牙技术中的L2CAP协议,涵盖其在蓝牙核心协议中的作用、基本操作如信道标识符与分段重组、状态机运作、数据分组格式、信令及配置参数选项等内容。
最低0.47元/天 解锁文章
2254

被折叠的 条评论
为什么被折叠?



