逻辑链路控制和适配协议(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. 解决ClickOnce签名过期问题(转载)

    原文地址:http://www.cnblogs.com/xuhaibiao/archive/2009/06/23/1509692.html 场景:用于生产环境的项目进行系统升级,在发布ClickOnc ...

  2. android自定义弹出框样式实现

    前言: 做项目时,感觉Android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个. 废话不说先上图片: 实现机制 1.先自定义一个弹出框的样式 2.自己实现CustomD ...

  3. oracle创建临时表没有权限

    执行下面: grant create any table to 用户名称

  4. JVM的启动流程

    JVM工作原理和特点主要是指操作系统装入JVM,是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂 ...

  5. swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

    swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3  注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...

  6. 转:.NET获取当前方法名或调用此方法的方法名

    Introduction Before .NET, we were always looking for a way to log current method name in a log file ...

  7. TYVJ P1012 火柴棒等式 Label:枚举

    背景 NOIP2008年提高组第二题 描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法 ...

  8. 【wikioi】1295 N皇后问题

    题目链接 算法:DFS 刚开始卡了我一下,我竟然傻到用二维来放皇后= =.导致一直TLE.... 其实用1维就行了的,下标为行(列),值为列(行) 我是用下标为列做的. 上代码 #include &l ...

  9. Solve problem 'SURF' is not a member of 'cv'

    SIFT and SURF were moved to nonfree module. You need to add #include <opencv2/nonfree/nonfree.hpp ...

  10. Scrum会议3

    组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.18 已完成内容: 1.GUI布局设计 2.通过在网上大量阅览代码,大体了解连连看游戏制作 ...