四 蓝牙低功耗(BLE)协议栈 之 L2CAP层

一 介绍

L2CAP(逻辑链路控制和适配协议层)是一个复用层,可以让低功耗蓝牙复用三条不同的信道。它也支持数据的分割和重组功能,使得较大的报文可以在底层无线电中传输。在经典蓝牙无线电中,L2CAP层提供的功能比这更多,也更为复杂。

在这里插入图片描述

二 L2CAP的数据格式

在这里插入图片描述

  • Length: Information payload的长度
  • Channel ID(CID): 信道
  • Information payload: 有效的数据

HCI层的ACL Data packet就是由L2CAP层构建的,或者说是L2CAP层的上一层委托L2CAP构建的。

2.1 CID

信道标识符用法
0x0000保留:不能使用
0x0001经典蓝牙信令信道
0x0002无连接信道
0x0003AMP管理协议
0x0004ATT协议
0x0005BLE信令信道
0x0006安全管理协议
0x0007 ~ 0x003E保留
0x003FAMP测试协议
0x0040 ~ 0xFFFF面向连接信道

低功耗蓝牙一共使用了三条信道,0x0004、0x0005、0x0006

2.2 Information payload

L2CAP层的有效数据字段,Information payload的最大传输单元(MTU, Maximum Transmission Unit)为23个字节,这就意味着所有BLE的设备必须支持在空中传播27字节的数据包,4字节报头加上23字节的有效数据。

当CID为0x0004的时候,payload的数据内容由ATT层决定,在 ATT 一文中再做介绍。

2.3 信令信道

CID = 0x0005表示信令通道,一般传输的是控制数据,比如改变对方的连接参数等。详细信息参看 《core_v5.1》 Vol 3 -> Part A -> 4 Signaling packet formats 数据格式如下图

image

当CID = 0x05时,传输的数据有三种类型:

  • 命令: Command
  • 命令拒绝: Command Reject
  • 响应:Response

code用来表示是哪一个信令。比如请求更新连接参数的code为0x12,响应更新参数请求的code为0x13,这里的id由L2CAP自己指定。

image

image

设备A给设备B发送Command,设备B可以回复Command Reject表示拒绝,或是回复Response。比如A给B发送了两个Command,Cmd1和Cmd2,Cmd1的id为123,Cmd2的id为124,B回复的Response分别为Res1(id为123)和Res2(id为124),A设备就是通过这个id来判断当前的res是和哪一条cmd对应的。

三 分包和重组

L2CAP的另外一个重要作用就是对数据包的拆分和重组,上层通过L2CAP传输数据给对方,L2CAP不应该限制其大小,但是蓝牙的Controller一般资源比较有限,太多数据传到Controller层可能它的内存就不够用了。
在这里插入图片描述

拆分的原理如上图所示,当数据比较短不需要分包的时候,L2CAP层的数据直接对应到HCI层的data段,LL层会根据HCI的handle来构建自己的Access Address,Access Address就代表了对端设备,LL根据HCI的PB来来设置LLID(10b 表示起始包),LL层根据HCI的length来构建header中的len,LL层将HCI的数据到封装到payload中,然后通过无线传输。

蓝色部分表示是需要拆分的后续包,后续包和第一包数据的差别在于HCI层的PB值为01b,LL层的LLID为01b,表示是后续包。

对端收到数据之后需要对数据包进行重组,L2CAP的length代表了payload、length(2个字节)和channel ID(2个字节)的总长度,第一包数据会将总长度、channel id以及部分数据传输给对端。对端收到数据之后,如果HCI中的 length等于 L2CAP 的length 值就表示已经收完了。如果HCI中的length小于 L2CAP的 length,表明还需要接收下一个延续包

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值