BLE协议栈概述-host层
主机协议层——Host主机协议层包括的逻辑连接控制和适配层(L2CAP)、属性协议层(ATT)、通用属性配置层(GATT)、通用访问文件配置层(GAP)和安全协议层(SMP)
1 通用访问配置文件概述——Generic Access Profile(GAP) Overview
GAP 层一共有四种设备角色可以配置:
广播者(Broadcaster):不可连接的广告设备;
观察者(Observer):扫描广播,但不发起建立连接;
外设(Peripheral):可连接的设备,可以在单个链路层中作为从机;
主机(Central):扫描广告设备并发起连接,在单个链路层中作为主机,最多连接三个外设
2 属性协议概述——Attribute Protocol(ATT) Overview
ATT 是离散值,与之相关的有以下三个属性: ATT handle——属性句柄,每个属性都有一个独一无二的 handle; ATT Type——属性类型,由 UUID 定义或用户自定义; A set of permission——一组权限,规定客户端对服务器属性的访问权限。
3 Bluetooth 服务的 UUID
UUID 含义是通用唯一识别码——Universally Unique Identifier,这里的 UUID 主要是关于 Bluetooth 服务的方面标识,由 Bluetooth 技术联盟定义推出。UUID 在表中有两种形式,一种是 16Bit 的,一种是 128Bit 的。其中 16Bit 在最终传输的时候也是 128Bit。UUID 由 Alias 和 Base 两部分。例如:UUID 为 0000xxxx-0000-1000-8000-00805F9B34FB,其中 xxxx 就是Alias
部分,剩余部分为 Base 部分。Bluetooth SIG定义的UUID就是16Bit的Alias部分,它们使用相同的Base部分
4 通用属性配置文件概述——Generic Attribute Profile(GATT) Overview
两个设备应用数据的通信时通过协议栈的 GATT 层实现。因为 GATT 层是 ATT 的配置层,所以 ATT 层的属性与 GATT 所说的属性“特性”是同一个概念。
4.1 GATT 客户端与服务端结构——Client/Server Architecture
从 GATT 角度来看,当两个设备建立连接后,他们处于以下角色之一:GATT 服务器——它是为 GATT 客户端提供数据服务的设备;GATT 客户端——它是从 GATT 服务器读写应用数据的设备。这个 GATT 客户端/服务器和 ATT 层的角色是一样的,两者必须相同。因为 GATT 是 ATT 层属性的定义者。
4.2 GATT 配置文件层次结构——GATT Profile Hierarchy
4.3 服务端示例——Server Example
如上图可知,每一个服务都有很多属性组成,常见的有Include、Primary Service、Characteristic、CharacteristicFormat、Characteristic User Description、Client Characteristic Configuration Descriptor等组成。而在协议栈(程序中)就需要一张服务表来管理这些服务属性了。例如下表
可知,这张服务表由三个部分组成,分别是Handle、UUID(Attribute Type)、Value(Attribute Value)。Handle的范围为0x0001 to 0xFFFF中的任意数,但是不能重复,并且在服务表中是处于增长的趋势,允许不连续增长,所以Handle的值在服务表中是独一无二的。为了方便管理,同一个服务的各个属性最好按照一定的间隔增长。从中可以得出GATT最多只能有65536个属性。
在一个服务的Handle区间,服务的属性类型就要以UUID(即universal unique identifier)来解释了。在每一个服务开始的Attribute Type必须是Primary Service属性或者是Secondary Service属性,接着就是Include或Characteristic了,再接下去就要根据不同的服务功能来分了。
由Bluetooth SIG定义的UUID如下:
4.4 GATT 服务的基本组成
一个基本的GATT服务在除了Handle之外,就包括GATT属性类型和服务内容两部分。而根据在不同的GATT服务中属性类型的Characteristic的详细程度,又可延伸出Characteristic Descriptor(特性描述符)和Characteristic Type(特性类型)。所以对于一个服务内容复杂性,可以根据Characteristic的详细程度来判断。
4.5 GATT 属性类型
由上表可以知道GATT属性类型包括«Primary Service»、«Secondary Service»、«Include»、«Characteristic»四类。这里简单介绍常用的«Primary Service»和«Characteristic»两个
Primary Service 格式
Primary Service 的值就是向 Client 端说明这是一个什么服务,也就是一个服务名字,这个名字也是 16Bit的 UUID。Bluetooth SIG 定义两个通用的服务 GAP 和 GATT 服务。这个值是可以自定的。但是经过查找资料发现,要想自己服务具有通用性,被其他蓝牙设备识别,是要向 Bluetooth SIG 提交申请的。Bluetooth SIG 已经通过了很多服务名字的 UUID,在定义这个值的时候最好查询一下,看看是否存在。
Characteristic 格式
这是GATT最重要的一个属性类型了。它包含了三个部分:Properties、Handle、UUID。Properties描述的是服务性质,具有作用。其常用值如下表:
这个值可以是表中的性质的叠加,比如一个服务具有Notify和Read性质,那这个就是0x10+0x02=0x12。
Handle 就是服务内容在 GATT 服务表中具体的值。这里的 UUID 就是服务内容在 GATT 服务表中具体的UUID。可以自定义(按照 UUID 格式),也可以是 Bluetooth SIG 规范中的。
4.6 GATT 定义的 GATT 服务器与客户端之间的通信子过程
在蓝牙核心规范文档中,一共定义了 11 个 features,每个 feature 对应一种或多种 Sub-procedures。这 11个 features 与对应的 Sub-procedures 如下表:
posted on 2016-04-20 16:25 sichenzhao 阅读(668) 评论(0) 编辑 收藏 举报