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

------

关于文档介绍的pdf,经常有网友私信索要,故提供百度网盘链接如下,如有需要,请自行下载:

链接:https://pan.baidu.com/s/1KyPG93mhAxnL2VRIxlFQKQ
提取码:fohn

posted @ 2019-04-24 17:53  unrulife  阅读(5039)  评论(4编辑  收藏  举报