BT-4の蓝牙技术原理の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应用通过分组头中的长度字段来进行一致性校验,并舍弃那些与长度字段不相符的分组。如果对信道的可靠性没有要求,那么只需将长度不符的分组丢弃; 如果对信道可靠性有要求,还需要向更高的协议层通报信道已不可靠的消息。可靠的信道被定义为具有可刷新的超时值的信道,这一选项用于通知接收端发送设备的链路控制|器 or 链路管理器在放弃发送之前,尝试发送一个L2CAP段所用的时间。 【斜体部分懵】

2. 状态机

L2CAP 面向连接信道假定不同协议层进行通信时有不同的状态。协议的这一部分描述了L2CAP面向连接信道的状态机,并定义了一些状态,引起状态转换的时间,以及响应时间的动作。
【状态机仅适用于双向信道!】【感觉好像是中断操作一般:定义不同的中断级别,中断触发条件,以及中断响应函数。。。】

客户和服务器分别代表请求的发起者和接收者。应用层的客户既可以发起也可以接收请求。

事件动作的命名规则如下:两个协议层之间的接口(垂直方向接口)使用为高层提供服务的低协议层的前缀,如L2CA。位于相同协议层的实体之间的接口(水平方向接口)使用协议的前缀(即在协议层标识前加上"P"),这样L2CA变为L2CAP。

从上层来的事件称为"请求"(Req),相应的回答称为"证实"(Cfm);
从低层来的事件称为"指示"(Ind),相应的应答称为"响应"(Rsp)。

需要有进一步的处理过程的响应,称为"中间应答"(Phd)。这些表示证实或应答的记号都是表示肯定的答复,如果有否定的应答,就在记号后面加上"Neg"后缀,如L2CAP_ConnectCfmNeg。高层的请求信号必须有相应的证实应答(表示动作的执行成功或者不成功),而低层对高层的指示信号并不一定需要相应的应答,例如当指示信号用于向高层通知本地触发事件的信息时。

2.1 事件

事件是指在一定时限内到达 L2CAP 层的消息。事件分为五类:

  • 底层来的指示(LP_*Ind)和证实(LP_*cfm);
  • 高层来的请求(L2CA_*Req)和响应(L2CA_*Rsp);
  • 来自对等协议层的数据(L2CAP_*);
  • 对等层来的信号请求和应答消息;
  • 定时器超时引起的事件(RTX,ERTX)。

【每一类都有很多命令,不再列举】

2.2 动作

动作分为五类:

  • 对高协议层的证实(L2CA_*cfm)与指示(L2CA_*Ind);
  • 对低协议层的请求(LP_Req)和响应(LP_Res);
  • 对对等协议层的请求(L2CAP_Req)和应答(L2CAP_Res);
  • 对等协议层的数据传输;
  • 设置定时器;

2.3 信道操作状态

当信道被设置时,它将会处于不同的状态。图已给出,你仔细品品。

2.4 事件到行为的映射

不多说,上来自己动。
在这里插入图片描述

3. 数据分组格式

3.1 面向连接信道

在这里插入图片描述
各字段内容如下:

  • 长度:2字节。指出除L2CAP头之外的信息有效载荷的长度。该字段为在接收端对L2CAP分组进行重组提供了一种简单的完整性校验。
  • 信道 ID:2字节。用于标识分组的目的信道端点。
  • 信息:0~6535字节。包括来自上层协议的有效载荷(发出分组)或向上层协议传输的有效载荷(接收分组)。对面向连接分组的MTU( M T U c o n MTU_{con} MTUcon)的最小长度在信道设置过程中协商确定。用于信令分组MTU( M T U s i g MTU_{sig} MTUsig)的最小长度为48字节。

3.2 无连接数据信道

除了面向连接信道外,L2CAP还支持面向“组”的信道,在这种信道中分组将被发往组的所有成员。这种信道不提供质量服务,因此不可靠。
【面向组也就是广播的形式?】
在这里插入图片描述
各字段内容如下:

  • 长度:2字节。指出除L2CAP头之外的(PSM+信息有效载荷)的长度。
  • 信道 ID:2字节。用于标识分组的目的信道端点。
  • 协议/服务复用(PSM)器:最小为2字节,基于用作字段定位的 ISO309扩展机制,其值必须为奇数,即最低位为"1",最高位为"0",这样可以扩展到16位以上。PSM值分作两部分:第一部分用于指示协议,由蓝牙SIG分配;第二部分用于与服务发现协议(SDP)连系使用并动态分配。
  • 信息:0~65535字节。包含发送到所有组成员的有效信息载,所支持的最小连接 MTU( M T U c n l MTU_{cnl} MTUcnl) 为670字节。对于一些特殊设备,MTU可以小于MTU( M T U c n l MTU_{cnl} MTUcnl)。

L2CAP组服务接口提供的基本的组管理机制包括创建组、向组中添加成员、删除组成员,但是不能预先定义组。

4. 信令

在这里插入图片描述
指令中个字段内容:

  • 代码:1字节。用于表示指令的类型。

  • 标识符:1字节。用于请求与应答之间的匹配。该字段由请求设备设置,响应设备则在回复分组中使用相同的值表示应答,不同的指令必须使用不同的标识符。一个标识符在发起请求的分组发出后的360s时间内,不能被再次使用。在 RTX或ERTX定时器停止时,如果要重发同一个请求分组,那么必须使用相同的标识符。一个设备如果收到相同的请求分组,应该用相同的应答分组进行应答。0x0000被定义为非法标识符,不得用于任何指令中。如果收到含有不合法标识符的分组,该分组将被丢弃。

  • 长度:2字节。用于指示指令数据字段的长度,不包括代码段、标识符和字段。

  • 数据:数据字段的长度是可变的,格式由代码段来决定。

5. 配置参数选项

蓝牙协议通过使用选项分组的机制来提高对不同连接要求的协商能力,这种类型的分组包括选项类型字段,选项长度字段以及一个或者多个选项数据字段。
在这里插入图片描述
选项分组中各字段内容如下:

  • 类型:1字节。选项类型字段指定了将被配置的参数。字段的最高位比特决了如果选项没有识别时所应采取的动作,该比特位取值意义如下:
    0——选项必须被识别,拒绝配置请求;1——选项只是一个提示,跳过该选项,继续处理过程。

  • 长度:1字节。指出选项的有效载荷的字节数,不包括类型和长度字段。

  • 选项数据:表示具体的选项。该字段的内容由选项类型决定。

可以进行配置的选项包括最大传输单位(MTU)选项、超时刷新选项、服务质量选项,具体内容参见协议。

对信道参数的协商分为三步来进行:
① 向远端设备通知本地设备所希望设置的一些非缺省值参数。
② 远端设备同意或拒绝这些参数(包括一些缺省参数)。步骤1 和 步骤2 可以根据需要不断重复。
③ 在相反的方向上重复步骤1 和 2 ,直到本地设备和远端设备对参数的选择达成一致。
配置过程如下图所示:【这个图画的是啥玩意???】

5.1 最大传输单元

这一选项用于说明发送设备所能接受分组的有效荷载长度。MTU的类型码为0x01,长度为 2 字节;有效荷载MTU段表明 L2CAP分组的最大有效荷载长度。
在这里插入图片描述

5.2 刷新超时选项

该选项用于将发送设备的链路控制器/管理器在成功发送一个L2CAP段之前尝试的时限通知接收端,超过该时限发送还没有成功时,发送设备将放弃发送并对该分组进行刷新。刷新超时选项的类型码为0x02,有效载荷长度为2字节,其格式如图所示。
在这里插入图片描述

  • 刷新超时值以毫秒(ms)为单位。由于轮询的最小间隔为1.25 us,因此当该值为"1"时将无法在基带层执行重发操作。如果该值为1s,则意味着无限次的重发,这也就是可靠信道的特点。这种情况下链路管理器将持续重发一个段,直到物理链接断开。刷新超时选项值也是不对称的,默认值为OxFFFF,如果设备所要求的值与默认值不同,它将发送请求分组以指定新的刷新超时值。

5.3 服务质量选项

服务质量选项用于对信道上的数据流参数进行说明。在配置请求分组中,请求设备用该选项说明请求设备输出数据流的情况。如果远端设备同意该选项的值,则在返回的肯定应答分组中载入相同的选项值以表示同意,否则返回否定应答分组并载入新的不同的选项值,以说明远端设备所希望的输入数据流的情况。

L2CAP应用只需要支持 “尽力而为” (Bet For) 服务。对其他服务类型的支持则是可选择的。尽力而为服务 不需要任何授权,因此如果在配置请求中没有对QoS选项进行配置,那么QoS 就默认为尽力而为服务;如果QoS需要授权,就必需要发送 QoS 配置请求,对选项进行设置。QoS 选项类型码为 0x03,有效载荷长度为 22 字节,选项格式如下图所示。
在这里插入图片描述
各字段内容如下:

  • 标志:1字节。被设置为全0,保留备用。

  • 服务类型:1字节。该字段用于说明所需要的服务的等级,如下表所示。如果值为0x00 表示没有传输业务,这时其他字段均可以忽略,如果选择缺省值(0x01),接收设备将把其余字段作为默认参数对待,忽略这些字段并将参数设置为默认值(这时QoS选项在应答分组中也被省略),或者返回新的参数值,以说明所希望的配置。

  • 传输速率:4字节。该字段用于说明数据传输的速率,以字节/秒为单位。一个 L2CAP应用可以持续的以该速率发送数据。突发数据可以以令牌存储段的长度发送。突发数据传送完以后,必须将传输的速率调整回令牌速率。对 “尽力|而为” 服务,一个L2CAP应用可以有尽可能大的带宽;对授权服务,L2CAP应用只在需要时有最大的带宽。

  • 令牌存储段长度:4字节。该字段表示令牌存储段(也就是缓冲区)的大小,以字节为单位。
    缺省值为0x00000000,表示不需要令牌存储段。
    如果存储段已满,应用或者等待,或者将数据丢弃。
    OFFFFFFFF表示与最大存储段长度匹配的通配符。该值的意义取决于服务类型。对 “尽力而为” 服务,表示L2CAP应用需要尽可能大的存储段;对授权服务,该值表示在应用请求时,需要有最大的缓冲区空间。

  • 峰值带宽:4字节。该字段用于限制分组发送的速率,以字节/秒为单位。一些中间系统可以利用该信息,更有效的分配资源。缺省值为0x000000,表示最大带宽未知。

  • 等待时间:4字节。表示从发送设备开始无线传输到发送第一个数据比特之间 的最大延迟时间。这一时间的精确度由服务类型指定的授权等级决定。缺省值为OxFFFFF,表示忽略该时间值。

  • 延迟变化:4字节。该字段值表示一个分组在信道上传输最大和最小的可能时延值之差。单位为微秒(us)。接收段通过该值决定缓冲区空间的大小。缺省值为OxFFFFFFFF,表示该值可忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值