51822蓝牙协议之实例解析L2CAP协议

2023-12-20 02:58

本文主要是介绍51822蓝牙协议之实例解析L2CAP协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概要:
逻辑链路控制和适配协议(L2CAP),支持高层协议多路复用、数据分段和重组,并且支持传送服务质量信息。
本文件主要针对协议状态自动机、分组格式及构成相关内容进行描述


一、下面介绍L2CAP的几大功能:
1.协议复用
L2CAP应支持协议复用,因为基带协议不支持任何 ‘类型’ 域,而这些类型域则用于标识要复用的更高层协议。
L2CAP必须能够区分高层协议,例如,服务搜索协议,RFCOMM,和电话控制等。

2.分段与重组
与其它有线物理介质相比, 由基带协议定义的分组在大小上受到限制。输出与最大基带有效载荷(DH5分组中的341字节) 关联的最大传输单位( MTU )限制了更高层协议带宽的有效使用,而高层协议要使用更大的分组。 大 L2CAP分组必须在无线传输前分段成为多个小基带分组。 同样,收到多个小基带分组后也可以重新组装成大的单一的 L2CAP 分组。
在使用比基带分组更大的分组协议时,必须使用分段与重组( SAR )功能。

3.服务质量
L2CAP 连接建立过程,允许交换有关两蓝牙单元之间服务质量的信息。每个L2CAP设备必须监视由协议使用的资源并保证服务质量(QoS)的完整实现
4.组
许多协议包括地址组的概念。基带协议支持微微网, 微微网为能够使用同一时钟进行同步工作的一组设备。L2CAP 组概念可以实现在微微网上的有效协议映射。如果没有组概念,为有效管理组,高层协议就必须直接与基带协议和链路管理器打交道。

L2CAP适用范围:
1.L2CAP 不传输由 SCO链路所指定的音频数据。
2.L2CAP 不能进行可靠信道传输或保证数据完整性,即:L2CAP不会重发或数据校验。
3.L2CAP 不支持具有可靠性的广播信道。
4.L2CAP 不支持一个全局组名的概念。

二、 L2CAP主要操作
      逻辑链路控制与适配协议(L2CAP)是以信道概念为基础的。每个L2CAP信道的端点有信道标识符(Channel Identifier,CID)来表示。

2.1 信道标识符
        不同蓝牙设备的L2CAP层之间通信时建立在逻辑链路的基础上,这些逻辑链路被称为信道(channel),每条信道的每个端点都被赋予了一个信道标志(Channel Identifier,CID).CID是表示逻辑信道本地端设备的名字.从0x0001到0x003F的标志符保留用于特定的L2CAP功能,空标识符(0x0000)则定义为一个非法标识符,并且不得用于目标端,在本地设备与多个远端设备存在多个并发L2CAP信道的情况下,同一CID不得重新用作本地L2CAP信道端。
                                 

             CID的分配与特定设备有关,一台设备可以独立于其他设备指定CID。L2CAP信道有三种类型:面向连接(Connection-Oriented,CO)信道,用于两个连接设备之间的双方通信;无连接(Connection-Less,CL)信道,用来向一组设备进行广播式的数据传输,为单项信道;信令(Signaling)信道,用于创建CO信道。

2.2 设备间操作
       下图说明了不同设备之间的L2CAP实体间通信的使用方式.面向连接的数据信道提供了两设备间的连接,而CID则用于标识信道的每一端。无连接信道限制数据向单一方向的流动。这些信道用于支持一个信道”组”,在该信道组里发送端CID用于表示一个或多个远程设备。

         面向连接的数据信道提供了两设备间的连接,而CID则用于标识信道的每一端。无连接信道限制数据向单一方向的流动。这些信道用于支持一个信道“组”,在该信道“组”里发送端CID用于表示一个或多个远程设备。因此保留了一些CID以备将来特殊用途使用。信号信道是一个保留信道的实例,固定的CID=0x0001。该信道用于创建和建立面向连接的数据信道,并可对这些信道的特性变化进行协商。L2CAP实体必须支持信号信道。另一CID则保留用于呼入的无连接数据通信,无连接的接收信道CID=0x0002.

建立不同类型的L2CAP连接的CID规则如下:


2.3  连接和运行模式 
L2CAP Channels可运行在以下模式之一(1是默认模式)
1 基本L2CAP模式(Basic L2CAP Mode)
2 流量控制模式(Flow Control Mode)
3 重传模式(Retransmission Mode)
4 加强版重传模式(Enhanced Retransmission Mode)
5 流模式(Streaming Mode)

此外,L2CAP有以下几种连接类型:
A:CONNECTION-ORIENTED CHANNELS in basic L2CAP mode(面向连接,采用基本L2CAP模式)
B: CONNECTIONLESS DATA CHANNEL in basic L2CAP mode(无连接的,采用基本L2CAP模式)
C:CONNECTION-ORIENTED CHANNELS的连接类型分为:BASIC L2CAP MODE和RETRANSMISSION/FLOWCONTROL/STREAMING MODES这两种(面向连接,重传/流量控制/流模式)


  这里只介绍模式 A  :采用的是B-Frame(我们主从设备连接就是这个模式)

Length: 2 bytes,
Channel ID: 2 bytes, 对端目的信道 
Information payload: (对应上层协议数据单元23个字节)
This contains the payload received from the upper layer protocol (outgoing
packet), or delivered to the upper layer protocol (incoming packet). The MTU
for channels with dynamically allocated CIDs is determined during channel
configuration . The minimum supported MTUvalues for the signaling PDUs。



看一个完整的数据抓包:






这篇关于51822蓝牙协议之实例解析L2CAP协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514567

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现