zoukankan      html  css  js  c++  java
  • BLE主机之L2CAP层

    本文介绍L2CAP 部分

    L2CAP 的全称是 逻辑链路控制和适配协议,  L2CAP 是低功耗蓝牙的复用层,该层定义两个基本概念

    L2CAP 信道和L2CAP 信令,L2CAP 信道是一个双向数据通道,通向对端设备上的某一特定的协议或规范,

    经典蓝牙使用 L2CAP 的大部分功能,包括动态信道标识符,协议服务多路复用器、增强
    的重传、流模式等、相比而言,低功耗蓝牙只用到了 L2CAP 的较少功能。此处略过。

    低功耗蓝牙部分的 L2CAP 的功能总结为:

    1,支持数据的分割和重组,使得较大的报文可以在底层无线电中进行传输。

    2,复用信道,低功耗蓝牙中复用三条不同的信道。

    低功耗蓝牙中值使用固定信道:一个用于信令信道,一个用于安全管理器,还有一个用于

    属性协议。本问只介绍信令信道。

    由于信道传输的内容是报文,所以先去看看报文结构;


    L2CAP 层数据报文

    L2CAP 报文结构如下:

    净荷前端包含一个32位即4字节的报头,包括长度和信道标识符。

    长度标识后面的信息载荷部分的字节数,经典蓝牙中信息载荷还可以包含额外的报头和信息。但在低功耗蓝牙

    的L2CAP 层中并没有其他有意义的信息结构。

    由于低功耗蓝牙的信息载荷最大是23字节,MTU=23,所以所有低功耗蓝牙必须支持在空间传输27字节

    数据包,(23字节信息载荷和4字节L2CAP 报头), 

    由于本文介绍信令信道,所以在此先介绍 L2CAP 数据报文中的 L2CAP 命令数据包

    L2CAP 命令数据包

    L2CAP 命令数据包通过 L2CAP 数据包进行传输,见下面的结构,位于L2CAP 报文的信息载荷部分。

    结构解析如下:

    操作码:

    操作码包括下面三种:

    • 命令拒绝(command reject)
    • 连接参数更新请求(connection parameter update request)
    • 连接参数更新响应(connection parameter update response)

    标识符1字节

    用于匹配请求和响应,如,请求的标识符为0x35,则响应该请求的数据包也必须包含0x35作为标识符。

    而下一个请求不允许重复,需要依次递增,如果用完再从头开始,但是不使用0x00,这样的好处是

    可以多个请求同时发送。


     L2CAP 信道

    信道的概念

    信道是指一个数据包序列,连接两个设备上的一对服务。

    低功耗只支持固定信道。

    固定信道指的是两个设备一建立就已经存在的没有任何配置参数的信道。

    信道通过信道标识符进行标识,L2CAP 信道标识符如下:

    低功耗蓝牙一共使用3条信道:

    0x0004用于属性协议

    0x0005用于低功耗信令信道

    0x0006用于安全管理。

    本文只介绍低功耗蓝牙信令信道

    低功耗信令信道

    低功耗信令信道用于主机层级的信令。

    信令信道传输的为 L2CAP 命令数据包。数据包结构在前面 L2CAP 数据报文部分已经描述。

    下面通过不同命令数据包的用途分析来了解低功耗信令信道的用途。

    不同的命令操作码有不同的用途,下面来介绍不同的命令的操作码的用途来分析;

    命令拒绝

    用于拒绝设备收到的不支持的信息包,该命令与经典蓝牙中的命令拒绝完全一样,它包含一个原因代码以及相关的

    信息,原因代码就是表达拒绝的原因。

    “命令不理解”: 标识设备收到了不支持的命令

    “信令MTU溢出”: 表示设备接收到的命令大于23字节

     连接参数更新请求和响应

    用于从设备更新链路层的连接参数,这些参数包括连接事件间隔(从设备希望主设备允许从设备发送数据包的频率)

    、以及从设备延迟、还有监控超时。

    连接参数更新过程如下:

    什么情况下需要更新连接参数呢?

    在连接过程中,有时候连接事件的间隔太短,导致电量消耗过快,在从设备延迟大还好说,否则的话,从设备

    会频繁的侦听链路,此时,从设备就可能需要更新链路参数,来降低电量的消耗。

    要注意的是,

    1,连接参数更新请求命令仅用于从设备向主设备发送,因为主设备随时都能启动链路层连接参数更新。

    如果是主设备发送。从设备会人为这是一个错误。返回命令不理解。

    2,从设备可以在任何时候发送该命令,收到该信息的主设备可以修改连接参数,然后返回对应的响应。

      主设备也可以不同意从设备的请求参数,然后发送结果代码为拒绝的连接参数更新响应。此时从设备

      要么接受主设备希望的正在使用的连接参数,要么终止连接。

  • 相关阅读:
    我们工作为了什么
    为什么去国企(HP中华区总裁孙振耀退休感言)
    android中的所有activity间动画跳转
    [转]Eclipse进行可视化的GUI开发3大GUI插件
    用Monkey测试android程序
    大学之后拉开差距的原因
    dataset 和 datareader 区别
    曾经运行该线程的应用程序域已卸载。
    guid.tostring() 格式化指南
    vs 使用技巧
  • 原文地址:https://www.cnblogs.com/yunxiangworld/p/7997614.html
Copyright © 2011-2022 走看看