逻辑链路控制和适配协议(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. 用DTD约束XML详解及示例

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. dtd的三种引入方式    (1)引入外部的dtd文件 <!DOCTYPE 根元素名称 SYSTE ...

  2. python 类的初始化

    虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性.例如,Person类应该在创建的时候就拥有 name.gender 和 birth 属性,怎么办? 在 ...

  3. Linux下压缩与解压命令tar

    Linux下常见压缩文件的扩展名 *.gz:gzip压缩的: *.bz2:bzip2压缩的: *.tar:tar程序打包但没有压缩的: *.tar.gz:打包后并经过gzip压缩的: *.tar.bz ...

  4. HDU3491 Thieves(最小割)

    题目大概说,一个国家有n个城市,由m条双向路相连,小偷们从城市s出发准备到h城市,警察准备在某些除了s和h外的城市布置警力抓小偷,各个城市各有警力所需的数目.问警察最少要布置多少警力才能万无一失地抓住 ...

  5. Cyclic Nacklace[HDU3746]

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. BZOJ4032 : [HEOI2015]最短不公共子串

    第一问: 对B串建立SAM,暴力枚举A的每个子串,在SAM上走,若失配则可行. 第二问: 设g[i][j]表示B串的第i个字符之后最早出现的字符j的位置,暴力枚举A的每个子串,按照g贪心地走,若失配则 ...

  7. sprintf() in c

    Declaration Following is the declaration for sprintf() function. int sprintf(char *str, const char * ...

  8. TYVJ P1004 滑雪 Label:记忆化搜索

    背景 成成第一次模拟赛 第三道 描述     trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行的路线必须向下倾斜.    ...

  9. 【wikioi】1033 蚯蚓的游戏问题(费用流)

    http://wikioi.com/problem/1033/ 这题也是很水的费用流啊,同之前那题一样,拆点然后建边,容量为1,费用为点权.然后建个源连第一行每个点,容量为1,费用为0,然后最后一行每 ...

  10. HDU 4417 Super Mario(划分树+二分)

    题目链接 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...