# GATT profile简述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/madannasf/article/details/102571350

一、引言

GATT Profile(General attribute profile)主要用于现在的低功耗蓝牙,主要用于传输数据量小的环境中,比如蓝牙交友,手机丢失器等小型数据场景。
讲解gatt之前我们也需要讲解一下gap与att与gatt之间的关系,att是bt中的最小数据单元,而gap是gatt执行的前提,只有gatt连接上设备之后,gatt的相关server服务才有被执行,而gatt是将一个或者众多的att聚合在一起组成的service。

二、GAP

在蓝牙的协议层中,gap是贯穿整个host层的存在,主要提供蓝牙设备的连接,广播等。
如下图所示为整个bluedroid的框架协议图、

在这里插入图片描述

2.1 设备角色

GAP 给设备定义了若干角色,其中主要的两个是:外围设备(Peripheral)和中心设备(Central)。

**外围设备:**这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如小米手环。
**中心设备:**中心设备相对比较强大,用来连接其他外围设备。例如手机等。

2.2. 广播数据

在 GAP 中外围设备通过两种方式向外广播数据:

广播数据 被动扫描
数据长度最大31byte 数据长度最大31byte
设备初始化必选 用户功能自选

三、ATT属性协议

ble中的数据都是也属性的方式存在,每条属性由四个元素构成
1、属性句柄(handler),句柄的取值范围为0x0001 ~ 0xffff,它主要标识该属性在att的database中的位置,我们可以通过handler来获取到响应的att参数。
2、属性类型(UUID),没一个数据都有自己的一个代表,这个代表叫做UUID,比如温度,发射功率,电池等,蓝牙的协议官方对一些常用的数据类型进行了强制性归类,比如0x2a09表示电池的信息,0x2a6e表示温度信息,uuid可以是16bit,也可以为128bit,在低功耗蓝牙,主要是16bit。
3、属性值、属性值表示属性类型承载的有效信息。
4、属性许可,每个属性都有各自的访问权限,比如可读,科协,即可读又可写等。

四、GATT

gatt主要是提供信息的具体实现,它定义两个 BLE 设备通过叫做 Service 和 Characteristic 的东西进行通信。GATT 就是使用了 ATT(Attribute Protocol)协议,ATT 协议把 Service, Characteristic对应的数据保存在一个查找表(database)中,查找表使用 16 bit ID 作为每一项的索引。当

比喻:医院的血液检测科的人只能检测出血液中各种成分的含量,但是他们并不知道这些含量的多少所表达出的 病人的身体状况,所以就需要“主治医师”(GATT)华丽登场。
注意:gatt是具有独占性质的,当ble外设被host连接之后,gatt的广播将会被停止,知道ble外设断开之后才会继续发起广播。

4.1 cs通讯架构

gatt是使用att来作为bt设备与主机之间通讯的基础,使用cs架构方式,bt设备维护则att创建的查找表以及server和character,所以在cs中bt设置作为server端,主机设备作为client端,所有的请求,和通讯时间等都是由client端发起。

总结:一、gatt的运行必须在gap以及连接上具体的bt设备之后
二、gatt的基础为att
三、主机端作为整个流程的client,bt设备端作为server,bt设备端负责维护att创建的查找表以及与client通讯的server。

猜你喜欢

转载自blog.csdn.net/madannasf/article/details/102571350