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

Bluetooth Spec【0】蓝牙核心架构

  1. 蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成
  2. 蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件(GAP)中指定。BR/EDR核心系统包括对备用MAC/PHYs(AMPs)的支持,包括一个AMP管理器协议和支持外部引用的MAP/PHYs的协议适配层(PALs)。
  3. 蓝牙LE核心系统的最小实现涵盖了由蓝牙规范定义的四底层和相关协议以及两个公共服务层协议;安全管理器(SM)和属性协议(ATT)以及总体配置文件要求在通用属性配置文件(GATT)和GAT配置文件(GAP)中指定。结合蓝牙BR/EDR和LE的实现包括上面描述的两个最小实现。
  4. 一个完整的蓝牙应用程序需要许多额外的服务和更高级层次的协议,这些协议在蓝牙规范中定义,但这里没有描述。核心系统架构如图2.1所示。

  • 链路管理(Link Manager),链路控制(Link Controller),经典蓝牙无线射频模块(BR/EDR Radio blocks)构成了经典蓝牙控制器(BR/EDR Controller)。
  • AMP PAL),(AMP MAC),(AMP PHY)构成了(AMP Controller)。
  • 链路管理(Link Manager),链路控制(Link Controller),低功耗射频模块(LE Radio)构成了低功耗控制器(LE Controller)。
  • L2CAP, SDP and GAP 模块构成了BR/EDR主机。
  • L2CAP, SMP, ATT(Attribute protocol), GAP and GAP(Generic Attribute Profile)/ (GATT) 模块构成了LE主机。

2.1.1 Host architectural blocks

2.1.1.1 Channel manager

通道管理器负责创建、管理和关闭用于传输服务协议和应用程序数据流的L2CAP通道。通道管理器使用L2CAP协议与远程(对等)设备上的通道管理器进行交互,以创建这些L2CAP通道,并将其端点连接到适当的实体。通道管理器与其本地链路管理器或AMP PAL进行交互,以创建新的逻辑链路(如有必要),并配置这些链路,以为正在传输的数据类型提供所需的服务质量。

2.1.1.2 L2CAP resource manager

L2CAP资源管理器块负责管理向基带提交PDU(协议数据单元)片段的顺序以及通道之间的一些相对调度,以确保具有QoS承诺的L2CAP通道不会由于控制器资源耗尽而被拒绝对物理通道的访问。这是必需的,因为架构模型并不假定一个控制器具有无限的缓冲空间,或者假设HCI是一个具有无限带宽的管道。

L2CAP资源管理器还可以执行流量一致性监管,以确保应用程序在其协商的QoS设置的范围内提交L2CAPsdu。一般的蓝牙数据传输模型假定行为良好的应用程序,并没有定义期望实现如何处理这个问题。

2.1.1.3 Security Manager Protocol

安全管理器协议(SMP)是用于生成加密密钥和身份密钥的点对点协议。该协议在一个专用的固定的L2CAP通道上运行。SMP块还管理加密密钥和身份密钥的存储,并负责生成随机地址,并将随机地址解析为已知的设备身份。SMP块直接与控制器进行接口,以提供在加密或配对过程中用于加密和身份验证的存储密钥。此块仅在LE系统中使用。BR/EDR系统中的类似功能也包含在控制器中的链接管理器块中。SMP功能在LE系统上的主机中,以降低仅LE控制器的实现成本。

2.1.1.4 Attribute Protocol

属性协议(ATT)块实现了属性服务器和属性客户端之间的点对点协议。ATT客户端通过专用的固定L2CAP通道与远程设备上的ATT服务器进行通信。ATT客户端向ATT服务器发送命令、请求和确认。ATT服务器发送响应、通知和向客户指示。这些ATT客户端命令和请求提供了一种在具有ATT服务器的对等设备上读取和写属性值的方法。

2.1.1.5 AMP Manager protocol

AMP管理器是使用L2CAP与远程设备上的对等AMP管理器进行通信的一个层。它还直接与AMP PAL接口,用于AMP控制的目的。AMP经理负责发现远程AMP)并确定其可用性。它还收集有关远程AMP)的信息。此信息用于设置和管理AMP物理链接。AMP管理器使用一个专用的L2CAP信令通道与远程AMP管理器(s)通信。

2.1.1.6 Generic Attribute Profile

通用属性配置文件(GATT)块表示属性服务器的功能,以及可选择的属性客户端的功能。该配置文件描述了在属性服务器中使用的服务、特征和属性的层次结构。该块提供了用于发现、读取、写入和指示服务特性和属性的接口。GATT用于LE设备上的LE配置文件服务发现。

2.1.1.7 Generic Access Profile

通用访问配置文件(GAP)块 表示所有蓝牙设备通用的基本功能,如传输、协议和应用程序配置文件所使用的模式和访问过程。GAP服务包括设备发现、连接模式、安全性、认证、关联模型和服务发现。

2.1.2 BR/EDR/LE Controller architectural blocks

2.1.2.1 Device manager

设备管理器是基带中用来控制蓝牙设备的一般行为的功能块。它负责蓝牙系统中与数据传输没有直接关系的所有操作,如查询附近是否存在的蓝牙设备,连接到蓝牙设备,或使本地蓝牙设备可被其他设备发现或连接。

设备管理器请求从基带资源控制器访问传输介质,以执行其功能。设备管理器还控制由许多HCI命令所暗示的本地设备行为,例如管理设备本地名称、任何存储的链接键和其他功能。

2.1.2.2 Link manager

链接管理器负责创建、修改和发布逻辑链接(如果需要,还有它们相关的逻辑传输),以及更新与设备之间的物理链接相关的参数。链路管理器通过使用BR/EDR中的链路管理器协议(LMP)和LE中的链路层协议(LL)与远程蓝牙设备中的链路管理器进行通信来实现这一点。

LM或LL协议允许在需要时创建新的逻辑链路和逻辑传输,以及链路和传输属性的一般控制,如逻辑传输启用加密,适应物理链路的传输功率,或调整逻辑链路BR/EDR中的QoS设置。

2.1.2.3 Baseband resource manager

基带资源管理器负责对无线电媒体的所有访问。它有两个主要功能。它的核心是一个调度器,它将物理通道上的时间授予所有已经协商了访问合同的实体。另一个主要功能是与这些实体协商访问合同。访问合同实际上是一种对提供为用户应用程序提供预期性能所需的特定QoS的承诺。

访问合同和调度函数必须考虑到需要使用主控制器的任何行为。这包括(例如)通过逻辑链路和逻辑传输的连接设备之间的正常交换数据,以及使用无线电介质进行查询、进行连接、可发现或可连接,或在使用自适应跳频模式期间从未使用的载波中获取读数。

在BR/EDR系统中的某些情况下,逻辑链路的调度会导致将逻辑链路更改为与以前使用的物理通道不同的物理信道。这可能是(例如)由于参与散点网,一个定期查询功能,或页面扫描。当物理通道没有与时间槽对齐时,资源管理器还会考虑原始物理通道上的插槽和新物理通道上的插槽之间的重新排列时间。在某些情况下,由于两个物理通道被用作相同的设备时钟,插槽将自然对齐。

2.1.2.4 Link Controller

链路控制器负责对数据有效负载和与物理通道、逻辑传输和逻辑链路相关的参数对蓝牙数据包进行编码和解码。链路控制器执行BR/EDR中的链路控制协议信令和LE中的链路层协议(与资源管理器的调度功能紧密结合),用于通信流控制和确认和重传请求信号。对这些信号的解释是与基带数据包相关联的逻辑传输的一个特征。链路控制信令的解释和控制通常与资源管理器的调度器相关联。

2.1.2.5 PHY

PHY块负责传输和接收物理信道上的信息包。基带和PHY块之间的控制路径允许基带块控制PHY块的定时和频率载波。PHY块将数据流从物理通道和基带转换为所需的格式。

2.1.2.6 Isochronous Adaptation Layer

等时自适应层(ISOAL)使上层能够以灵活的方式向链路层发送或接收等时数据,使得上层中的数据包的大小和间隔可以与链路层中的数据包的大小和间隔不同。ISOAL使用碎片/重组或分割/重组操作将上层数据单元转换为底层数据单元(或相反)。

2.1.3 AMP Controller architectural blocks

。。。

相关文章:

Bluetooth Spec【0】蓝牙核心架构

蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…...

AppInventor2 ClientSocketAI2Ext 拓展加强版 - 为App提供TCP客户端接入,可发送二进制数据

本文介绍App Inventor 2利用拓展实现TCP/IP协议接入功能,作为网络客户端连接TCP服务器,进行数据通信(发送/接收)。 // ClientSocketAI2Ext 拓展现状 // 原版拓展名称为:com.gmail.at.moicjarod.aix,是能用…...

Opencv之对图片的处理和运算

Opencv实现对图片的处理和修改 目录 Opencv实现对图片的处理和修改灰度图读取灰度图转换灰度图 RBG图单通道图方法一方法二 单通道图显色合并单通道图 图片截取图片打码图片组合缩放格式1格式2 图像运算图像ma[m:n,x:y]b[m1:n1,x1:y1] add加权运算 灰度图 读取灰度图 imread(‘…...

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法:删掉没有用的数据(行与列)和股代码格式处理,是和外部数据的制作方法是相同,自己上面看历史博文。只需要判断一下,股代码跟随的…...

Qt工作总结02 <设置工具栏ToolBar>

相关博文 1. 代码 QToolBar * toolbar new QToolBar(this);QAction * btn1 new QAction("btn1"); btn1->setIcon(QIcon(":/images/btn1.png")); value->setCheckable(true); //按钮按下弹起 toolbar ->addAction(btn1);QAction * btn2 new …...

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页

解决Springboot整合Shiro自定义SessionDAORedis管理会话,登录后不跳转首页 问题发现问题解决 问题发现 在Shiro框架中,SessionDAO的默认实现是MemorySessionDAO。它内部维护了一个ConcurrentMap来保存session数据,即将session数据缓存在内存…...

Day56 图论part06

108.冗余连接 并查集应用类题目,关键是如何把题意转化成并查集问题 代码随想录 import java.util.Scanner;public class Main{public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();DisJoint disjoint = new DisJo…...

[python SQLAlchemy数据库操作入门]-04.连接数据库:增删改查

哈喽,大家好,我是木头左! 通过使用 SQLAlchemy,开发者可以在 Python 中以更直观的方式操作数据库,而无需编写大量的 SQL 代码。 创建数据库引擎 在 SQLAlchemy 中,数据库引擎是用于与数据库交互的核心组件。它负责管理数据库连接,并执行 SQL 语句。 示例:连接到 SQLi…...

黑马点评——基于Redis

目录 1.短信登录 1.1基于Session登录(已被Redis代替) 1.2cookie和session 2.添加Redis缓存 2.1根据id查询商户信息 2.2缓存穿透 2.3缓存雪崩 《黑马点评》Redis高并发项目实战笔记【完结】P1~P72_黑马点评笔记-CSDN博客 1.短信登录 1.1基于Sess…...

RocketMQ的集群架构是怎样的?

大家好,我是锋哥。今天分享关于【RocketMQ的集群架构是怎样的?】面试题。希望对大家有帮助; RocketMQ的集群架构是怎样的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 是阿里巴巴开源的分布式消息中间件,广泛用于处…...

VS2022+QT6.7 窗口置灰(遮罩)

本文章使用QWidget来使窗口置灰,使用按钮控制置灰功能的开启和关闭,同时被置灰的控件自动禁用交互功能。 connect(ui.pushButton_open, &QPushButton::clicked, this, []() { //创建无边框窗口,大小是父的大小QWidget* parentWidget new QWidget…...

如何通过HTTP API插入或更新Doc

本文介绍如何通过HTTP API向Collection中插入或更新Doc。 说明 若调用本接口时Doc Id已存在,则等同于更新Doc;Doc Id不存在,则等同于插入Doc。 若调用本接口时不指定Doc Id,则等同于插入Doc,DashVector会自动生成Doc …...

C++ STM32 F4xx USART LL库 DMA + IDLE ISR 驱动裸机 +FreeRTOS 任务通知

写的一般,大佬可以帮我看看 头文件 /********************************************************************************* file : usart_driver.hpp* brief : usart_driver program head**************************************************…...

RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据

由于Android13上selinux的权限管控加强,原来android12的方法已经无法获取到性能相关数据了,故单独介绍Android13上的性能数据获取 首先需要保障能过获取到root权限,adb root能够生效,adb shell进入shell命令行 mount -t debugfs…...

sentinel学习笔记6-限流降级(上)

本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏,写的好值得推荐,我整理的有所删减,推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…...

【Rust自学】6.4. 简单的控制流-if let

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.4.1. 什么是if let if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值,同时忽略其余模式。 可以…...

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下 一、问题背景 应用开发中,我们经常会遇到一些文件原先是放在资源文件夹 rawfile下,但是逻辑处理时,需要转移到本地沙箱才能操作。这种情况下,就需要将将…...

Vue项目中env文件的作用和配置

在实际项目的开发中,我们一般会经历项目的开发阶段、测试阶段和最终上线阶段,每一个阶段对于项目代码的要求可能都不尽相同,那么我们如何能够游刃有余的在不同阶段下使我们的项目呈现不同的效果,使用不同的功能呢?这里…...

在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)

一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置,ViteVue 项目的创建,Element Plus 插件的使用,以及计时器组件的创建和使用。 想要直接实现计时器组件,查看文章的第四部分。…...

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系: rl命名空间下,主要有八大模块。 搞定VS后将逐个拆解。 1、编译运行 根据报错提示,配置相应错误的库(根据每个人安装位置不同而不同,我的路径如下:) 编译所有,Release版本耗时大约10分钟。 以rlPlan运动…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...