zoukankan      html  css  js  c++  java
  • Bluetooth L2CAP介绍

    1. 介绍

    L2CAP,Logical Link Control and Adaptation Protocol,即逻辑链路控制和适配协议,是蓝牙系统中的核心协议
    相应的规范位于Core Version 4.1的Vol 3:Part A

    其在蓝牙架构如下图所示

    111

    2. 实现

    L2CAP负责适配基带中的上层协议,它同LM并行工作,向上层协议提供面向连接和无连接的数据服务,并提供多路复用,分段和重组操作,允许高层次的协议和应用能够以64KB的长度发送和接收数据包(L2CAP Serveice Data Units, SDU)

    L2CAP提供了逻辑信道,名为L2CAP Channels,即在一个或多个逻辑链路上进行多路复用

    L2CAP提供了如下功能

     - 协议/信道多路复用 
     - 分段和重组 
     - 服务质量

    L2CAP可分为两个部分

     - Channel Manager
     - Resource Manager
    TIP:
    L2CAP只支持ACL,而不支持SCO/eSCO(用预留宽带进行实时语音传输)  
    L2CAP不支持可靠的广播信道

    l2cap

    3. 通用操作

    3.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

    3.2 设备间操作

    2323

    上图说明了CID在不同设备对等L2CAP实体间通信中的使用方式

    面向连接的数据信道提供了两设备间的连接,绑定逻辑链路的CID则用于标识信道的每一端
    对于无连接的数据信道,当用于广播传输时限制了传输的方向;当用于单播传输时则没有限制

    部分信道都保留用做特殊目的,具体如下图
    1111

    如0x0001表示Signalling Channel,用于创建和建立面向连接的数据信道,并可对这些信道的特性变化进行协商(ACL-U)

    3.3 层间操作

    121212

    3.4 操作模式

    L2CAP Channels可运行在以下模式之一

     - 基本L2CAP模式(Basic L2CAP Mode)    /* 也是默认模式 */
     - 流量控制模式(Flow Control Mode) 
     - 重传模式(Retransmission Mode) 
     - 加强版重传模式(Enhanced Retransmission Mode) 
     - 流模式(Streaming Mode) 
     - LE Credit Based Flow Control Mode

    4. 数据包格式

    本章节介绍数据包格式,Data Packet Format

    L2CAP有以下几种连接类型:

     - Connection-oriented Channels in Basic L2CAP mode 
     - Connectionless Data Channel in Basic L2CAP mode 
     - Connection-oriented Channel in Retransmission/Flow Control/Streaming Mode 
     - Connection-oriented Channels in LE Credit Based Flow Control Mode

    对于不同的连接类型,数据包格式是不同的;且Information payload是基于Little Endian byte order

    4.1 B-Frame

    B-Frame格式如下图所示
    bf

    B-Frame各字段含义如下

    Length:              2 bytes, Information payload的字节数(0~65535) 
    Channel ID:          2 bytes, 对端目的信道 
    Information payload: 0~65535 bytes

    4.2 G-Frame

    G-Frame格式如下图所示
    gf

    G-Frame各字段含义如下

    Length:     2 bytes, Information payload和PSM的字节数(0~65535) 
    Channel ID: 2 bytes, 对于无连接传输使用固定值0x0002 
    PSM:        >= 2 bytes, Protocol/Servece Multiplexer

    关于PSM,其取值范围如下所示,具体指参考Channel Identifiers
    psm 

    4.3 S-Frame/I-Frame

    I-Frame用于在L2CAP实体间进行信息传输;S-Frame则用于确认I-Frame和I-Frame的重传请求

    S-Frame和I-Frame格式如下图所示
    slf

    S-FrameI-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有三种模式

     - Standard Control Field: 用于Retransmission mode and Flow Control mode 
     - Enhanced Control Field: 用于Enhanced Retransmission mode and Streaming mode 
     - Extended Control Field: 用于Enhanced Retransmission mode and Streaming mode

    Standard Control Field格式如下
    111 

    Enhanced Control Field格式如下
    222 

    Extended Control Field格式如下
    333 

    Control Field各字段含义如下

    SAR:    (2 bits),    Segmentation and Reassembly, 指明该L2CAP是否是分段过
    TxSeq:  (6/14 bits), Send Sequence Number,        对发送的I-Frame计数, 用于分段和重组
    ReqSeq: (6/14 bits), Receive Sequence Number,     接收方用于应答I-Frame和请求重传
    R:      (1 bits),    Retransmission Disable Bit,  用来实现Flow Control
    S:      (2 bits),    Supervisory function,        表示S-Frame的type
    P:      (1 bits),    Poll,                        置1表示从接收方征求相应 
    F:      (1 bits),    Final,                       相应P置1的S-Frame

    SAR取值及含义如下
    a1 

    S取值及定义定义如下
    b1

    4.4 LE-Frame

    LE-Frame格式如下图所示
    lef

    LE-Frame字段含义与其他Frame类似

    5. 信号包格式

    本章节介绍信号包格式,Signaling Packet Format

    这里介绍的是在对端设备上两个L2CAP实体间传递的信号命令(Signaling Commands)
    这些信号命令通过Signaling Channel来传输
    对于ACL-U逻辑链路应该使用CID 0x0001, 而对于LE-U则应该使用CID 0x0005

    通用的信号包格式如下

    image

    Field类似B-Frame,不详述;值得一说的是payload长度
    image

    另需要注意:
    一个C-Frame通过0x0001信道可以传递多个命令;而一个C-Frame通过0x0005信道则只能传递一个命令

    image

    上图显示了信号命令的通用格式,各字段含义如下

    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

    Command_list

    6. 参数配置选项

    本章节介绍参数配置选项,Configuration Parameter Options,惭愧,原文晦涩难懂,哥不甚理解

    image 

    各字段含义如下所示

    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

    7. 状态机

    这里指的是面向连接信道(Connection-oriented Channel)状态机(State Machine),适用于双向CID
    介绍了状态(state),引起状态变化的事件(event)及事件相对应的动作(action)

    7.1 状态机

    如下图所示,发起请求的一方是客户机,服务器接收请求,应用层的客户既可以发起也可以接收请求
    image
    命令规则为:

     - 两层之间的界面上(垂直方向)用下层的缩写名作前缀, 为上层提供服务, 如L2CA 
     - 两个同层实体之间的接口(水平方向)则使用协议缩写作为前缀, 如L2CAP
     - 来自上层的事件称作请求Request(Req), 相应的答复称为确认Confirm(Cfm) 
     - 来自低层的事件称为指示Indication(Ind), 相应的答复称为相应Response(Rsp)

    7.2 事件

    在L2CAP层中,只有超时事件是由本层产生,事件分为5类:

    - 来自下层的指示(Indication)和确认(Confirm) 
    - 来自上层的请求(Request)和相应(Response) 
    - 来自对等层的数据 
    - 来自对等层的请求和相应 
    - 超时事件

    7.3 动作

    动作可分为5类:

     - 对上层的确认(Confirm)和指示(Indication) 
     - 对下层的请求(Request)和相应(Response) 
     - 发给对等层实体的数据传输 
     - 发给对等层的请求和相应 
     - 计时器设置

    7.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

    参考:
    <逻辑链路控制和适配协议规范>

  • 相关阅读:
    iframe显示高度自适应 兼容多浏览器
    Asp.Net在Global.asax中实现URL 的重写
    文件流下载 ASP.NET
    Asp.Net实现全局定时器功能
    C#中获取本机IP地址,子网掩码,网关地址
    Asp.Net缓存实例
    Google API 天气数据缓存到一个XML中
    获取服务器信息
    C# NET 中英混合字符串截断实例
    Asp.Net实现长文章分页显示功能
  • 原文地址:https://www.cnblogs.com/hzl6255/p/3801732.html
Copyright © 2011-2022 走看看