BLE协议栈入门学习

news2024/11/23 15:13:28

蓝牙LE栈

在这里插入图片描述

在这里插入图片描述

物理层

频带

蓝牙LE在2400MHz到2483.5MHz范围内的2.4GHz免授权频段工作,该频段分为40个信道,每个信道间隔为2MHz。

时分

蓝牙LE是半双工的,可以发送和接收,但不能同时发送和接收,然而,所有的设备都是在时分复用(TDD)方案中使用,因此像是全双工

链路层

链路层概述

它定义了空中传输的几种类型的数据包和一个相关的空中接口协议,它使用一个状态机来运行,根据状态的不同,链路层可能以许多完全不同的方式运作,由许多类型的事件驱动。定义了许多影响链路状态或者链路使用参数的控制程序。也定义了无线信道的选择和分类。
链路层既支持有连接和无连接通信,也支持确定性和(稍微)随机的事件时机,它支持点对点通信,也支持一对多通信

状态机

在这里插入图片描述

状态描述
standby设备既不发送也不接收数据包
Initiating响应来自特定设备的广播数据包以请求连接
Advertising发送广播数据包,并可能发送用于响应其他设备的广播数据包的数据包
Connection与另一个设备建立了连接
Scanning监听来自其他设备的广播数据包
Isochronous Broadcast广播同步数据包
Synchronization监听由特定设备发送的属于特定广播序列的周期性广播

在连接状态下,定义了两个重要的设备角色,Central和Peripheral,启动连接,并从Initiating状态转换到Connection状态的设备承担Central角色;接收连接请求,从Advertising状态转换到Connection状态的设备承担Peripheral角色

逻辑传输

LE ACL——LE异步面向连接的逻辑传输

基础知识

当两个蓝牙LE设备连接时,它们使用面向异步连接的逻辑传输(LE-ACL或简称ACL)LE-ACL是最常用的蓝牙LE逻辑传输类型之一,提供面向连接的数据通信。

主机控制器接口

基础知识

主机控制器接口是根据命令和事件定义的。这些本质上是可以在主机和控制器之间交换的消息。命令由主机发送给控制器,事件由控制器发送给主机。事件可以是对命令的响应,也可以是不请自来的消息。

逻辑链路控制与适配协议(L2CAP)

基础知识

L2CAP使用通道的概念来分离在栈层之间传递的数据包序列。固定通道不需要设置,是立即可用的,并与特定的更高层协议相关联。信道也可以通过指定的协议服务多路复用器(PSM)值动态创建并与协议相关联。
在这里插入图片描述

L2CAP和协议复用

在协议栈中位于L2CAP之上的层使用不用的协议,如属性协议(ATT)和安全管理协议(SMP)。
当L2CAP信道处理属性协议时,它要么使用为ATT保留的固定信道,在这种情况下被称为充当未增强的ATT承载者,要么使用一系列一个或者多个动态信道,每个信道都充当增强的ATT承载者。未增强的ATT承载者支持按顺序执行ATT事务,每次执行一个。增强型ATT承载支持并行ATT事务,这些事务在并行L2CAP通道中按顺序执行。

L2CAP和流量控制

基于信用的流程控制是众多可能的流程控制方法之一,它的大体工作原理如下:

  • 发送设备知道接收设备的容量,根据它可以处理的PDU数量而不会丢失数据。它通过配置或在数据传输开始前通过两个设备之间的交换来获取该容量信息
  • 发送设备设置一个计数器,初始值为接收器的容量限制。每次发送一个PDU,计数器就递减。当计数器值到达0时,发送方就暂停发送PDU
  • 接收端从其缓冲区读取并处理一个或多个PDU之后,将相应数量的值发送回发送设备,发送端使用其来增加其计数器,当计数器处于非0值时,发送器可以继续发送更多的PDU

L2CAP定义了几种操作模式,主要与流量控制有关

L2CAP分段和重组

L2CAP以上和以下的层都受到MTU大小的限制,它规定了该层创建的PDU类型允许的最大大小。例如,ATT_MTU参数定义了ATT PDU的最大大小
L2CAP本身和它上面或下面的层在堆栈中可能有不同的MTU大小。因此有必要将一些PDU/SDU分成一系列相邻层可以处理的较小部分,或者相反,将一系列相关的较小的部分重组成完整的PDU/SDU。L2CAP应用于上层的这些过程称为分割(segmentation)和重组(reassembly),而与L2CAP以及下层的等效过程称为分裂(fragmentation)和复合(recombination)

属性协议

基础知识

属性协议(ATT)由两个设备使用,一个是客户端,一个是服务器。服务器公开一系列称为属性的复合数据项。属性由服务器组织在一个称为属性表的索引列表中。
每个属性包含一个句柄,一个通用唯一标识符(UUID),一个值和一组权限

通用属性配置文件(GATT)定义了属性如何表示称为服务,特征和描述符的高级构造。通常,连续句柄值范围内的一组属性需要表示诸如此类的更复杂的类型,因此属性协议支持处理由句柄值范围表示的属性组。

ATT客户端使用ATT来发现ATT服务器中属性表的详细信息,包括感兴趣的属性或属性类型的句柄值。当句柄值已知时,他们可以与某些PDU类型一起使用,以识别表中的特定属性,然后对其进行操作。例如,ATT_READ_BY_GROUP_TYPE_REQ PDU可用于查找属性表定义的所有GATT主服务 。

ATT PDU

属性协议定义了31个不同的PDU,每个PDU都基于六种方法中的一种

命令

客户端到服务器:
命令
请求和响应

服务器到客户端:
通知
指示和确认

PDU格式

所有ATT PDU具有相同的结构,由标识PDU类型的操作码,一组参数和可选的认证签名组成。签名字段很少使用,并且当属性协议在加密链路上运行时是冗余的,因为链路层的所有加密数据包都包含认证数据。

事务

客户端到服务器,一组请求和响应,被视为一个事务;服务器到客户端,一组指示和确认,被视为一个事务;事务的超时时间是30秒。ATT是顺序事务模型,一个事务已经开始之后,在它完成之前,同一个承载实例不能再处理其他ATT PDU。

承载

L2CAP对于ATT有两种承载,未增强ATT承载和增强ATT承载

未增强ATT承载
  • 使用固定的L2CAP通道,因此可能只有一个承载实例
  • 事务是严格顺序的,不管应用层有多少客户端在使用ATT,这意味着一个应用程序发起的事务可能会延迟另一个应用程序希望发起的事务
  • 客户端收到任何犹豫缓冲区溢出等问题而无法处理的通知将被丢弃。
  • ATT MTU可以通过ATT_EXCHANGE_MTU_REQ与ATT_EXCHANGE_MTU_RSP配置
  • 当使用非增强ATT承载时,可选支持某些PDU类型,如ATT_MULTIPLE_HANDLE_VALUE_NTF, ATT_READ_MULTIPLE_VARIABLE_REQ 和 ATT_READ_MULTIPLE_VARIABLE_RSP。
  • 支持非增强ATT承载的L2CAP信道可以是未加密的,也可以是加密的。
增强ATT承载
  • 使用动态L2CAP通道,支持多通道,因此允许多个承载实例
  • 事务还是按顺序处理的,但是是基于每个承载实例的,因此从应用层来看,并行事务是可能的
  • ATT MTU设置为L2CAP层自动使用的MTU值,并且ATT_EXCHANGE_MTU_REQ与ATT_EXCHANGE_MTU_RSP是不允许通过增强ATT承载的
  • 增强ATT承载包含L2CAP的流量控制方法——增强型基于信用的流量控制模式,因此不会丢失任何PDU
  • 使用增强ATT承载时,必须支持某些PDU,如ATT_MULTIPLE_HANDLE_VALUE_NTF, ATT_READ_MULTIPLE_VARIABLE_REQ 和 ATT_READ_MULTIPLE_VARIABLE_RSP。
  • 支持非增强ATT承载的L2CAP信道必须是加密的。

发现EATT支持

GATT允许客户端确定连接的服务器是否支持EATT,也允许客户端通知服务器它是否支持EATT

通用属性概要(GATT)

基础知识

GATT基于属性表中的属性定义了更高级的数据类型,这些数据类型被称为服务,特征和描述符。它还定义了一系列通过ATT使用这些数据类型的过程,应用程序通常使用映射到这些过程的平台API

服务是一种分组机制,它提供了一个上下文,在这个上下文中可以使用它们包含的特征。服务通常对应于设备的主要特性或者能力

特征是状态数据的单个项目,具有类型,关联值和一组属性,这些属性表明数据如果在相关的GATT程序集中使用。例如,可以定义一个连接的对等设备可以读取某个特定特征的值,但不能写入它

特征属于一个服务,相同的特征类型可以是多个服务的成员,并且根据这些服务提供的不同上下文,使用特征的规则可能会有所不同

描述符属于某些特征,可以包含元数据,如特征的文本描述,或者可能提供控制特征行为的一些方法。特征有0或多个附加的描述符。

在这里插入图片描述
所有GATT服务器都必须提供两项特殊服务,通用访问服务和通用属性服务

蓝 牙 SIG vs自 定 义

一些服务,特征和描述符是SIG定义的,并具有表示其类型的16位UUID
自定义服务,特征和描述符可以由实现者分配128位UUID标志。16位UUID具有等价的128位值,格式为0000XXXX-0000-1000-8000-00805F9B34FB, 其中XXXX是 16位 UUID值 。 实 现 者 不 能 在 这 个 范 围 内 使 用 UUID, 除 非 从 蓝 牙 SIG购 买了UUID。

通用访问配置文件(GAP)

基础知识

蓝牙核心规范的通用访问配置文件(GAP)部分定义了与设备发现和在两个设备之间建立连接有关的过程。如何执行数据的无连接通信,如何使用周期性广播以及如何设置同步通信也是GAP包含的主题

广播包的传输和通过扫描的接收是GAP工作的核心,有许多不同的广告和扫描包类型,这些是由链路层定义的。载荷字段称为AdvData,并不是在所有PDU类型中都存在该字段。当它存在时,它所包含的数据被编码为一系列一个或多个长度/标签/值结构,称为AD类型。AD类型在核心规范补充(CSS)文档中定义

GAP与BLE和BR/EDR都有相关性。另外,虽然广告和扫描等活动与GAP具有核心相关性,但这些过程实际上是由链路层执行的,所涉及的PDU类型也是如此。

角色

GAP定义了4个设备角色:

角色描述
Broadcaster一种使用某种形式的广播以无连接的方式传输数据的设备,广播设备有一个发射机,但接收机是可选的,单纯的广播设备不接受来自中央设备的连接
Observer观察设备接收广播数据包,它不连接到其他设备,包含一个接收机,发射机是可选的,它能以无连接的方式接收广播数据包
Peripheral外设可以与中心设备连接,它包含发射机和接收机
Central中央设备能主动与外围设备建立连接,它包含一个发射机和接收机

注意,链路层也会使用角色名称Central和Peripheral,这两种不同语境中的术语含义有些差别

发现

Broadcaster或者Peripheral要么处于不可发现模式,要么处于GAP定义的两种可发现模式之一。当以不可发现模式广播时,广播的数据包在空中是可见的,但是执行一般可发现过程或者有限可发现过程的扫描设备将忽略这些数据包。

可发现模式包括一般可发现模式与有限可发现模式。在一般可发现模式下,设备的可发现时间是无限的,而在有限可发现模式下,最多只能发现3分钟

发现设备能通过检查广播包中的AdvData字段中称为Flags的AD类型,来识别广播设备所处的可发现模式。有限发现模式通常用于优先考虑用户最近接触过的设备。

当一个Observer或者Central试图发现其他设备时,它可能会使用被动扫描或者主动扫描。被动扫描是指接收广播PDU而不发送任何扫描PDU。主动扫描包括接收广播PDU,并通过发送扫描PDU请求更多信息。各种PDU类型由链路层定义

连接模式

广播设备可以通过所使用的PDU(遗留广播)或者AdvMode字段的值(扩展广播)来指示自己是否可以被连接

定向与非定向

定向的广播PDU只有特定设备应该处理此PDU,PDU中有TargetA字段,包含预期接收设备的蓝牙地址。
非定向的广播PDU适用于接收它们的任何Observer或者Central,不包含TargetA字段

可扫描与不可扫描

某些广播PDU类型被称为可扫描的,这意味着允许接收到这样的PDU的设备以适当类型的扫描请求PDU响应,以请求更多的广播数据。广播PDU由链路层定义

安全管理器协议(SMP)

基础知识

安全管理器协议(SMP)是协议栈安全管理器组件的一部分。它支持执行与安全相关的程序,如配对、绑定和密钥分发。
安全管理器组件为其他层可以使用的安全功能提供了一个加密工具箱,并定义了配对算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1230502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“绵柔的,好喝的”海之蓝畅销20年的经典秘诀:做大众喜爱的好酒

执笔 | 尼 奥 编辑 | 萧 萧 在中国白酒历史长河中,有的品牌如大浪淘沙而灰飞烟灭,也有的白酒品牌因为不断创新而经久不衰。我们时常在思考一个产业命题:白酒品牌常青的秘诀到底是什么? 经过20多年的产业发展,中国…

4-2计算小于1000的正整数的平方根

#include<stdio.h> #include<math.h> int main() {int i;int t;printf("请输入一个数:");scanf("%d",&i);if(i>1000){printf("请重新输入一个数&#xff1a;");scanf("%d",&i);}tsqrt(i);printf("%d的平方…

要事第一:如何通过6个步骤确定项目的优先级

当收到很多项目请求并且每个请求都是重中之重时&#xff0c;该怎么办&#xff1f;从最易完成的开始&#xff1f;还是先解决最大的问题&#xff1f; 实际上两种做法都不对。确定项目优先级的更好方法是评估以下内容&#xff0c;而不是关注项目规模或完成时长&#xff1a; ● 每…

论文导读 | 大语言模型与知识图谱复杂逻辑推理

前 言 大语言模型&#xff0c;尤其是基于思维链提示词&#xff08;Chain-of Thought Prompting&#xff09;[1]的方法&#xff0c;在多种自然语言推理任务上取得了出色的表现&#xff0c;但不擅长解决比示例问题更难的推理问题上。本文首先介绍复杂推理的两个分解提示词方法&a…

滚珠螺杆在航天工业领域中的重要性

滚珠螺杆是重要的航天工业配件之一&#xff0c;在航天工业领域中具有非常重要的地位和作用。 首先&#xff0c;滚珠螺杆作为一种高精度、高刚度的传动元件&#xff0c;能够提供准确的传动和定位精度&#xff0c;从而保证航天器的可靠性和性能。航天器在飞行过程中需要精确控制其…

【STM32】W25Q64 SPI(串行外设接口)

一、SPI通信 0.IIC与SPI的优缺点 https://blog.csdn.net/weixin_44575952/article/details/124182011 1.SPI介绍 同步&#xff08;有时钟线&#xff09;&#xff0c;高速&#xff0c;全双工&#xff08;数据发送和数据接收各占一条线&#xff09; 1&#xff09;SCK:时钟线--&…

软件数据采集使用代理IP的好处用哪些?

随着互联网的快速发展&#xff0c;越来越多的企业开始通过软件数据采集来获取目标客户的信息。然而&#xff0c;在进行数据采集的过程中&#xff0c;由于不同网站的访问规则和限制&#xff0c;经常会遇到一些问题。这时候&#xff0c;使用代理IP就可以很好地解决这些问题。下面…

震惊!这个网站几分钟就能制作出电子画册

一直以来&#xff0c;制作电子画册都是一项繁琐且耗时的任务&#xff0c;需要专业的设计技能和大量的时间。 但是现在&#xff0c;有了这个神奇的网站&#xff0c;FLBOOK在线制作电子杂志平台。一切都变得如此简单&#xff01;它不仅提供了丰富的模板和素材&#xff0c;还支持在…

封装实现unordered_map和set

什么是哈希思想 首先哈希是一个关联式容器&#xff0c;各个数据之间是具有关系的&#xff0c;和vector那些序列式容器不一样。 首先unordered_map中的迭代器是一个单向的迭代器。 其次在unorderede_map和set中是无序的&#xff08;因为底层不是红黑树&#xff0c;而是哈希了…

接口自动化项目落地之HTTPBin网站

原文&#xff1a;https://www.cnblogs.com/df888/p/16011061.html 接口自动化项目落地系列 找个开源网站或开源项目&#xff0c;用tep实现整套pytest接口自动化项目落地&#xff0c;归档到电子书&#xff0c;作为tep完整教程的项目篇一部分。自从tep完整教程发布以后&#…

【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐走进我们的生活。在教育领域&#xff0c;VR技术的应用也日益广泛&#xff0c;为学生提供了更加生动、直观的学习体验。本文将以利用VR开展太空探险学习为主题&#xff0c;探讨如何将这一先进技术…

3D 纹理渲染如何帮助设计师有效、清晰地表达设计理念

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 定义 3D 渲染可视化及其用途 3D 可视化是一种艺术形式。这是一个机会。这是进步。借助 3D 纹理…

解决企业图纸管理混乱的四大方法

随着企业业务的快速发展&#xff0c;图纸作为企业生产过程中不可或缺的一部分&#xff0c;其管理也变得越来越重要。然而&#xff0c;很多企业在图纸管理方面存在很多问题&#xff0c;其中最普遍的问题就是图纸混乱。那么&#xff0c;如何解决企业图纸混乱的问题呢&#xff1f;…

我买了个AI员工,凌晨5点喊我起床,搞了篇全网40万+的爆款

大家好我是二狗&#xff0c;是夕小瑶科技说编辑部的一名作者。 前天早上凌晨5点左右的时候&#xff0c;我被尿憋醒了&#xff0c;起来上了个厕所。 就在我准备躺下接着睡的时候&#xff0c;顺手看了一眼手机。 咦?屏幕上弹出了一条邮件&#x1f4ee;推送&#xff0c;是我们编…

系列八、Callable接口

一、Callable vs Runnable &#xff08;1&#xff09;Callable接口有返回值&#xff0c;Runnable接口无返回值&#xff1b; &#xff08;2&#xff09;Callable接口会抛异常&#xff0c;Runnable接口不会抛异常&#xff1b; &#xff08;3&#xff09;落地方法不一样&#xff0…

JOSEF 同步检查继电器 JT-1 额定电压100V 柜内固定安装,板前接线

系列型号 JT-1同步检查继电器&#xff1b; DT-1同步检查继电器&#xff1b; JT-3同步检查继电器&#xff1b; DT-3同步检查继电器&#xff1b; DT-1/200同步检查继电器&#xff1b; DT-1/160同步检查继电器; DT-1/130同步检查继电器; DT-1/120同步检查继电器; DT-1/90…

Sentinel 系统规则 (SystemRule)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

js的高级

js js 的数组数组是什么为什么要使用数组数组的简单使用数组是按照顺序保存的&#xff0c;所以每个数据都有自己的编号数组的取值方法遍历数组数组的元素求和数组的最大值和最小值数组的增删改查操作数组的增加数组的筛选数组的删除js的函数 案例&#xff1a; 九九乘法表 数组…

在电脑PC端可以分类记笔记的软件选择哪个?

选择用电脑来记录笔记是比较便捷的&#xff0c;电脑屏幕比较大&#xff0c;操作起来比较便捷。但是很多人用电脑来记录笔记&#xff0c;通常会使用电脑上自带的记事本、文档记事工具来整合笔记&#xff0c;打开文档记事本类的软件&#xff0c;密密麻麻的文字呈现出来。 选择用…

社交媒体驱动的独立站流量增长:YouTube引流技巧

随着互联网的不断发展&#xff0c;视频内容在网上变得越来越受欢迎。YouTube作为世界上最大的视频分享平台之一&#xff0c;成为了吸引流量和观众的理想场所。对于跨境卖家来说&#xff0c;利用YouTube来增加独立站流量是一种有效的策略&#xff0c;可以增加知名度、吸引潜在客…