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 如下表:



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值