• 蓝牙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指令用于配对过程;

  • 相关阅读:
    isequal 和startswith 使用
    UVa10340
    UVa1368
    UVa455
    UVa1225
    UVa1586
    UVa 1585
    UVa10082
    UVa272
    NYOJ1
  • 原文地址:https://www.cnblogs.com/unrulife/p/10763843.html
Copyright © 2020-2023  润新知