当前位置: 首页 > news >正文

猿创征文|十 BLE协议之L2CAP

img
个人主页:董哥聊技术
我是董哥,嵌入式领域新星创作者
创作理念:专注分享高质量嵌入式文章,让大家读有所得!
img

文章目录

    • 1、L2CAP介绍
    • 2、L2CAP协议架构
      • 2.1 逻辑信道划分
      • 2.2 信道模式
      • 2.3 设计思想
    • 3、帧结构
      • 3.1 面向连接信道
      • 3.2 无连接数据信道包
    • 4、参考文章

img

HCI传输层之上,就是L2CAP了,什么是L2CAP

1、L2CAP介绍

L2CAP:Logical Link Control and Adaptation Protocol:逻辑连接控制和适配协议,其允许更高层协议和应用,发送和接收数据包,也具备流量控制和重传功能,基于这些功能,使得高层协议应用开发人员可以不必了解基层协议而进行开发,其为两个通信的蓝牙设备提供一个端到端的通道。

L2CAP supports higher level protocol multiplexing, packet segmentation and reassembly, and the conveying of quality of service information.

L2CAP所具备的主要功能

  • 协议信道复用(protocol/channel multiplexing):能够区分高层协议,在信道建立时,协议复用功能用来发送请求来连接正确的上层协议;在数据传输时,逻辑信道复用必须能够把用同一个协议的不同几个高层实体的区分出来(一对多情况)。
  • 分段与重组(segmentation and reassembly SAR):高层协议需传输的数据长度不定,L2CAP 层控制了 PDU 的长度,不仅易于管理而且通过对数据标记分组,允许数据单元的交错,可以满足延时要求,发生错误时的重传也可以更加方便准确。
  • 每个信道流控(per-channel flow control):对传输的数据进行流量控制
  • 差错控制(error control)

2、L2CAP协议架构

image-20220802110331482
 

2.1 逻辑信道划分

在了解逻辑信道划分前,先了解以下CID:Channel Identifier

CID:逻辑链路通道的端点标识,其分配情况如下:

CID说明
0x0000无效标识
0x0001发送信令的信道
0x0002无连接的接收信道
0x0003-0x003f保留(特定功能)
0x0040-0xffff动态分配

其中的0x0004-0x0005被分配给BLE(低功耗蓝牙)

img

如果设备支持BLE功能,0x0005作为其信令通道,0x00040x0006也会被强制分配给BLE,分别作为ATTSecurityManager信道。
 

2.2 信道模式

逻辑信道有几种操作模式,最后一种是LE设备特有的:

  • Basic L2CAP Mode((equivalent to L2CAP specification in Bluetooth v1.1) 默认模式,在未选择其他模式的情况下,用此模式。
  • Flow Control Mode流控模式,此模式下不会进行重传,但是丢失的数据能够被检测到,并报告丢失。
  • Retransmission Mode重传模式,此模式确保数据包都能成功的传输给对端设备。
  • Enhanced Retransmission Mode增强重传模式,此模式和重传模式类似,加入了Poll-bit等提高恢复效率。
  • Streaming Mode流模式,此模式是为了真实的实时传输,数据包被编号但是不需要ACK确认。设定一个超时定时器,一旦定时器超时就将超时数据冲掉。
  • LE Credit Based Flow Control Mode基于LE信用的流控模式,被用于LE设备通讯。
     

2.3 设计思想

  • 使用链路管理器协议在两单元间建立 ACL 链路。基带提供数据分组的有序传输, 但也可能有个别分组损坏或重复。任两台设备之间只会有一条 ACL 链路。

信道建立在链路的基础上,信道可以有多个,链路只有一条。

  • 通过使用基带层提供的机制,L2CAP 提供了一条可靠的信道。当收到请求和重发数据时,基带通常要执行数据完整性校验,直到数据成功确认或发生超时。由于可能会丢失确认报文,所以甚至在数据成功发送后也会发生超时。基带协议使用长度为 1 位的序列号,该序列号用于删除重复发送的分组。由于所有广播的 L2CAP 数据分组的首段都以同一序列位为起始位, 如果需要提供可靠传输,就应禁止使用基带广播分组。

L2CAP 主要对数据进行封装,支持协议复用,统一高层协议数据格式。

 

3、帧结构

L2CAP基于包进行通信,表示实体之间的数据流。

3.1 面向连接信道

image-20220829163029738

Length: 2个字节,主要指基本 L2CAP 报文头除长度以外的信息净荷的大小,即图中空白部分,其长度可达65535字节。

Channel ID: 2个字节,用于标识分组的目标信道终端。

Information payload: 静荷信息包含来自上层协议(发出的分组)的净荷或者发送到上层协议(接收的分组)的净荷。 MTU 的值在信道配置时确定。所支持的用于信令分组的 MTU 的最小值为 48 字节。
 

3.2 无连接数据信道包

img

协议/服务复用(PSM): 一般为 SDP、RFCOMM、TCS 等中介协议复用。小于 0x1000 的值,0x0001 对应 SDP,0x0003 对应 RFCOMM、0x0005 对应 TCS。主要用于标识何种上层协议。

img

另外,还有一些不同操作模式的帧格式,这里不作详细介绍。

对于L2CAP我们更多去了解其功能有哪些即可,再深究有点本末倒置

下面是抓包的数据,仅供参考

image-20220829164023223
 

4、参考文章

[1]:https://blog.csdn.net/xsophiax/article/details/104052416

[2]:https://blog.csdn.net/weixin_42762173/article/details/117740593

[3]:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107836383

 

img
img

相关文章:

  • tomcat的初期了解
  • 羊城杯2022 部分web
  • 音视频图像篇 YUV-RGB
  • 【Python 实战基础】Pandas如何从字符串中解析某一数据,并统计多于一次的该数据
  • Bus:消息总线
  • SpringBoot - 用maven-dependency-plugin插件将项目代码与依赖分开打包
  • 一文学会如何使用适配器模式
  • 计算机网络原理 谢希仁(第8版)第四章习题答案
  • Linux入门第三天——linux命令(二)
  • 为什么要在单片机程序中使用结构体和指针
  • ROS1云课→19仿真turtlebot(stage)
  • VL1_四选一多路器(完整RTL、Testbench和覆盖率)
  • 【fiddler学习笔记】——安装、原理、使用
  • Idea无法引入@Test 或@Test引入报错【BUG解决】
  • Java中常见包装类型Integer、BigDecimal等特点说明
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular 2 DI - IoC DI - 1
  • Computed property XXX was assigned to but it has no setter
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • iOS 系统授权开发
  • Java到底能干嘛?
  • Otto开发初探——微服务依赖管理新利器
  • python大佬养成计划----difflib模块
  • Vue.js源码(2):初探List Rendering
  • 回流、重绘及其优化
  • 计算机在识别图像时“看到”了什么?
  • 记录一下第一次使用npm
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 简单易用的leetcode开发测试工具(npm)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 排序(1):冒泡排序
  • 普通函数和构造函数的区别
  • 新书推荐|Windows黑客编程技术详解
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 源码安装memcached和php memcache扩展
  • 字符串匹配基础上
  • # 安徽锐锋科技IDMS系统简介
  • $jQuery 重写Alert样式方法
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)一个最简单的链表类
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (JS基础)String 类型
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Flask之app.route装饰器函数的参数
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (力扣)循环队列的实现与详解(C语言)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • .NET Framework .NET Core与 .NET 的区别
  • .net中应用SQL缓存(实例使用)