声明:如果是ble初学者,看到这么多层协议可能感到头晕,已经记不清各层之间是如何衔接的。其实在主机端开发者能接触到的只有HCI层、L2CAP层、属性协议层(ATT)。GATT不属于协议,它是很据ATT层实现的访问规范。每次想到这就忍不住高歌一曲《洋葱》:你就这样一层一层的剥开我的心~,最后真正的数据就剩那么点!
在上一章节我们了解了属性的概念。在实际的应用中,有这么一个数据库,它是由很多条属性组成。这个数据库是一个独立的profile,一个profile可以由至少一个或多个Server 组成。而 一个Server 的由0 或多个引用服务《Include》和至少一个特性《Characteristic》 组成。如下图:
一个特性包括
特性声明
特性值声明
特性描述符
知道你们又开始晕了!来来来~大家跟我一起动动手。
推荐一个BLE的APP工具,它简直就是学习BLE的利器。让我们来使用手机配置一个带电池服务的BLE服务器。
nRF Connect走起~
服务定义的开始为服务声明,结束于下一个服务声明或者句柄达到 0xFFFF。所有的包含定义将紧跟服务声明并在特性定义之前, 所有的特定定义将紧跟在最后一个包含定义,当没有包含定义时,特性定义紧跟在服务声明之后。
属性类型分组
声明的属性的值的声明
特性描述符

GATT规程
对于 GATT 规程定义了如何用 ATT 协议发现和使用服务、特性与描述符的标准方法。
GATT 规程有 3 中基本规程:发现规程、客户端发起规程和服务器发起规程
发现服务和特性
有 3 种方法发现服务:发现所有首要服务、按服务 UUID 发现首要服务、查找包含服务。
在服务发现以后,便可以发现每个服务的特性。要取得完整的特性,需要发现特性和特性描述符
ATT 协议与 GATT 映射表