BLE中GATT的服务和特征发现机制
BLE中GATT的服务和特征发现机制
在BLE中,GATT客户端发现服务端服务的过程与经典蓝牙不同,经典蓝牙会有专门的SDP协议来完成。而BLE中,这个过程会直接在GATT层完成。直接在GATT层完成服务和特征的发现。
相关ATT的协议
GATT层协议基于ATT协议,因此一些Attribute的读写也是用的ATT层的接口,这里先介绍下和服务特征发现有关的ATT层接口
- Read By Type Request
- Read By Type Response
上述的req和resp是通过attribute Type(也就是UUID)来获取Attribute。
- Read by Group Type Request
- Read by Group Type Response
上述的req和resp是通过attribute group Type(也是UUID)来获取Attribute。这里通用的type和group type没有太大差别,只是在后面GATT中一个用于服务发现,一个用于特征发现。
更多关于ATT层协议PDU类型的说明请参考BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part F 3.4 ATTRIBUTE PROTOCOL PDUS
服务发现
到了GATT层,当主从设备完成基本的连接,和MTU交换后便由客户端发起服务发现过程。该过程如上图所示,客户端启动《主要服务发现》过程,向服务端询问所有的服务。服务端随后将自己主要服务的UUID返回给客户端。随后客户端继续询问,直到服务端将所有服务的UUID都返回给客户端,这是客户端再询问服务端就直接返回Error Respond终止该过程。
特征发现
特征发现的过程和服务发现过程类似
上述为服务和特征的主要的发现过程,另外还有一些辅助流程。这里不作过多说明,详情可以阅读spec原文BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G 4.4 PRIMARY SERVICE DISCOVERY
抓包
为了更直观的了解服务和特征的发现过程,如下是蓝牙抓包演示。
服务发现
- request
可以看到,服务发现是直接从handle1到max handle。
- respond
随后返回通用的GAP 服务
特征发现
特征发现和服务发现类似
- request
- respond
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!