TI_BLE软件开发者指导7——属性(笔记)

本文详细介绍了蓝牙BLE中的属性概念,包括属性协议、属性数据库、服务与规范、特性等,强调了属性协议的简单性和重要性。通过属性协议,客户端与服务器之间进行通信,读取和写入属性值,实现数据的交换。BLE设备采用服务和特性分组,通过服务声明和特性声明定义数据接口。此外,文章还讨论了如何通过不同请求和响应进行数据交互,如读取、写入、通知和指示等操作。
摘要由CSDN通过智能技术生成

Texas Instruments CC2540/41
Bluetooth® Low Energy
Software Developer’s Guide
v1.3.2
Document Number:SWRU271F

《低功耗蓝牙开发权威指南》
Robin Heydon著,陈灿峰、刘嘉 译
机械工业出版社
2014.6

TI_BLE软件开发笔记7-属性

标签:读书笔记 BLE


包含属性层和通用属性规范层。属性协议被集成到核心规范时,SIG将其分割为一个抽象协议和一个通用配置文件。将通用属性规范从属性协议里抽象出来,理论上允许在属性协议上架构其他的通用规范。

1 背景

协议应当十分简单,因为任何的复杂性都会增加额外的成本和所需的存储空间;同时协议的数量要越少越好。BLE最后使用了三种协议:逻辑链路控制与适配协议(L2CAP)、安全管理协议(SM)和属性协议(AP)。
随后的目标便是尽可能减少协议的数量,让通用属性规范(GATT)之上的所有服务都是用属性协议(AP),包括用来提供名字和存在发现的通用访问规范(GAP)。这样在GATT上构建其他服务而成本被降至最低。

1.1 精简协议

BLE并不试图传输多样化的的数据类型,考虑到不会用来传输大批量的数据或是流媒体音乐,为其开发一种能够处理有限的几种数据类型的协议就可以。这种协议被称为属性协议,是整个蓝牙技术的基石和构造组件。

1.2 无所不在的数据

提供数据的设备成为服务器,使用其他设备的数据的设备成为客户端。

1.3 数据与状态

“状态”是指保存在服务器上的信息;数据指的是服务器传给客户端的信息,或是客户端当前持有的信息。因此服务器可以认为是一个持有许多状态信息的设备,客户端是读写该状态信息或者在本地缓存为数据的设备。由于客户端在获得服务器的数据时后者的状态可能已经发生了改变,因此客户端的数据不具有权威性。
设备具有状态,并将状态保留在服务器上。

1.4 几种常见的状态

BLE用到了三种不同种类的状态类型:外部状态、内部状态和抽象状态。
内部状态是设备当前的工作状态。
抽象状态是一种只和某一瞬间有关的状态信息,不反应设备当前的外部或内部状态。在属性协议里,这些抽象状态称作控制点,一般不可读取但可被写入或被通知。

1.5 状态机

有限状态机可以明确的使用属性协议和可公开的状态表示。状态机反映了设备的内部状态,并且有一个或多个外部的输入接口。这些外部输入为瞬时命令,根据其他状态信息或行为来改变状态机的状态,这是一个抽象状态,或称为控制点。

1.6 服务与规范

经典蓝牙的问题:现有的规范对网络中的设备自身的行为定义不够明确;现有的规范几乎无法用于当初没有预想过的新场景。
BLE采用了纯粹的“客户端——服务器”的结构,针对不同的用例对服务器和客户端的行为单独进行描述。服务器的行为在服务器规格书中定义,而用户的行为在另一规范说明中定义。通过一个属性数据库,服务器规格书定义了需要公开的状态以及通过属性可以实现的行为。
客户端规范从本质上是一组有关发现、连接、配置和使用各种服务的规则。同时,服务也包括了如何执行客户端要求的一系列操作的标准步骤。

2 属性

属性是一条带有标签的、可以被寻址的数据。

2.1 属性描述

属性的结构:
属性的结构

2.2 属性句柄

一个设备可以具有许多属性。表面看通过属性类型足以判断某种属性,但如果一个设备包含了室内室外两种温度值。通过属性句柄解决这个问题。
有效的句柄范围:0x0001~0xFFFF。0x0000无效句柄,不能用于寻址属性。

2.3 属性类型

所公开的数据的种类称作属性类型。为了区分众多的数据类型,采用128位的通用唯一识别码(UUID)来标识属性类型。
为了提高传输效率,SIG定义了一个称为“蓝牙UUID基数”的128位通用唯一识别码,结合一个较短的16位数使用。二者仍遵循UUID的分配规则,只不过在设备间传输常用的UUID时,只发送较短的16位版本,接收方收到后补上蓝牙UUID基数即可。
蓝牙UUID基数:

00000000-0000-1000-8000-00805F9B34FB

假设要发送的16位识别码位0x2A01,完整的128位UUID就是:

00002A01-0000-1000-8000-00805F9B34FB

16位UUID,通常不直接使用其数值,而是冠以一个名称并加上书名号。例如用《include》标识0x2802的UUID。UUID并没有定义自身的用法,为了增加人工调试时的可读性,BLE使用的那部分UUID被分为以下几组:

  • 0x1800~0x26FF 被用作服务类通用唯一标识码
  • 0x2700~0x27FF 用做标识计量单位
  • 0x2800~0x28FF 用作区分属性类型
  • 0x2900~0x29FF 用作特性描述
  • 0x2A00~0x7FFF 用作区分特性类型

2.4 属性值

属性值用于表示设备公开的状态信息,某些类型的属性值长度固定的。属性值对于属性协议来说并不重要,但对于通用属性规范和其之上的服务与规范来说有着相当重要的意义。
1.服务通用唯一识别码
每一种服务都能用一个UUID来辨认,既可以是16位,也可以是128位。
2.单位
为所有可能的数值定义相关单位的UUID。
3.属性类型
用于识别属性类型的UUID中包含了一些最基本的属性类型,一般用于通用属性规范,而非具体的服务。这些属性类型包括:

  • 首要服务
  • 次要服务
  • 包含
  • 特性

4.特性描述符
一些服务公开的数据包含了额外的信息。这种额外的信息便被冠以特性描述符。例如一个描述相关数值的格式的信息(格式与表示方式)便是所谓的描述符。
5.特性类型
服务为公开的每一类数值都分配了一个“特定类型”UUID。客户端从而能够发现服务器提供的所有不同类型的数据。每一个特性类型都有既定的格式和表达方式。

2.5 数据库、服务器和客户端

一组属性的集合称为数据库。属性数据库总是位于属性服务器中。通过属性协议,属性客户端和属性服务器进行通信。对于BLE设备而言,由于强制要求属性数据库支持GAP服务,每一部低功耗蓝牙设备都包含有一个属性服务器和一个属性数据库。

属性句柄 属性类型 属性值
0x0001 首要服务 GAP服务
0x0002 特性 设备名
0x0003 设备名 “接近标签”
0x0004 特性 外观
0x0005 外观 标签
0x0006 首要服务 GATT服务
0x0007 首要服务 发射功率服务
0x0008 特性 发射功率
0x0009 发射功率 -4dBm
0x000A
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值