【蓝牙协议栈】【BLE】【GATT】精讲GATT Profile架构(图文并茂精华版)

news2024/11/15 14:06:46

目录

1. 蓝牙BLE通用属性协议(GATT)

2.GATT角色介绍

3.GATT 层级和Profile架构

4. GATT Server架构(重点内容)

5. Characteristic架构(重点内容)

6. (Characteristic Properties)特性属性详解(重点内容)


时间有限,此文将会继续优化完善

1. 蓝牙BLE通用属性协议(GATT

GATT(Generic Attribute Profile):通用属性协议,它是在ATT 的基础上,对 ATT 进行的进一步逻辑封装,定义数据的交互方式和含义。它是低功耗蓝牙BLE设备之间进行通信的协议。GATT定义了一种多层的数据结构,已连接的低功耗蓝牙设备用它来进行通信,其定义的多层数据结构简要概括起来就是服务(service)可以包含多个特征(characteristic),每个特征包含属性(properties)和值(value),还可以包含多个描述(descriptor)。

➢ GATT基于ATT协议(属性协议)来承载的,属性协议主要用来发现、读写、通知和指示。

➢ GATT 可以被 Application 或其他 Profile 使用,其协议栈如下图:

1、GATT 是脱胎于 ATT ,ATT 是 Attribute Protocol Specification 属性规范协议,注意ATT是协议,而GATT是规范,两者不同点在于 ATT规定了数据格式,而 GATT 则是按照 ATT 的格式将具体数据填充进去
2、GATT层是传输真正数据所在的层。包括了一个数据传输存储架构以及其基本操作GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理
3、ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪些信息,ATT并不关心,这是GATT(Generic Attribute Profile)的主场。

4、GATT相对ATT只多了一个‘G‘,但含义却大不同,因为GATT是一个profile(更准确的说是profile framework)。

5、在蓝牙协议中,profile一直是一个比较抽象的概念,我们可以将其理解为“应用场景、功能、使用方式”都被规定好的Application

2.GATT角色介绍

➢ GATT 可以配置为如下两种角色,SIG GATT文档中的角色释义原文如下:

     Client—This is the device that initiates commands and requests towards the server and can receive responses, indications and notifications sent by the server.

                  该设备可以向服务端发起命令和请求,并且能接收服务端发送的响应、指示和通知。

     Server—This is the device that accepts incoming commands and requests from the client and sends responses, indications and notifications to a client.

                  该设备可以接收来自客户端的传入命令和请求,并向客户端发送响应、指示和通知。

➢简单理解:谁发起命令和请求,谁就是GATTC;谁接收命令和请求,谁就是GATTS。

➢一个设备可以同时扮演这两个角色:这些角色没有固定到设备上,角色在设备启动已定义的过程时确定,并在过程结束时释放。

GATT客户端抽象层:在GATT客户端应用程序大部分是直接使用GATT的API(少部分直接使用ATT层API),没有额外profile文件,因为GATT客户端是得到数据,不需要建立属性表和配置文件。
GATT服务端抽象层:在GATT服务端,GATT层的大部分功能由独立的Profiles处理,然后可以看见Profiles又使用GAttservApp模块(一个可配置的模块,用于储存和管理属性表,详见BLE Stack API Reference)处理。所以在建立GATT服务端的时候首先需要配置Profiles文件,Profiles文件调用GattServApp模块并使用其API与GATT层接口。在这种情况下应用程序不需要直接调用GATT层API、应用程序和Profiles文件接口。

3.GATT 层级和Profile架构

GATT按照层级定义了4个概念:

➢ GATT Profile: 一种规范,一种标准的通信协议。每个Profile由一个或多个Service组成, Service由一个或多个Characteristic组成,或是其他服务的引用(Include) ,Characteristic又由多个Attributes( Properties、Value、Descriptor(0,1或多个) )组成,每个Attribute又包含ATT Handle、 ATT Type、 ATT Value、 ATT Permissions。

Service:一种服务,也就是从机的能力。例如,蓝牙从机的电量信息服务、系统信息服务等。每个service中又包含多个characteristic特征值,每个具体的characteristic才是BLE通信的主题。

Characteristic:特征值,BLE主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。

举个例子,Heart Rate Measurement Characteristic。

这个 Characteristic 是Heart Rate Service必须实现的,它的UUID为0x2A37。它的数据结构是,开始8bit定义心率数据格式,后边的是对应格式的实际心率数据。

UUID:统一标识码,service 和 characteristic 都需要一个唯一的UUID来标识。

1、对于GATT层的Profile、Service、Characteristics、Attributes概念,我们一定要深入理解,因为一旦建立连接后,不管是嵌入式端还是应用端进行数据交互的都是这些概念。
2、基于GATT架构,Application的存在形式,不再是单一的Profile,很多简单的应用场景,可以直接以Service的形式存在(profile的概念隐藏在了GATT中),可以理解为“Service”实例化了。这大大简化了一些传感器节点的设计复杂度
3、实线为一个服务必须包含的部分,虚线为可选择的部分。

注:一个Profile中的属性表不能包含另一个属性表

4. GATT Server架构重点内容

服务组成:GATT 数据框架都是有一个或者多个service 并列组成的。用户通过定义不同的service,实现不同的功能。一系列ATT数据组成一个group,表示一个service。所有的service都必须满足相同的数据要求,具体分为三个部分

1. service服务申明(必须)

2. 包含其他include服务(可选)

3. Characteristic特性(必须),特性中含有Properties (必须) 、value(必须)、descriptor(可选)

一个服务包含一个或多个特性,这些特性是逻辑上相关的集合体。GATT服务一般包含几块具有相关性的功能,比如特定传感器的读取和设置,人机接口的输入和输出。
 

GATT Server类型及声明重点内容

服务类型: 服务有两种类型,primary service 和secondary service,primary service可以被其他service 所包含,可以通过discover 流程发现。secondary service只能被primary service 或者其他secondary service 所包含,不能独立存在。一个服务的类型,会在声明中注明。主要服务声明UUID 0x2800,次要服务声明UUID 0x2801。

include 是service 中可选择的部分,它只是一种用来引用已存在服务的方法,引用服务声明UUID为0x2802。

服务声明: 每个定义的service第一条就是服务声明, 因此以服务声明可以分隔开所有不同的服务。声明之后,紧跟include 和 characteristic部分。

红色部分为一个服务必须包含的部分,蓝色为可选择的部分。

服务声明的数据结构:ATT类型(仅有两种)+ ATT value(服务的具体类型,UUID表示,比如电量服务,GAP服务等等),因此服务声明的Value包含了服务的UUID,服务权限为read only,不可以被修改,由server 端在自定义数据表格的时候确定。

5. Characteristic架构(重点内容

特性其实是个集合,特性包含以下子元素:

      1.特性声明(Characteristic Declaration)

      2.特征值声明(Characteristic Value Declaration)

      3.特征描述符声明(Characteristic Descriptor Declaration)

特性声明、特征值声明是必须要有的,但特征描述符是可选项,可能包含一个或多个描述符,也可能不包含描述符。

1、Characteristic是在GATT规范中最小的逻辑数据单元,由一个Value和多个描述特性的Desciptior组成。实际上,在与蓝牙设备打交道,主要就是读写Characteristic的value来完成。

2、一个特性至少包含2个属性:一个属性用于声明,一个属性用于存放属性的值

2.2 (Characteristic declaration)特性声明架构(重点内容

特性声明(Characteristic declaration):特性声明本身的 UUID 是 0x2803

特性声明中需要声明的特性是在属性值(Attribute value)中的,属性值包含有 3 个字段: 特性属性、属性句柄和属性类型,特性声明的权限仅为只读。如左下图:

任何特性都必须包含特性申明,特性声明中的属性值的3个字段中特性属性占 1 个字节,属性句柄占2个字节,属性类型要么是 2 字节 16bits 的 UUID 或者是16字节128bits的UUID,如右下图。

6. (Characteristic Properties)特性属性详解(重点内容

通常的属性有如下几个:

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

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

相关文章

一款免费的目录以及文件对比工具,替代Beyond Compare

Beyond Compare是一款功能强大的文件对比工具,但是由于是付费软件,很多没有购买的企业用户无法使用。CCompare就是一款替代Beyond Compare的免费方案,一款来自中国的可替换beycond compare, 免费使用的代码同步对比工具。 CCompare 是一款功…

【科研绘图】【分条热力图】:附Origin详细画图流程 + 案例分析

目录 No.1 理解分条热力图 No.2 画图流程 1 导入数据,绘制图形 2 设置绘图细节 3 色阶控制 4 设置坐标轴 5 效果图 No.3 案例分析 1 案例一 2 案例二 No.1 理解分条热力图 分条热力图,基于数据映射和颜色编码,是在热力图的基础上进…

聚星文社下载地址

聚星文社绘唐科技是一个文化传媒公司,以绘制唐朝相关的科技设备和场景为主题。该公司致力于通过插画、动画、游戏等形式,栩栩如生地展现唐朝时期的科技发展和生活场景。 聚星文社下载地址https://iimenvrieak.feishu.cn/docx/ZhRNdEWT6oGdCwxdhOPcdds7n…

unity Standard Assets资源商店无法安装解决方案

Unity游戏开发 “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发unity中国 嗨嗨嗨,我来啦。 这几天的川渝之旅已经圆满结束了,今天开始正常给大家更新: Unity…

TiggerRamDisk绕过激活界面,支持最新iOS17.4.1绕过

iOS15等待越狱的日子实在太久了!checkra1n越狱目前还未发布iOS15系统越狱。 可很多朋友不小心或者大意已经升级到了最新iOS15系统。一般来说这并没有什么大碍,但如果是绕过激活的设备,或者忘记账户密码而刷机的设备,就会面临无法…

【计算机组成原理】强化部分笔记

第一章 计算机系统概述 考点1 计算机系统层次结构 1.计算机发展历程已从大纲中删去 2. 3.指令和数据都存放在存储器中,通过指令周期不同来区分(比如取指周期和执行周期) 现代的计算机以存储器为中心 4. 5. 6.汇编语言:STORE、L…

[云计算] 虚拟化笔记

原著: 韩冰,[云计算课程], 有删改。 目的 对 IT 资源简化,用户通过标准接口访问。 资源是提高一定功能的实现 。可以是硬件, 如CPU, 也可以是软件。 发展史 1961 IBM CPU 分时间片, 一个CPU 虚拟化为多…

数据结构: 树状数组

在OI赛事中,数据结构是非常重要的一个内容,更是有人说过,算法数据结构程序: A l g o r i t h m D a t a AlgorithmData AlgorithmData S t r u c t u r e P r o g r a m m i n g StructureProgramming StructureProgramming 接下来&#…

Python | Leetcode Python题解之第373题查找和最小的K对数字

题目: 题解: class Solution:def kSmallestPairs(self, nums1: List[int], nums2: List[int], k: int) -> List[List[int]]:m, n len(nums1), len(nums2)# 二分查找第 k 小的数对和left, right nums1[0] nums2[0], nums1[m - 1] nums2[n - 1] 1…

【大模型从入门到精通40】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流2

这里写目录标题 使用Kubeflow Pipeline组件:输出与任务对象理解PipelineTask对象通过PipelineTask.output访问输出数据组件函数中的关键字参数实用贴士 在Kubeflow Pipelines中链接组件:传递输出定义依赖组件传递组件输出常见错误:传递正确的…

【Python进阶(十)】——Matplotlib基础可视化

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

Gradle安装使用

下载安装包 Gradle | Releases 解压后在.bash_profile添加环境变量 更新并检查 source ~/.bash_profile

计算机的错误计算(七十二)

摘要 讨论大数的余割函数 csc(x)的错误计算。 例1. 在 Excel 中计算 csc(1234567.89) . 直接贴图: 然而,正确值是 -0.2023325675399672e1(ISRealsoft 提供)。 Excel 的输出中有 6位错误数字。 例2. 在 Maple中计算 csc(32^58…

回归预测|基于北方苍鹰优化极端梯度提升树的数据回归预测Matlab程序NGO-XGBoost多特征输入单输出

回归预测|基于北方苍鹰优化极端梯度提升树的数据回归预测Matlab程序NGO-XGBoost多特征输入单输出 文章目录 前言回归预测|基于北方苍鹰优化极端梯度提升树的数据回归预测Matlab程序NGO-XGBoost多特征输入单输出 一、NGO-XGBoost模型1. 理解XGBoost2. 理解NGO优化算法3. NGO-XGB…

Kmeans算法原理及Python实现

K-means算法是一种广泛使用的聚类算法,其原理相对简单且易于实现,属于无监督学习的一种。以下是对K-means算法原理的详细解析: 一、基本思想 K-means算法的基本思想是将数据集划分为K个簇,使得每个簇内的数据点尽可能相似&#x…

从0到1使用webpack搭建react脚手架

背景 好多前端童鞋工作多年依然不会使用webpack搭建react脚手架,本文就介绍下如何从零开始搭建一个属于你自己的前端脚手架,提高自己的工程化实力,同时也提高团队的开发效率。 一、基础配置 目标:可以启动最简单的react项目 初…

调用股票网站接口读取大A数据——个股资金流入趋势

以某股票为例,调用自定义的一个类,读取数据。 class BigAData:# 获取资金流向数据def get_money_flow(self, stock_code, page1, num20, sortopendate, asc0):该函数通过股票代码从新浪财经API获取资金流向数据。参数包括股票代码、页数、每页数量、排序…

Elasticsearch安装 Kibana安装

安装Elasticsearch 一、拉取镜像或者上传 docker pull Elasticsearch 二、将上传的镜像导入(在仓库拉取的这一步跳过) docker load -i es.tar docker load -i 三、创建容器 1.Elasticsearch 注意修改到自己的网络(第八行) docker run -d \--nam…

创意无限,思维升级:2024年思维导图软件新趋势与精选推荐

如何高效地整理思绪、规划项目、乃至进行知识管理,成为了每个人都需要面对的重要课题。xmind思维导图这一强大的思维工具,可以辅助我们对只是进行梳理,这次我就展示一下这类思维导图工具有哪些。 1福晰思维导图 链接一下:https:…

HashMap 的实现原理

说一下 HashMap 的实现原理? JDK1.7 HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。(其实所谓Map其实就是保存了两个对象之间的映射关系的一种集合),其中Key 和…