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

BLE协议—协议栈基础

BLE协议—协议栈基础

  • BLE协议栈基础
  • 通用访问配置文件层(Generic Access Profile,GAP)
    • GAP角色
    • 设备配置
    • 模式和规程
    • 安全模式
    • 广播和扫描

BLE协议栈基础

蓝牙BLE协议栈包含三部分:主机、主机接口层和控制器。
主机:逻辑链路控制及自适应协议层(L2CAP)安全管理层(SM)属性协议层(ATT)通用访问配置文件(GAP)通用属性配置文件层(GATT)
主机接口层:主机控制接口(HCI)
控制器:物理层(PHY)链路层(LL)
在这里插入图片描述
控制器(Controller)

  • 物理层(Physical Layer,PHY):BLE在2400Mhz至2483.5 MHz的2.4GHz免授权频段(ISM)内工作。采用自适应跳频的高斯频移键控(GFSK)。BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。建立连接的两个设备,必须同一时间处于同一信道上才能通信。
    其中37/38/39为固定广播信道,其余为数据信道。

  • 链路层(Link Layer,LL),控制设备的射频状态,让设备处于五种状态:
    Standby:默认状态,不进行收发。
    Advertising:广播状态,在3个广播信道广播数据包,同时监听和回复扫描者发送的扫描数据包。
    Scanning:扫描状态,在3个广播信息监听广播数据包,同时发送扫描数据包。
    Initiating:初始化状态,在广播信道监听广播数据包,从而发起连接。
    Connection:连接状态。发起连接的设备通过发送连接请求来回应广播设备,如果广播设备接受连接请求,那么广播设备与发起连接的设备将会进入连接状态。发起连接的设备称为主机(Client),接受连接请求的设备称为从机(Server)。

主机控制接口(Host Controller Interface)
主机控制接口(Host-Controller Interface,HCI):为Host访问Controller提供一组标准的接口。
HCI主要完成3个任务:

  1. Host通过HCI发送命令给Controller
  2. Controller通过HCI将事件发送给Host
  3. 传递ACL Data(面向连接,在连接通道上进行数据传输)

该接口层的实现可以是软件接口,也可以是标准硬件接口,比如UART、SPI、USB。

主机(Host)

  • 逻辑链路控制和适配器协议(Logical Link Control and Adaption Protocol,L2CAP):为上层提供了多路复用、数据分段与重组服务,并且支持逻辑端对端的数据通信。

  • 安全管理层(Security Manager,SM):定义了配对和密钥分发的方法,并为其他层提供了与对端设备进行安全连接和数据交换的功能。

  • 属性协议层(Attribute Protocol,ATT):定义了访问对端设备上数据的一组规则,是GATT规范的基础,也是低功耗蓝牙的基石。定义了Host端属性报文格式和报文类型。这一层的关键词是Attribute(属性)。一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层,BLE开发过程中接触最多的就是这一层。
    Attribute协议下文详解 在这里插入图片描述

  • 通用属性配置文件层(Generic Attribute Profile,GATT):自己本身不提供数据,而是将ATT层提供的属性组合起来构成的服务。通过ATT层可以读写对端设备的属性值,各个属性之间有什么联系各个属性之间怎么组合起来的,是由GATT层负责。服务是GATT层的关键字,服务由属性组成。
    一个BLE设备可以由多个服务组成(使用UUID进行区分),一个服务可以包含多个特征(characteristic),一个特征可以包含多个属性。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。

  • 通用访问配置文件层(Generic Access Profile,GAP):定义了所有蓝牙设备的基础功能,设备间发现、连接、配对绑定的流程;蓝牙设备中四种角色;广播和扫描响应报文的格式;还有一些通用蓝牙参数定义,比如设备地址、名称、配对秘钥和设备的外观特征值,用于区分是什么设备,手机还是电脑;明确了作为一个低功耗蓝牙设备的基本需求,包含哪些层级以及如何协同工作的。 规范了一些通用的蓝牙参数:蓝牙设备地址、设备名称、配对秘钥、外观特征值。

通用访问配置文件层(Generic Access Profile,GAP)

GAP角色

GAP层定义了4种BLE角色:

  • 外围设备(Peripheral):可以发送广播并接受连接的设备(在链路层中作为从机)。
  • 中央设备(Central):可以扫描广播并发起连接的设备(在链路层中作为主机)。
  • 播报设备(Broadcaster):可以发送广播,但不可接受连接的设备。
  • 观察设备(Observer):可以扫描广播,但不可发起连接的设备。
    链路层可以同时支持多个状态机, GAP层也支持一个设备同时作为多个GAP角色,所以一个BLE设备通常可以同时充当主机和从机(多主多从)。

设备配置

GAP定义了4个设备配置参数:

  • 设备地址:设备地址在协议栈内部指BD_ADDR,小端数据格式。设备地址可以随机,也可以固定。
  • 设备名称:设备名称一般用于区分BLE设备,最长可达248个字节,支持UTF-8编码。
  • 设备外观:设备外观是用于用户识别设备功能,长度为两个字节。
  • 连接PIN码:PIN码用于两个设备之间配对时使用,为6位十进制整形数,因此它的有效范围为000000-999999(0x00000000 – 0x000F423F)。使用时必须显示全部6位数字,包括前导0。

模式和规程

GAP定义5套模式和规程,设备通常运行在这5套模式和规程中:

  • Broadcast mode and Observation procedure, 广播模式和观察规程
  • Discovery modes and procedures,发现模式和规程
  • Connection modes and procedures,连接模式和规程
  • Bonding modes and procedures, 绑定模式和规程
  • Periodic advertising modes and procedure,周期性的广播模式和规程

安全模式

GAP定义了2种安全模式以及4种安全规程:

  • 安全模式1(LE Security mode 1):使用认证信息保证安全。
  • 安全模式2(LE Security mode 2):使用数字签名保证安全。
规程描述安全模式
认证规程(Authentication procedure)执行认证和加密操作安全模式1
授权规程(Authorization procedure)确认是否为某个操作提供授权安全模式1
连接数据签名规程 (Connection data signing procedure)连接数据签名规程,在未加密的连接中传输认证的数据。安全模式2
认证已签名的数据规程 (Authenticate signed data procedure)认证已签名的数据规程,校验带有前面的数据是否有效安全模式2

广播和扫描

广播和扫描在无线通信中是非常重要的一个技术点。在BLE中,扫描和广播是通信的基础,用户可以直接用扫描和广播进行数据的传输,也可以在广播和扫描的基础上进行连接后点对点通信。
由于广播和扫描内容篇幅较长,具体可以移步👇链接
BLE协议—广播和扫描

学习笔记,有问题欢迎指出

相关文章:

BLE协议—协议栈基础

BLE协议—协议栈基础 BLE协议栈基础通用访问配置文件层(Generic Access Profile,GAP)GAP角色设备配置模式和规程安全模式广播和扫描 BLE协议栈基础 蓝牙BLE协议栈包含三部分:主机、主机接口层和控制器。 主机:逻辑链路…...

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

文章目录 1. 知识蒸馏理论2. yolov8 蒸馏代码应用2.1 环境配置2.2 训练模型(1) 训练教师模型(2) 训练学生模型baseline(3) 蒸馏训练3. 知识蒸馏代码详解3.1 蒸馏参数设置3.2 蒸馏损失代码讲解3.2.1 Feature based loss3.2.1 Logit loss3.3 获取蒸馏的feature map及channels...

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 1.2.源码跟踪 为什么我们只输入…...

2023新年总结与展望

2023年总结 对Spring Cloud微服务更加熟悉,对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…...

论文阅读——SG-Former

SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图,根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的,并在训练过程中自我进化。直观地说,我们…...

常用环境部署(十三)——GitLab整体备份及迁移

一、GitLab备份 注意:由于我的GitLab是docker安装的,所以我的操作都是在容器内操作的,大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接:常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…...

海外数据中心代理与住宅代理:优缺点全面对比

数据中心代理和住宅代理是为了匿名而开发的,通过替换网站眼中您自己的 IP 地址。然而,它们在价格、功能、性能或最佳用例方面存在一些差异。那么,这些代理类型到底有什么相似点和不同点呢? 一、什么是数据中心代理? 1…...

springboot实现OCR

1、引入依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version> </dependency> 2、config Configuration public class TessOcrConfiguration {Beanpublic …...

【Scala 】注解

在 Scala 中&#xff0c;你可以使用注解来为类、方法或字段添加元数据&#xff0c;影响它们的行为。Scala 的注解使用与 Java 类似&#xff0c;但是 Scala 也支持自定义注解。 文章目录 注解的常见使用方法自定义注解 注解的常见使用方法 以下是一些 Scala 中常见的注解以及它…...

数通基础知识总结

1. 基础概念 1.1. 通信基本原理 通信基本原理涉及信息的生成、编码、传输和解码的过程。在实际应用中&#xff0c;例如电话通信&#xff0c;信息通过话筒转换成模拟信号&#xff0c;经过传输线路传递到接收端&#xff0c;再由耳机解码还原为可理解的信息。 1.2. 信道和信号 …...

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…...

安卓和Android是两种不同的操作系统?

实际上&#xff0c;安卓和Android并不是同一种操作系统&#xff01; Android是由Google开发并维护更新的一款操作系统&#xff0c;目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机&#xff1a;哪个更好&#xff1f;Google Pixel 与 Apple iPhone哪个手机才是性价比最…...

Java学习——设计模式——结构型模式2

文章目录 结构型模式装饰者模式桥接模式外观模式组合模式享元模式 结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能&#xff0c;但结构型模式不仅仅简单地使用继承&#xff0c;而更多地通过…...

什么是Maven ??? (以及关于依赖,中央仓库,国内源)

文章目录 什么是 Maven创建第一个 Maven 项目依赖管理Maven 的仓库Maven 如何设置国内源 什么是 Maven Maven &#xff1a;用于构建和管理任何基于java的项目的工具。**说白了就是管理 Java项目 的工具。**我们希望我们已经创建了一些东西&#xff0c;可以使Java开发人员的日常…...

c++期末考题笔试来咯

最后一道大题题目再现 写一个person类&#xff0c;有姓名&#xff0c;性别&#xff0c;年龄。然后在此基础上派生出教师类和学生类。教师类增加了以下数据&#xff1a;工号&#xff0c;职称&#xff0c;工资。学生类增加了以下数据成员&#xff1a;学号&#xff0c;专业&#…...

目标检测篇:如何根据xml标注文件生成类别classes的json文件

1. 介绍 之前在做目标检测任务的时候&#xff0c;发现很多的数据集仅有数据(只有图片标注的xml文件)&#xff0c;没有关于类别的json文件&#xff0c;为了以后方便使用&#xff0c;这里记录一下 一般来说&#xff0c;yolo标注的数据集&#xff0c;只有第一个是数字类别&#x…...

spring见解2基于注解的IOC配置

3.基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" en…...

Uncaught TypeError: Cannot read property ‘snj‘ of null

项目场景&#xff1a; 项目相关背景&#xff1a; 调试项目时&#xff0c;控制台出现红色报错信息 问题描述 问题&#xff1a; 调试项目时&#xff0c;控制台出现如下所示的报错信息&#xff1a; Uncaught TypeError: Cannot read property snj of nullat T.Inj.Ya [as Inj…...

Jenkins基础教程

目录 第一章、快速了解Jenkins1.1&#xff09;Jenkins中一些概念介绍1.2&#xff09;Jenkins和maven用途上的区别1.3&#xff09;为什么使用Jenkins1.4&#xff09;学习过程中的疑问 第二章、安装Jenkins2.1&#xff09;安装之前的准备2.2&#xff09;Windows中Jenkins下载安装…...

嵌入式C语言--WatchDog最全概念

嵌入式C语言–WatchDog最全概念 嵌入式C语言--WatchDog最全概念 嵌入式C语言--WatchDog最全概念一. 什么是Watchdog1&#xff09;什么是“被狗咬”2&#xff09;什么是喂狗 二. 基本思想三. 作用四. 监视目标1) 监视一个进程2&#xff09;监视一个操作系统 五. 系统初始化时关闭…...

数据结构【树篇】(二)

数据结构【树篇】(二&#xff09; 文章目录 数据结构【树篇】(二&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录树(一)、树的存储(二)、树和森林的遍历——并查集(三)、并查集的优化 结语 前言 为什么突然想学算法了&#xf…...

2024上海城博会|上海国际城市与建筑博览会-官 网

2024上海城博会|上海国际城市与建筑博览会 时间&#xff1a;2024年10月30日-11月1日 地点&#xff1a;上海世博展览馆 主办单位&#xff1a;联合国人居署 上海市住房和城乡建设管理委员会 协办单位&#xff1a;上海世界城市日事务协调中心 展会介绍 上海国际城市与建筑博览…...

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目&#xff08;jar&#xff09; 1.3、编写 Dockerfile 文件&#xff0c;构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a&#xff09;简…...

论文查重降重写成大白话可以吗

大家好&#xff0c;今天来聊聊论文查重降重写成大白话可以吗&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文查重降重&#xff1a;用大白话解析 一、引言 写论文是每个…...

【WPF.NET开发】WPF中的命令

本文内容 什么是命令WPF 中的简单命令示例WPF 命令中的四个主要概念命令库创建自定义命令 命令是 Windows Presentation Foundation (WPF) 中的一种输入机制&#xff0c;与设备输入相比&#xff0c;它提供的输入处理更侧重于语义级别。 示例命令如许多应用程序均具有的“复制…...

怎么将epub转换成txt文件?

怎么将epub转换成txt文件&#xff1f;在当前时代&#xff0c;各种各样的电子书是很多人都喜欢接触并阅读的&#xff0c;但很少有人知道电子书格式的不同&#xff0c;其中就包括epub和txt格式&#xff0c;这两种格式虽然都可以展示文本但能达到的效果完全不一样&#xff0c;在某…...

Java单词排序

【问题描述】 编写一个程序&#xff0c;从一个文件中读入单词&#xff08;即&#xff1a;以空格分隔的字符串&#xff09;&#xff0c;并对单词进行排序&#xff0c;删除重复出现的单词&#xff0c;然后将结果输出到另一个文件中。 【输入形式】从一个文件sort.in中读入单词。 …...

Moonsong Labs与Web3演变

作者&#xff1a;Derek Yoo 创建Moonsong Labs的理由 我们创建了Moonsong Labs&#xff0c;其使命是创建推动Web3采用的软件基础设施协议。我们的动力来自这样一个观念&#xff0c;即Web3使人类相互交往更加透明、高效和公正。这无疑是一个值得努力实现的目标&#xff0c;但更…...

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析&#xff08;4&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实现一个json全配置…...

k8s持久化存储(NFS-StorageClass)

一、StatefulSet由以下几个部分组成&#xff1a; 用于定义网络标志&#xff08;DNS domain&#xff09;的Headless Service用于创建PersistentVolumes的volumeClaimTemplates定义具体应用的StatefulSet 二、StatefulSet 特点 StatefulSet 适用于有以下某个或多个需求的应用&a…...

咸阳免费做网站/国际形势最新消息

字符串String类 1.字符串全部在方法区的常量池里面 2.涉及到字符串内容比较用equals()方法 3.当“”运算符两侧的操作数中只要有一个是字符串&#xff08;String&#xff09;类型&#xff0c;系统会自动将另一个操作数转换为字符串&#xff08;String&#xff09;类型然后进行连…...

网站开发要多钱/企业网站推广的方法有

学了下bitset用法&#xff0c;从网上找的一些bitset用法&#xff0c;并从中调出一些常用的用法。 构造函数bitset<n> b; b有n位&#xff0c;每位都为0.参数n可以为一个表达式.如bitset<5> b0;则"b0"为"00000";bitset<n> b(unsigned long…...

苏州企业如何建网站/广告推广 精准引流

为什么80%的码农都做不了架构师&#xff1f;>>> 本文将介绍如何配置jenkins&#xff0c;使其可以支持基于角色的项目权限管理。 由于jenkins默认的权限管理体系不支持用户组或角色的配置&#xff0c;因此需要安装第三发插件来支持角色的配置&#xff0c;本文将使用…...

金泉网网站建设/网站优化入门

dva的思想还是很不错的&#xff0c;大大提升了开发效率&#xff0c;dva集成了Redux以及Redux的中间件Redux-saga,以及React-router等等。得益于Redux的状态管理,以及Redux-saga中通过Task和Effect来处理异步的概念&#xff0c;dva在这些工具的基础上高度封装&#xff0c;只暴露…...

科讯cms怎么做网站地图/关键词优化排名哪家好

目录前言第一种解法&#xff1a;先排序再找第二种解法&#xff1a;线性布局总结前言 这题太简单了&#xff0c;就是从数组里找出三个数乘积最大项目网址&#xff1a;https://leetcode-cn.com/problems/maximum-product-of-three-numbers/ 第一种解法&#xff1a;先排序再找 …...

西安做网站找哪家公司好/网站设计模板

目录介绍原理undo log日志版本链read view&#xff08;读视图&#xff09;与可见性判断事务id和可见性介绍 MVCC(Multi-Version Concurrency Control)&#xff0c;即多版本并发控制&#xff0c;数据库通过它能够做到遇到并发读写的时候&#xff0c;在不加锁的前提下实现安全的并…...