深入解析BLE属性协议:ATT权限与声明机制

BLE 协议之链路层 在BLE 协议之物理层一文中,我简单介绍了 BLE 的物理层。接下来就是链路层(Link Layer)了,它主要的功能,就是在这些上收发数据,与此同时,不可避免的需要控制 RF 收发相关的参数。通道共享仅仅提供了有限的 40 个,而 BLE 中参与通信的实体的数量,肯定不是这个数量级。Link Layer需要解决的共享问题抽象出逻辑链路:通信是两个实体之间的事情,对这两个实体来说,它们希望看到一条为自己独享的传输通道(就是我们所熟悉的 逻辑链路,这也是Link Layer需要解决的可靠传输。 阅读详情

1. BLE属性协议(ATT)基础解析

第一次接触BLE开发时,我被一堆术语搞得晕头转向——GATT、ATT、Characteristic、Service...直到真正理解了ATT协议,才发现这些概念原来如此清晰。ATT(Attribute Protocol)就像BLE世界的"快递系统",它定义了数据如何打包、运输和签收的规则。

想象你有一个智能手环,它每秒都在产生心率数据。这些数据需要传输到手机APP上显示,ATT就是确保这个传输过程可靠有序的底层协议。它采用经典的C/S架构:

  • Server:像仓库管理员,存储所有数据属性(比如心率值、电量等)
  • Client:像快递员,主动发起请求获取或修改数据

最妙的是ATT的"懒人模式"——当手环的心率数据变化时,Server可以主动通知Client(专业术语叫Notification),避免了手机不断轮询查询的耗电操作。这就像快递员不用每天敲门问"有包裹吗?",而是等你有了包裹主动打电话叫他来取。

2. ATT权限机制:数据安全的四道门禁

去年给医院做智能体温贴项目时,我们踩过一个坑:患者的体温数据竟然能被隔壁床的手机读取!这才意识到ATT权限配置的重要性。BLE通过四层权限机制构建数据安全防线:

2.1 访问权限(Access Permission)

就像办公室的门禁卡,决定谁能进哪个区域:

#define GATT_PERMIT_READ  0x01  // 只读权限
#define GATT_PERMIT_WRITE 0x02  // 只写权限

实际项目中,体温数据我们配置为只读,防止被恶意篡改;而报警阈值参数则开放读写,让护士可以调整。

2.2 加密权限(Encryption Permission)

数据传送时的"保险箱":

#define GATT_PERMIT_ENCRYPT_READ  0x40  // 读取需加密
#define GATT_PERMIT_ENCRYPT_WRITE 0x80  // 写入需加密

医疗设备必须开启加密,否则BLE数据包可能被嗅探工具截获。实测用nRF Connect扫描,未加密的数据就像明信片一样一目了然。

2.3 认证权限(Authentication Permission)

相当于"人脸识别"门禁:

#define GATT_PERMIT_AUTHEN_READ  0x04  // 读取需认证
#define GATT_PERMIT_AUTHEN_WRITE 0x08  // 写入需认证  

认证失败时,CH57X芯片会返回0x0105错误码(Insufficient Authentication)。曾有个Bug:iOS设备配对后仍提示认证失败,最后发现是没正确处理LE Secure Connection配对流程。

2.4 授权权限(Authorization Permission)

最高级别的"双重验证":

#define GATT_PERMIT_AUTHOR_READ  0x10  // 读取需授权
#define GATT_PERMIT_AUTHOR_WRITE 0x20  // 写入需授权

银行级应用会用到这个权限,比如修改转账限额时需要二次密码确认。在BLE中,授权通常在应用层通过回调函数实现。

实际开发中,权限常组合使用。比如智能门锁的密码特征:

permissions = GATT_PERMIT_ENCRYPT_WRITE | GATT_PERMIT_AUTHEN_WRITE

这样既保证传输安全,又确保只有配对过的设备能操作。

3. 属性声明机制:BLE的数据结构设计

如果把ATT属性比作Excel表格,那么声明机制就是定义这个表格的"表头"。每个属性包含四个关键字段:

字段名长度说明
Attribute Handle2字节类似行号,0x0001-0xFFFF。CH57X中句柄自动分配,从0x0001开始递增
Attribute Type2/16字节用UUID标识类型。0x2800-0x2803是服务声明专用UUID
Attribute Value0-512字节实际数据。比如心率服务的值是"55 bpm"
Attribute Permissions1字节前文介绍的权限组合

最近做智能水杯项目时,GATT数据库是这样构建的:

// 温度特征声明
{0x0002, 0x2803, PERM_READ, sizeof(temp_char), &temp_char_props},
// 温度特征值  
{0x0003, 0x2A6E, PERM_READ|PERM_NOTIFY, sizeof(temp_value), temp_data},
// CCC描述符
{0x0004, 0x2902, PERM_READ|PERM_WRITE, sizeof(ccc_value), ccc_data}

这里有个坑:特征声明(0x2803)必须紧跟着特征值(0x2A6E),否则手机端会报"Invalid Attribute Order"错误。

4. 典型应用场景分析

4.1 智能穿戴设备数据交互

以华为手环为例,其GATT服务结构如下:

- 心率服务 (0x180D)
  - 心率测量特征 (0x2A37) [Notify]
  - 心率位置特征 (0x2A38) [Read]
- 电池服务 (0x180F)  
  - 电量特征 (0x2A19) [Read,Notify]

关键点在于:

  1. 心率数据配置为Notify权限,实现后台持续上报
  2. 电量同时支持Read和Notify,既允许主动查询,也支持低电量预警
  3. 所有特征启用加密权限,符合GDPR隐私要求

4.2 不同协议栈实现对比

在CH57X和nRF52832上的权限处理差异:

功能点CH57X实现nRF52实现
权限校验时机ATT层直接拦截非法请求GATT层进行二次校验
错误码返回立即返回0x0105等标准错误码可能先返回0x00再触发应用层回调
加密处理硬件AES加速软件加密(消耗更多CPU资源)

实测CH57X的权限检查耗时约20μs,而nRF52需要50μs。但在动态权限修改方面,nRF52的softdevice架构更灵活。

5. 开发实战技巧

5.1 权限配置黄金法则

  1. 最小权限原则:如无必要,勿增权限。曾有个智能秤因为开放了Write权限被黑客改了校准参数。
  2. 通知类特征:务必配置Write权限给CCC描述符,否则客户端无法订阅通知。
  3. 权限动态调整:像共享单车锁,未开锁时只读,开锁后临时开放Write权限。

5.2 调试技巧

  • 使用Wireshark抓包时,注意观察ATT协议的Opcode字段:
    • 0x01: Read Request
    • 0x12: Write Command
    • 0x1B: Handle Value Notification
  • 权限错误会返回Error Response PDU,常见错误码:
    • 0x0102: Read Not Permitted
    • 0x0105: Insufficient Authentication

5.3 内存优化

对于RAM有限的MCU(如STM32F103),可以:

__attribute__((section(".ccmram"))) 
static uint8_t att_db[512]; // 将属性表放在CCM高速内存区

这样处理ATT请求时能减少总线冲突。实测在72MHz主频下,响应速度提升约15%。

6. 前沿发展

BLE 5.3引入了Enhanced ATT协议,主要改进:

  1. 支持大于512字节的长属性(需分段传输)
  2. 新增Signed Write Command,防篡改
  3. 改进错误处理机制,新增0x07错误码(Invalid PDU)

在最新的医疗设备规范中,要求必须使用LE Secure Connection + Authorization权限组合,确保患者数据万无一失。这就像从普通门锁升级到了指纹+密码+虹膜的三重验证。

【BLE系列-第六篇】GATT解析:属性、特征、描述符的逻辑关系 本文系统介绍了BLE协议中的ATT和GATT机制。ATT以"属性"为基本数据单元,包含UUID、Handle、权限和Value四个要素。GATT则在ATT基础上构建了服务、特征和描述符的层次结构:服务(UUID:0x2800/0x2801)通过声明属性标识,特征声明(UUID:0x2803)指向特征值(UUID:0x2Axx或自定义),描述符(UUID:0x2900~0x290F)提供附加信息。GATT复用ATT发现机制,通过定义特定UUID语义实现服务发现和特征管理。这种设计使BLE设 阅读详情

相关推荐

蓝牙开发实战:GATT协议中的UUID、特性与属性详解(附Nordic SDK代码解析)

本文深入解析蓝牙GATT协议中的UUID、特性与属性,结合Nordic SDK代码示例,为开发者提供实战指南。详细讲解GATT基础架构、UUID类型与应用、特性实现方案及CCCD配置技巧,帮助开发者高效构建BLE物联网设备,提升数据交互效率与可靠性。

pink的博客 729

三:BLE协议架构简介

BLE协议架构简介

bandaostart 3883

深入解析BLE通信核心:GATT与ATT协议实战指南

本文深入解析了BLE通信的核心协议GATT与ATT。通过智能家居等实战场景,详细阐述了ATT协议作为数据“搬运工”如何定义属性的存储与访问,以及GATT协议作为“架构师”如何通过服务与特征组织数据。文章提供了从理论到代码的完整指南,帮助开发者掌握BLE设备与手机App交互的关键技术,实现稳定可靠的物联网通信。

weixin_29193259的博客 440

BLE 协议之 ATT

ATT) ,BLE 属性协议,它是处于L2CAP协议层与GATT之间的一层属性操作协议,用于在一对蓝牙设备之间发现、读取、写入属性。这一层的关键词是Attribute属性一个属性就是一条数据,属性是 BLE 数据提供单元,也是蓝牙空中传播数据的最上层,BLE 开发过程中接触最多的就是这一层。属性协议允许称为服务器的设备向称为客户端的对等设备公开一组属性及其相关值。服务器公开的这些属性可以被客户端发现、读取和写入,并且 可以由服务器指示和通知。属性类型,通过UUID表示属性类型指定属性表示什么含义。

Projectsauron 的博客 2288

BLE开发避坑指南:一文搞懂ATT协议里的属性句柄、UUID和权限到底怎么用

本文深入解析BLE开发中ATT协议的关键数据结构,包括属性句柄、UUID和权限设置,帮助开发者避开常见陷阱。通过实战案例和代码示例,详细讲解如何正确管理属性句柄、设计UUID以及配置安全权限,提升低功耗蓝牙(BLE)应用的开发效率和通信安全性。

weixin_42657024的博客 383

蓝牙协议冷知识:为什么ATT和GATT要分开设计?从省电哲学聊BLE协议栈

本文深入探讨了蓝牙低功耗(BLE)协议栈中ATT与GATT分离设计的核心原因。通过剖析两者在数据模型、协议开销和职责上的差异,揭示了这种分层架构如何完美体现BLE的“极致省电”哲学,即在保证设备互操作性和灵活性的同时,最大化能效,从而支撑起庞大的物联网生态。

corn8的博客 437

BLE核心协议,ATT(Attribute Protocol)概念介绍

摘要:BLEATT(AttributeProtocol)是蓝牙低功耗通信的核心协议,负责设备间数据存储和读写操作。它将数据组织为带句柄的属性单元(包含句柄、类型、值和权限),通过客户端/服务器模式交互。GATT基于ATT构建,定义属性如何组成服务、特征等结构化数据。ATT采用短报文设计(默认23字节),支持高效句柄寻址和状态缓存,实现低功耗传输。典型交互包括读写请求/响应、服务器通知等PDU类型。开发中需注意GATT是ATT的上层规范,特征通常对应多个ATT属性,且句柄多为动态分配。

朝气蓬勃 989

告别调试烦恼:用Lattice Diamond手把手教你JTAG烧录FPGA(附SRAM/Flash模式详解)

本文详细介绍了使用Lattice Diamond软件进行JTAG烧录FPGA的全流程,包括SRAM临时调试和Flash固化的核心区别。从环境准备、硬件连接到文件准备、烧录模式选择,再到典型问题排查和高级技巧,手把手教你快速掌握FPGA烧录技术,提升开发效率。

weixin_42569329的博客 495

物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探

0x00 目录 0x00 目录 0x01 前言 0x02 BLE概述    BLE 协议栈总览    GAP-通用访问规范    GATT-通用属性协议 0x03 BLE嗅探 0x04 伪造BLE通信 0x05 分析BLE私有数据协议(灯泡、跳蛋、小米手环)    1.YeeLight 2 代蓝牙灯泡    2.小爱爱智能跳蛋(这个真不是我的,...

weixin_34037977的博客 752

DIY一个SM2262ENG 2TB Nvme固态硬盘,慧荣SM2262EN主控

网友订做的 材料: 慧荣科技的62en,2片1G 三星DDR4缓存,4颗PF29F04T2AOCTH1,8CE B17A。SM2262EN属于慧荣第二代PCIe SSD主控,支持PCIe G3×4通道和全新的NVMe 1.3规范、8个NAND通道设计,并提供完整固件设计,最大循序读取速度高达3.5GB/s,循序写入速度达3.0GB/s,随机读写则高达420K IOPS和420K IOPS。此外,还采用目前最先进的低功耗设计,无论是在待机还是在工作状态下,均展现超低功耗,有效减少30%的功耗,满足用户追求超

m0_55207244的博客 1万+

深入解析STM32定时器中央对齐模式3的双中断机制

本文深入解析了STM32定时器中央对齐模式3的双中断机制。该模式在一个PWM周期内,会在计数器到达ARR(上溢)和0(下溢)时各触发一次更新中断,实现更精细的实时控制。文章详细阐述了其工作原理、配置方法,并指导如何在中断服务函数中通过DIR位区分中断来源,同时探讨了其在电机控制、数字电源等场景下的应用优势与CPU负载挑战。

weixin_29164185的博客 493

深入解析BLE通信:GATT与ATT的核心机制与应用实践

本文深入解析了BLE(蓝牙低功耗)通信的核心机制,重点剖析了ATT协议作为数据传输基石的作用,以及GATT框架如何组织数据为服务与特征值。文章通过生动的比喻和实战案例,详细阐述了属性句柄、UUID、权限等关键概念,并对比了通知、指示等不同交互模式的应用场景与选择策略,为开发稳定高效的物联网产品提供实用指南。

hadoop5ranger的博客 829

当GO.db安装失败时,生物信息学新手应该知道的5个底层逻辑

本文为生物信息学新手提供了解决GO.db安装失败的5个关键底层逻辑,包括网络连接与镜像源设置、版本兼容性检查、依赖关系管理、SQLite存储机制理解以及调试技巧。特别针对Bioconductor的GO.db包安装问题,详细介绍了如何通过切换国内镜像、管理版本冲突和解决依赖问题来成功安装,帮助用户高效克服常见安装障碍。

weixin_29062823的博客 407

手把手教你读懂BLE属性数据库:从ATT格式到GATT服务声明全解析

本文深入解析BLE属性数据库的核心机制,从ATT协议的基础属性格式入手,详细阐述了句柄、UUID、权限等关键概念。通过心率监测器实例和Wireshark抓包分析,手把手教你理解GATT服务与特征的声明规则、二进制布局及调试方法,是掌握低功耗蓝牙通信底层原理的实用指南。

yoga7的博客 643

后仿真中《SDF反标必懂连载篇》之 Negative Delay (理论篇)

今天,学习一下SDF文件中的负数延时问题。比如下面的图片中的SETUPHOLD 中的hold time 为负数。

那么菜的博客 2573

从零到一:Python+Playwright 实现动态网站全量数据采集实战(附反爬对抗与性能优化)

在动手之前,先明确武器优势: 2. 项目结构规划 为了代码可维护性,我们采用模块化结构: 三、核心实战:构建动态采集器 第一步:初始化“隐身”浏览器 普通启动容易被检测,我们需要注入一段 JS 脚本来抹除自动化特征。 第二步:处理无限滚动与动态加载 这是动态网站的核心难点。我们需要模拟人类滚动,并等待新数据加载完成。 第三步:登录态保持与复用 避免每次运行都重新登录。我们将 Cookie 保存到本地,下次直接加载。 第四步:主流程编排 将上述模块串联起来,并加入异常重试机制。 四、进阶优化:性能与反爬

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1163

深入解析蓝牙ATT协议:属性表设计与UUID分类实战

本文深入解析蓝牙ATT协议,重点探讨属性表设计与UUID分类的实战应用。通过详细讲解属性表的核心作用、UUID分类及权限管理技巧,帮助开发者优化BLE通信效率。文章包含TI CC26xx和nRF Connect的实战代码示例,适合蓝牙低功耗开发人员参考。

wind6的博客 709

SpringBoot 教程:SpringBoot多种方式实现静态Html页面跳转

本教程介绍了 Spring Boot 中实现静态 Html 页面跳转的常用方法,包括重定向跳转、直接返回 ModelAndView 对象以及使用 Thymeleaf 模板引擎。如果你的项目中使用了 Thymeleaf 模板引擎,那么可以利用它来实现静态页面的跳转。对于静态的 Html 页面,我们可以使用多种方式来实现跳转功能。重定向是一种常见的页面跳转方式,它通过发送 HTTP 重定向响应头来告知浏览器跳转到指定的页面。在 Spring Boot 中,我们可以将视图名称设置为静态页面的路径。

2301_79325657的博客 2448

BLE GATT/ATT协议原理与ESP32实战解析

GATT(通用属性配置文件)和ATT(属性协议)是蓝牙低功耗(BLE)数据交互的核心基础协议,定义了客户端-服务器模型下的结构化数据组织与访问机制。其本质是基于属性句柄、UUID类型、属性值和权限控制的轻量级数据库协议,支撑服务(Service)、特征(Characteristic)和描述符(Descriptor)三级语义模型。该设计兼顾嵌入式资源约束与跨厂商互操作性,广泛应用于物联网设备通信、传感器数据上报及远程控制等场景。在ESP32平台,GATT/ATT通过Bluedroid协议栈与GATTS/GAT

cheese的博客 807

声音源定位:利用YOLO与麦克风阵列定位声音来源YOLOv5、YOLOv8、YOLOv10

YOLO(You Only Look Once)是一个用于目标检测的深度学习模型。YOLO的最大特点是其通过一次前向传播即可完成多个目标的检测,速度和精度相对其他目标检测算法具有显著优势。YOLO模型的版本不断更新,从YOLOv1到YOLOv10,算法精度和速度都有了显著的提升。声音源定位是利用多个麦克风阵列收集的声音信号,通过算法计算声音源的位置。声音源定位的关键在于准确估计每个麦克风的声音到达时间,从而确定声音源的空间坐标。基于时延估计(TDOA)

YOLO 673

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

BLE协议栈 – ATT

ATT(Attribute Protocol)属性层是GATT和GAP的基础,它定义了BLE协议栈上层的数据结构和组织方式。 属性(Attribute)概念是ATT层的核心,ATT层定义了属性的内容,规定了访问属性的方法和权限。以编程的眼光来看,属性是一个数据结构,它包括了数据类型和数据值,就如同C语言结构体的概念,开发者可以设计独特的结构,来描述外部世界实体。属性包括三种类型:服务项、特征值和描...

琦。 859

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BLE低功耗蓝牙协议栈与GATT/ATT核心机制解析

本文深入解析BLE低功耗蓝牙协议栈的分层架构与GATT/ATT核心机制。详细阐述了GATT如何基于ATT协议,通过Service和Characteristic组织数据,并介绍了属性定义、权限控制及ATT命令交互流程,为开发低功耗蓝牙应用提供关键指导。

ol789012345的博客 586

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ESP32 BLE GATT/ATT协议栈原理与工程实现

GATT(通用属性配置文件)和ATT(属性协议)是蓝牙低功耗(BLE)数据交互的核心基础协议,共同构成设备间结构化通信的语义框架。ATT定义了以‘属性’为单元的数据存储与访问机制,包括句柄寻址、UUID标识、值内容及权限控制;GATT则在其上构建服务(Service)、特征(Characteristic)和描述符(Descriptor)的层级模型,实现面向应用的数据组织。该架构支撑读写、通知、指示等关键交互模式,广泛应用于物联网终端如传感器、LED控制器、可穿戴设备等。在ESP32平台,其通过ESP-IDF

herb5的博客 849

从智能手环到血糖仪:拆解BLE ATT协议如何定义你的设备‘能力’与‘权限’

本文深入解析BLE ATT协议在医疗设备中的应用,重点探讨如何通过UUID分类系统和权限矩阵定义设备能力与安全边界。以血糖监测手环为例,详细介绍了医疗级设备的ATT层设计策略,包括权限控制、数据完整性保护及跨设备互操作性解决方案,为开发符合医疗合规要求的蓝牙设备提供实践指导。

weixin_30731305的博客 2546

【BLE协议栈-ATT篇】从零解析属性协议:Handle映射、UUID分类与报文交互实战

本文深入解析BLE协议栈中的ATT(属性协议),详细介绍了Handle映射、UUID分类与报文交互实战。通过类比快递柜和超市货架,生动解释了ATT协议的核心概念,包括属性表的数据组织、高效查询机制和灵活交互模式。文章还提供了实战优化技巧和常见问题排查指南,帮助开发者快速掌握BLE数据交互的关键技术。

weixin_28700593的博客 234
上一篇: Brocade交换机维护实战:用这15条命令搞定日常健康检查
下一篇: GNSS-R在气象监测中的5个创新应用场景,第3个太实用了!
sql99
博客等级 码龄19年 168粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值