热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GATT及其服务、特性和属性详解

本文介绍了蓝牙低功耗(BLE)中的通用属性配置文件(GATT),包括其角色、层次结构、属性、特性和服务等内容。

声明:本文参考自 原文章

1. 角色

除了GAP(通用访问配置文件)定义的角色外,BLE还定义了两个与GAP角色独立的角色:GATT服务器和GATT客户端。提供数据的设备被称为GATT服务器,而访问GATT服务器并获取数据的设备则被称为GATT客户端。值得注意的是,一个设备可以同时担任服务器和客户端的角色。

2. GATT层

GATT层负责传输实际数据。GATT服务器通过一个称为属性表的表格来组织数据,这些数据用于实际传输。

2.1 属性

属性包含句柄、UUID(类型)和值。句柄是属性在GATT表中的唯一标识符,每个属性的句柄在设备中都是唯一的。UUID提供了属性表中数据类型的信息,是理解属性表中每个字节意义的关键。一个GATT表中可能包含多个属性,这些属性可能具有相同的UUID。

2.2 特性

特性至少包含两个属性:一个用于声明,一个用于存储特性的值。所有通过GATT服务传输的数据都必须映射为一系列特性。可以将特性中的数据视为一个个捆绑的数据点,每个特性都是一个独立且自包含的数据单元。例如,如果多块数据总是同时变化,可以将它们组合在一个特性中。

2.3 描述符

特性中的属性要么是属性值,要么是描述符。描述符是一个额外的属性,用于提供关于特性的更多信息,通常提供人类可读的特性描述。特别值得一提的是客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD),它用于支持通知或指示功能的特性。在CCCD中写入“1”启用通知功能,写入“2”启用指示功能,写入“0”则同时禁用通知和指示功能。

2.4 服务

服务包含一个或多个相关联的特性。GATT服务通常包含具有相关功能的多个特性,如特定传感器的读取和设置、人机接口的输入输出等。将相关特性组织到服务中不仅实用而且高效,有助于明确逻辑和用户数据的边界,并促进不同应用程序间的代码重用。GATT的设计遵循蓝牙技术联盟(SIG)的规范,SIG建议根据其规范设计自定义的profile。

2.5 Profile(数据配置文件)

一个profile文件可以包含一个或多个服务,其中包含所需服务的信息或对等设备交互的配置信息。设备的GAP和GATT角色可能在数据交换过程中发生变化,因此,profile文件应包含广播类型、连接间隔、安全等级等信息。需要注意的是,一个profile中的属性表不能包含另一个属性表。

2.6 标准和自定义服务及特性

蓝牙技术联盟(SIG)已定义了一些profile、服务、特性和GATT层的属性。然而,协议栈中只实现了一部分BLE服务,这意味着只要协议栈支持GATT,就可以为特定应用创建所需的profile和服务。因此,在一个应用中可以支持profile和服务,从而可以创建自定义服务。

2.7 UUID

GATT层中定义的所有属性都有一个UUID值,UUID是一个全球唯一的128位号码,用于识别不同的特性。

2.7.1 蓝牙技术联盟 UUID

蓝牙核心规范定义了两种UUID:基本UUID和16位UUID。所有蓝牙技术联盟定义的UUID共用一个基本UUID:0x0000xxxx-0000-1000-8000-00805F9B34FB。每个蓝牙技术联盟定义的属性都有一个唯一的16位UUID,用于替代基本UUID的‘x’部分。例如,心率测量特性使用0x2A37作为16位UUID,其完整的128位UUID为:0x00002A37-0000-1000-8000-00805F9B34FB。虽然蓝牙技术联盟使用相同的基本UUID,但16位UUID足以唯一识别各种属性。蓝牙技术联盟定义的UUID不能用于任何自定义属性、服务和特性,自定义属性必须使用完整的128位UUID。

2.7.2 供应商特定的UUID

SoftDevice 以类似蓝牙技术联盟定义UUID的方式定义UUID:首先增加一个特定的基本UUID,然后定义一个16位的UUID(类似于别名),再加载在基本UUID之上。这种方式使得应用更加简单,尤其是在同一服务中。使用nRFgo Studio可以轻松生成一个新的基本UUID。例如,在LED BUTTON示例中,采用0x0000xxxx-1212-EFDE-1523-785FEABCD123作为基本UUID。蓝牙核心规范没有规定如何分配16位UUID,因此可以根据需要自由分配。例如,在LED BUTTON示例中,0x1523作为服务的UUID,0x1524作为LED特性的UUID,0x1525作为按键状态特性的UUID。

2.8 空中操作和性质

大部分的空中操作事件都是通过句柄进行的,因为句柄能够唯一识别各个属性。特性的性质决定了如何使用特性,包括:

1)写

2)无响应写

3)读

4)通知

5)指示

2.8.1 写和无响应写

写和无响应写允许GATT客户端向GATT服务器的特性中写入值。两者的区别在于无响应写事件没有应用层的确认或回应。

2.8.2 读

读性质表明GATT客户端可以读取GATT服务器中特性的值。

2.8.3 通知和指示

通知和指示性质允许GATT服务器在其特性发生变化时通知GATT客户端。两者的区别在于指示有应用层的确认,而通知没有。


推荐阅读
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文探讨了高质量C/C++编程的最佳实践,并详细分析了常见的内存错误及其解决方案。通过深入理解内存管理和故障排除技巧,开发者可以编写更健壮的程序。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
author-avatar
EMBRACE-老王
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有