写在前面:本文参考了 BLE4.0 低功耗蓝牙 协议 总结 ,对其进行了缩减,整理出了个人能理解的感觉比较基本的内容,有问题请随时跟我沟通 个人QQ:993650814.
前面两篇请参考如下链接
正文:
1、 特性(characteristic)
应用用的是属性的值,而属性的值是在特性分组中的,特性包含3个基本要素:
特性声明(UUID0x2803)、特性声明的属性的值的声明、特性描述符。
来看一下心率计的第一个特性分组,刚好是一个最小的特性:
可以看出,特性声明中的属性值(Attribute Value )中包含的句柄(0x000E)和UUID(0x2A37),刚好是特性声明属性的值声明的属性句柄Handle和属性类型(Attribute Type)。
1.1 特性声明
特性声明本身UUID是0x2803,特性声明需要声明的特性是在属性值中的,属性的值包含三个字段:特性性质1Byte、属性句柄2Bytes和属性类型2Bytes的16bitsUUID或者16Bytes的128bitsUUID(参考上面说的心率计特性),格式如下:
下面简单介绍下特性性质。
特性性质:通过这个字节可以知道,这个属性中的属性值可以被怎么操作,具体如下:
1.2 特性值声明
特性值声明是在特性声明后的第一个属性,所有的特性定义中一定包含有一个特性值声明。格式如下:
1.3 特性描述符声明
特性描述符用来包含一些关于特性值的关联信息,描述符都是用来为特性值服务的。
特性可以包含如下六种特性描述符的组合,
特性扩展性质 :《Characteristic Extended Properties》:0x2900
特性用户描述:《Characteristic User Description》: 0x2901
客户端特性配置:《Client Characteristic Configuration 》:0x2902
服务器特性配置:《Server Characteristic Configuration》:0x2903
特性表示格式:《Characteristic Presentation Format 》:0x2904
特性聚合格式:《Characteristic Aggregate Format》:0x2905
说明一下常用的客户端特性配置描述符 0x2902:
支持通知或指示的特性必须使用客户端特性配置描述符,该描述符是一个2Bits的数值,分别用来表示指示或通知,但不允许同时被设置。格式
属性值(Attribute Value)中bit位的含义:
心率计服务中就有心率计值的通知
2. 属性协议ATT
通信协议主要有3个方面:通信方式、通信包格式、具体通信数据包。
2.1 通信方式
属性协议主要用来发现、读写、通知和指示属性。具体如表:
这个表格中,Request和Response是一对,Indication和Confirmation是一对,这两对在没有得到对方的应答或者确认信息之前不能进行下一包的请求或者指示。命令和通知因为没有应答信息,所以在任何时候可以进行数据包的传输。
2.2 属性协议包格式
含有1Bytes的操作码和其他参数,其他参数有两种格式,一种是不加密的认证信息的参数数据包,一种是带有12Bytes的加密认证的参数数据包,具体如下:
2.3 属性协议PDUs
属性协议数据包,是用来对属性数据库操作的操作的实体。
3.GATT规程和ATT协议映射
3.1 GATT规程定义了如何使用ATT协议发现和使用服务、特性和描述符的标准方法。 GATT规程中有3个基本规程:发现规程、客户端发起规程和服务器发起规程。
3.2 发现服务和特性
有3种方法发现服务:发现所有首要服务、按服务UUID发现服务、查找包含服务。
服务发现以后,便可以发现每个服务的特性。
3.3 ATT协议与GATT映射表
GATT规程映射到ATT PDU:
ATT PDU映射到GATT规程