逻辑链路控制和适配协议(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. DP ZOJ 3872 Beauty of Array

    题目传送门 /* DP:dp 表示当前输入的x前的包含x的子序列的和, 求和方法是找到之前出现x的位置(a[x])的区间内的子序列: sum 表示当前输入x前的所有和: a[x] 表示id: 详细解释 ...

  2. Oracle 使用小计

    1.Sequence 1.1 什么是Sequence? Sequence是oracle提供的一个对象,用于产生自增的主键.这与sql server的identity是类似的. 从数学的角度来说,其为一 ...

  3. UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)

    题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点. 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了. 那么问题就简单了, ...

  4. [转]C++设计模式:Builder模式

    Builder模式要解决的问题是,当我们要创建很复杂的对象时,有时候需要将复杂对象的创建过程和这个对象的表示分离开来.由于在每一步的构造过程中可以映入不同参数,所以步骤相同但是最后的对象却不一样.也就 ...

  5. robotium 新建 android 测试项目:

    注意:新建项目后再运行前一定要修改Manifest文件中的instrumentation 中的target package, 这个是测试的入口 1. 程序开始要通知系统我要测的app是什么 如何知道a ...

  6. git 用Gitk /usr/bin/which: no wish

    /usr/bin/which: no wish 安装yum -y install tcl 和yum -y install tk 显示所有的分支 $gitk --all 显示所有的分支 $gitk -- ...

  7. linux中shell变量$#,$@,$*,$?,$$,$!,$_,$0,$1,$2的含义解释

    变量说明:    $$    Shell本身的PID(ProcessID)    $!    Shell最后运行的后台Process的PID    $?    最后运行的命令的结束代码(返回值)    ...

  8. asp.net 微信企业号办公系统-流程设计--流程步骤设置-事件设置

    事件设置是设置当前步骤在提交前后或退回前后要执行的一些操作(该事件为服务器事件). 事件格式为:dll名称.命名空间名称.类名.方法名,这里不需要写括号和参数,处理时会自动带上当前流程实例的相关参数. ...

  9. 外部dtd

    引用外部dtd的语法:<!DOCTYPE 根元素 SYSTEM “DTD文档路径”> PUBLIC:公用 SYSTEM:私有 一个xml文件: 引入一个dtd文件(注意文件的后缀是dtd)

  10. 以下是关于Controller的一些Hint

    在经过路由分发之后,实际的应用Controller接管用户的所有请求,并负责与用户数据的交互.CI中所有的应用控制器都应该是CI_Controller的子类(除非你扩展了CI的核心,那么你的Contr ...