逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol),是蓝牙系统中的核心协议,相应的规范位于Core Version 4.1的vol 3:Part A

 
L2CAP负责适配基带中的上层协议。它同LM并行工作,向上层协议提供面向连接和无连接的数据服务,并提供多路复用,分段和重组操作 
允许高层次的协议和应用能够以64KB的长度发送和接收数据包(L2CAP Serveice Data Units, SDU)。

L2CAP提供了逻辑信道,名为L2CAP Channels,即在一个或多个逻辑链路上进行多路复用。

L2CAP可分为两个部件 
~1 Channel Manager 
~2 Resource Manager(封装与调度、重传与流控制、分割(重组))

总的来说,L2CAP提供了如下功能 
~1 协议/信道多路复用 
~2 分段和重组 
~3 服务质量

tip: 
L2CAP只支持ACL,而不支持SCO/eSCO(用预留宽带进行实时语音传输)   
L2CAP不支持可靠的广播信道

1. 通用操作                                              

1. L2CAP Channel

L2CAP基于信道的概念,信道的每一个端点被称为信道标识符(CID) ,不同设备间CID可复用,但本地设备CID不可复用。

以下是CID ACL-U和AMP-U链路的name space(LE-U未列出)

CID Description Logical Link Supported
0x0000 Null identifier  
0x0001 L2CAP Signalling Channel ACL-U
0x0002 Connectionless Channel ACL-U
0x0003 AMP Manager Protocol ACL-U
0x0004~0x003E Reserved ACL-U
0x003F AMP Test Manager ACL-U
0x0040~0xFFFF Dynamically allocated ACL-U, AMP-U

2. 设备间操作

上图说明了CID在不同设备对等L2CAP实体间通信中的使用方式。

面向连接的数据信道提供了两设备间的连接,绑定逻辑链路的CID则用于标识信道的每一端。

对于无连接的数据信道,当用于广播传输时限制了传输的方向;当用于单播传输时则没有限制(?)

部分信道都保留用做特殊目的,具体如下图 
如0x0001表示Signalling Channel,用于创建和建立面向连接的数据信道,并可对这些信道的特性变化进行协商(ACL-U) 

3. 层间操作

4. 操作模式

L2CAP Channels可运行在以下模式之一(~1是默认模式) 
~1 基本L2CAP模式(Basic L2CAP Mode) 
~2 流量控制模式(Flow Control Mode) 
~3 重传模式(Retransmission Mode) 
~4 加强版重传模式(Enhanced Retransmission Mode) 
~5 流模式(Streaming Mode) 
~6 LE Credit Based Flow Control Mode

2. 数据包格式(Data Packet Format)                                

Data Packet Format

L2CAP有以下几种连接类型: 
~1 Connection-oriented Channels in Basic L2CAP mode 
~2 Connectionless Data Channel in Basic L2CAP mode 
~3 Connection-oriented Channel in Retransmission/Flow Control/Streaming Mode 
~4 Connection-oriented Channels in LE Credit Based Flow Control Mode

对于不同的连接类型,数据包格式是不同的,且Information payload是基于Little Endian byte order

1. B-Frame

Length: 2 bytes,Information payload的字节数(0~65535) 
Channel ID: 2 bytes,对端目的信道 
Information payload: 0~65535 bytes

2. G-Frame

Length: 2 bytes,Information payload和PSM的字节数(0~65535) 
Channel ID: 2 bytes, 对于无连接传输使用固定值0x0002 
PSM: >= 2 bytes, Protocol/Servece Multiplexer(具体指参考Channel Identifiers
 
Information payload: 0~65535 bytes

3. S-Frame/I-Frame

I-Frame用于在L2CAP实体间进行信息传输S-Frame则用于确认I-Frame和I-Frame的重传请求

Length: 2 bytes,除Basic L2CAP外的总字节数  
Channel ID: 2 bytes, 对端目的信道 
L2CAP SDU Length: 2 bytes, 只出现在Start I-Frame(SAR=0x01)中,表示总的SDU长度 
FCS: 2 bytes, Frame Check Sequence

Control Field有三种模式 
~1 Standard Control Field: 用于Retransmission mode and Flow Control mode 
~2 Enhanced Control Field: 用于Enhanced Retransmission mode and Streaming mode 
~3 Extended Control Field: 用于Enhanced Retransmission mode and Streaming mode

这三种Control Mode格式如下

  
 
 

SAR: (2bits)Segmentation and Reassembly,指明该L2CAP是否是分段过,定义如下 

TxSeq: (6/14bits)Send Sequence Number,对发送的I-Frame计数,用于分段和重组。 
ReqSeq: (6/14bits)Receive Sequence Number,接收方用于应答I-Frame和请求重传 
R: (1bits)Retransmission Disable Bit,用来实现Flow Control. 
S: (2bits)Supervisory function,表示S-Frame的type,定义如下 

P: (1bits)Poll, 置1表示从接收方征求相应 
F: (1bits)Final,相应P置1的S-Frame

4. LE-Frame

字段含义与上类似

3. 信号包格式(Signaling Packet Format)                              

信号包格式(Signaling Packet Format)

这里介绍的是在对端设备上两个L2CAP实体间传递的信号命令(Signaling Commands) ,这些信号命令通过Signaling Channel来传输。
对于ACL-U逻辑链路应该使用CID 0x0001, 而对于LE-U则应该使用CID 0x0005

通用的信号包格式如下

Field类似B-Frame,不详述,值得一说的是payload长度 

另需要注意: 
一个C-Frame通过0x0001信道可以传递多个命令,而一个C-Frame通过0x0005信道则只能传递一个命令

上图显示了信号命令的通用格式 
Code: 1 byte, 指定Command的类别 
Identifier: 1 byte, 用于标识一个Request和Response匹配对 
Length: 2 byte, data字段的长度 
Data: 0~N byte, Code字段来决定其格式

下图显示了规范所定义的Code类型,至于data的格式请参考规范vol 3-Part A-4

4. 参数配置选项(Configuration Parameter Options)                       

(原文晦涩难懂,哥不甚理解)

Type: 1 byte, 定义需要被配置的参数,若不能识别则由最高位决定其行为  
         0表示必须识别该选项,若无法识别则拒绝配置请求  
         1表示可以跳过该选项 
Length: 1 byte, 选项数据的字节数,若选项数据为空则为0 
Option Data: 由Type决定其内容(不详述,见规范vol 3-Part A-5)

Type字段具体含义 
1) Maximum Transmission Unit(MTU),           Type=0x01 
2) Flush Timeout Option,                            Type=0x02 
3) Quality of Service(Qos) Option,               Type=0x03 
4) Retransmission and Flow Control Option,   Type=0x04 
5) Frame Check Sequence(FCS) Option,        Type=0x05 
6) Extended Flow Specification Option,          Type=0x06 
7) Extended Window Size Option,                 Type=0x07

5. 状态机(State Machine)                                      

这里指的是面向连接信道(Connection-oriented Channel)状态机,适用于双向CID 
介绍了状态(state), 引起状态变化的事件(event)及事件相对应的动作(action)

1. 状态机

如下图所示,发起请求的一方是客户机,服务器接收请求,应用层的客户既可以发起也可以接收请求 
 
命令规则为: 
两层之间的界面上(垂直方向)用下层的缩写名作前缀,为上层提供服务,如L2CA 
两个同层实体之间的接口(水平方向)则使用协议缩写作为前缀,如L2CAP。 
来自上层的事件称作请求Request(Req), 相应的答复称为确认Confirm(Cfm) 
来自低层的事件称为指示Indication(Ind), 相应的答复称为相应Response(Rsp)

2. 事件

在L2CAP层中,只有超时事件是由本层产生

事件分为5类: 
来自下层的指示(Indication)和确认(Confirm) 
来自上层的请求(Request)和相应(Response) 
来自对等层的数据 
来自对等层的请求和相应 
超时事件

3. 动作

动作可分为5类: 
对上层的确认(Confirm)和指示(Indication) 
对下层的请求(Request)和相应(Response) 
发给对等层实体的数据传输 
发给对等层的请求和相应 
计时器设置

4. 信道操作状态

1) CLOSED 
2) WAIT_CONNECT 
3) WAIT_CONNECT_RSP 
4) CONFIG 
5) OPEN 
6) WAIT_DISCONNECT 
7) WAIT_CREATE 
8) WAIT_CREATE_RSP 
9) WAIT_MOVE 
10) WAIT_MOVE_RSP 
11) WAIT_MOVE_CONFIRM_RSP 
12) WAIT_CONFIRM_RSP

更多内容见最下方参考网址

参考: 
<逻辑链路控制和适配协议规范>

Bluetooth L2CAP介绍的更多相关文章

  1. Bluetooth GATT介绍

    目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...

  2. Bluetooth ATT介绍

    目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...

  3. Bluetooth Baseband介绍

    目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...

  4. Bluetooth RFCOMM介绍

    目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...

  5. Bluetooth GAP介绍

    目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...

  6. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  7. Bluetooth SDP介绍

    目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...

  8. Bluetooth HFP介绍

    目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...

  9. Bluetooth HCI介绍

    目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...

随机推荐

  1. IEEE754测试-软件

    为满足硬件开发的同事验证从传感器采集到的数据是否正确,也为了方便我自己, 随手做了这个小东西,主要涉及浮点数的存储问题!

  2. 输入框提示文字js

    <input style="margin-right: 0px; padding-right: 0px;" class="text" required=& ...

  3. JAVA项目JDK版本修改

    1.添加JDK    window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties

  4. spring获取webapplicationcontext,applicationcontext几种方法详解

    法一:在初始化时保存ApplicationContext对象代码: ApplicationContext ac = new FileSystemXmlApplicationContext(" ...

  5. POJ3162 Walking Race(树形DP+尺取法+单调队列)

    题目大概是给一棵n个结点边带权的树,记结点i到其他结点最远距离为d[i],问d数组构成的这个序列中满足其中最大值与最小值的差不超过m的连续子序列最长是多长. 各个结点到其他结点的最远距离可以用树形DP ...

  6. C# 序列化(Serialize)与反序列化(Deserialize)ZZ

    序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种种串行化的方式:1. ...

  7. JavaScript判断用户是通过电脑端还是移动端访问

    每个浏览器对应的useragent不同,JavaScript通过判断useragent的类型,便可以判断出用户所使用的浏览器类型,包括 IE.Firefox.chrome等.还可以判断用户是否通过移动 ...

  8. [Coursera]Machine Learning

    有用的链接: http://blog.csdn.net/yunlong34574/article/details/8851942

  9. 【BZOJ】1018: [SHOI2008]堵塞的交通traffic

    http://www.lydsy.com/JudgeOnline/problem.php?id=1018 题意:有2行,每行有c(c<=100000)个城市,则一共有c-1个格子,现在有q(q& ...

  10. jsoup httpclient 爬取网页并下载google图标

    jsoup下载地址 http://www.jsoup.org httpclient下载地址 http://hc.apache.org/downloads.cgi 其他jar包见附件 Crawler p ...