zoukankan      html  css  js  c++  java
  • 蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解

    一直搞不太清楚蓝牙BLE协议,不知道LL层和L2CAP层是如何划分的,后来博士给我讲了讲就理解了,写下来,做个记录:

    1. 我们知道,除了蓝牙5.1新出的CTE,所有的BLE都是如下类型的包:

    image

    对于连接后的通讯包,PDU的最前面两个字节为header,header的最前两个bit为LLID,蓝牙BLE就是通过LLID来区分LL层数据和L2CAP层数据的。

    2. LL层的包如下:

    image

    其中LLID这两个bit就是用于区分LL层数据和L2CAP层数据的。

    当LLID为3时,该数据包为LL控制层数据,如下所示:

    image

    3. L2CAP层的包如下:

    当LLID为2时,该数据包为L2CAP层数据包的起始包,起始包后续会有L2CAP层的长度和L2CAP层的channel ID,

    当LLID为1时,该数据包为L2CAP层数据包的延续包,延续包后续没有L2CAP层的长度和L2CAP层的channel ID,但这种情况只有当

    MTU的值大于data length时才会出现这样的包,但一般我们不这样用。

    如下图为L2CAP层数据包格式:

    image

    4. L2CAP层的数据,根据channel ID不同,又分为三种不同的L2CAP指令,如下图所示:

    image

    上图可看出L2CAP包括三种指令:ATT指令,信令指令,SMP指令。

    其中,

    ATT指令用于传输应用通讯数据;

    信令指令用于更新连接间隔的指令,和拒绝错误操作码时使用此信令指令;如下图:

    image

    SMP指令用于配对过程;

  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/unrulife/p/10763843.html
Copyright © 2011-2022 走看看