逻辑链路控制和适配协议(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. JS如何实现点击页面内任意的链接均加参数跳转?

    1.JS跳转页面参考代码 第一种: <script language="javascript" type="text/javascript"> wi ...

  2. 最大子序列和 HDOJ 1003 Max Sum

    题目传送门 题意:求MCS(最大连续子序列和)及两个端点分析:第一种办法:dp[i] = max (dp[i-1] + a[i], a[i]) 可以不开数组,用一个sum表示前i个数字的MCS,其实是 ...

  3. stack UVA 442 Matrix Chain Multiplication

    题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...

  4. Ubuntu 安装Redis体验

      背景:由于之前一直没有试过Linux的环境,今天加了内存之后,虚拟机开了3G,速度大大提高,对照博客试一下安装Redis的过程.   体验: 下载源码,解压,编译 $ wget http://do ...

  5. LightOJ1025 The Specials Menu(区间DP)

    给一个字符串,问有几种删字符的方式使删后的非空字符串是个回文串. 当然区间DP:dp[i][j]表示子串stri...strj的方案数 感觉不好转移,可能重复算了.我手算了"AAA" ...

  6. Extjs3.3 + swfUpload2.2 实现多文件上传组件

    [该上传组件已经停止更新,该上传组件已经在项目中使用.在使用过程中如果发现bug请大家回复此贴.2011-02-27] 主要是为了用swfUpload实现上传,为了新鲜好玩. 理解swfUpload可 ...

  7. BZOJ3461 : Jry的时间表

    fl[i]表示[1,i]操作一次,且在[j+1,i]处操作的最大值 1:把[j+1,i]改为b[i]: max(sum[j]+b[i]*(i-j)) =b[i]*i+max(-j*b[i]+sum[j ...

  8. 不通过App Store,在iOS设备上直接安装应用程序(转)

    今天在iOS设备上安装天翼云存储app,在safari上直接打开http://cloud.189.cn/wap/index.jsp,点击“点击免费安装”,如下图: 神奇的事情发生了,设备上直接下载ap ...

  9. Quest Central for DataBase 5.0.1,6.1 (软件+注册)

    找寻了多天,终于找到了,记录下,以后重装用.输入所有组件的licenses后,提示要注册,我选择了Canada,Google了一个地方的PostCode和phone number,填写,注册成功! 软 ...

  10. POJ 1177 Picture(求周长并)

    题目链接 看的HH的题解..周长有两部分组成,横着和竖着的,横着通过,sum[1] - last来计算,竖着的通过标记,记录有多少段. #include <cstdio> #include ...