Bluetooth L2CAP介绍
目录
逻辑链路控制和适配协议(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介绍的更多相关文章
- Bluetooth GATT介绍
目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...
- Bluetooth ATT介绍
目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...
- Bluetooth Baseband介绍
目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...
- Bluetooth RFCOMM介绍
目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...
- Bluetooth GAP介绍
目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...
- Bluetooth LMP介绍
目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...
- Bluetooth SDP介绍
目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...
- Bluetooth HFP介绍
目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...
- Bluetooth HCI介绍
目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...
随机推荐
- HealthKit开发快速入门教程之HealthKit开发概述简介
HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...
- Json格式数据某一列。
{title : '支付费率',elCls : 'center', dataIndex :'zfrate',width:100, renderer :function(value,obj){ if(o ...
- HDU 3966(树链剖分+点修改+点查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题目大意:营地的分布成树型.每个营地都有一些人,每次修改修改一条链上的所有营地的人数,每次查询单 ...
- TopCoder SRM 588 DIV2 KeyDungeonDiv2
简单的题目 class KeyDungeonDiv2 { public: int countDoors(vector <int> doorR, vector <int> doo ...
- 【BZOJ】1189: [HNOI2007]紧急疏散evacuate(二分+bfs+网络流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1189 表示完全不会QAQ.... 于是膜拜题解orz 二分时间........... 于是转换成判定 ...
- Mina传递对象
利用Apache MINA来传递对象,这对了MINA来说非常容易,并且这也是Java网络编程中很常用的应用. 首先看两个用来传递的Java对象MyRequestObject和MyResponseObj ...
- erlang-jiffy 安装手记
今天安装 erlang-jiffy 把握逼疯,不过最后还是成功了. 错误避免: rebar只能再英文目录下运行,如果编译jiffy的目录中有中文或其它unicode字符,将会出错 从git relea ...
- [转]C# WinForm动态调用远程Web服务
本文转自:http://blog.csdn.net/muyangjun/article/details/7930871 1.添加服务引用 2.在弹出的添加服务引用对话框地址栏中输入WebService ...
- 【新产品发布】【EVC8001 磁耦隔离式 USB 转 RS-485】
EVC8001 是 XiaomaGee 团队打造的精品级 USB 转 RS-485 隔离转换器,全部采用最优方案,每个细节均做到最优化.最佳化.亮点举不胜举: ==================== ...
- 连连看的设计与实现——四人小组项目(GUI)
项目GUI界面经过简单设计,整理如下:(图片截取致宠物连连看3.1) 点开游戏后界面显示: 点击菜单游戏—>初级 后显示 -------------------------- > 当游戏时 ...
