BLE Profile(GATT与GAP)

2024-09-04 07:58
文章标签 ble profile gap gatt

本文主要是介绍BLE Profile(GATT与GAP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 引言

现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上,GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。

二. GAP

详细介绍GATT之前,需要了解GAP(Generic Access Profile),它在用来控制设备连接和广播。GAP使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如,Beacon设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。

2.1 设备角色

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

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

2.2 广播数据

在GAP中外围设备通过两种方式向外广播数据:Advertising Data Payload(广播数据)和Scan Response Data Payload(扫描回复),每种数据最长可以包含 31 byte。这里广播数据是必需的,因为外设必需不停的向外广播,让中心设备知道它的存在。扫描回复是可选的,中心设备可以向外设请求扫描回复,这里包含一些设备额外的信息,例如设备的名字。

2.3 广播流程

GAP的广播工作流程如下图所示:

从图中我们可以清晰看出广播数据和扫描回复数据是怎么工作的。外围设备会设定一个广播间隔,每个广播间隔中,它会重新发送自己的广播数据。广播间隔越长,越省电,同时也不太容易扫描到。

2.4 广播的网络拓扑结构

大部分情况下,外设通过广播自己来让中心设备发现自己,并建立GATT连接,从而进行更多的数据交换。也有些情况是不需要连接的,只要外设广播自己的数据即可。用这种方式主要目的是让外围设备,把自己的信息发送给多个中心设备。因为基于GATT连接的方式的,只能是一个外设连接一个中心设备。使用广播这种方式最典型的应用就是苹果的iBeacon。

三. GATT

GATT的全名是Generic Attribute Profile(姑且翻译成:普通属性协议),它定义两个BLE设备通过叫做Service和Characteristic的东西进行通信。GATT就是使用了ATT(Attribute Protocol)协议,ATT协议把Service, Characteristic以及对应的数据保存在一个查找表中,次查找表使用16 bit ID作为每一项的索引。一旦两个设备建立起了连接,GATT就开始起作用了,这也意味着,你必需完成前面的GAP协议。这里需要说明的是,GATT连接必需先经过GAP协议。实际上,我们在Android开发中,可以直接使用设备的MAC地址发起连接,可以不经过扫描的步骤。这并不意味不需要经过GAP,实际上在芯片级别已经给你做好了,蓝牙芯片发起连接,总是先扫描设备,扫描到了才会发起连接。

GATT连接需要特别注意的是:GATT连接是独占的。也就是一个BLE外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。中心设备和外设需要双向通信的话,唯一的方式就是建立GATT连接。

3.1 GATT连接的网络拓扑

下图展示了GTT连接网络拓扑结构。这里很清楚的显示,一个外设只能连接一个中心设备,而一个中心设备可以连接多个外设。

 一旦建立了连接,通信就是双向的了,对比前面的GAP广播的网络塔扑,GAP通信是单向的。如果你要让两个外围设备能通信,就只能通过中心设备中转

3.2 GATT 通信事务

GATT通信的双方是C/S关系。外设作为GATT服务端(Server),它维持了ATT的查找表以及service和characteristic的定义。中心设备是GATT客户端(Client),他向Server发起请求。需要注意的是,所有的通信事件,都是由客户端(也叫主设备,Master)发起,并且接收服务端(也叫从设备,Slave)的响应。一旦连接建立,外设将会给中心设备建议一个连接间隔(Connection Interval),这样,中心设备就会在每个连接间隔尝试去重新连接,检查是否有新的数据。但是,这个连接间隔只是一个建议,你的中心设备可能并不会严格按照这个间隔来执行,例如你的中心设备正在忙于连接其他的外设,或者中心设备资源太忙。下图展示一个外设(GATT服务端)和中心设备(GATT客户端)之间的数据交流流程,可以看到的是,每次都是主设备发起请求:

3.3 GATT 结构

GATT事务是建立在嵌套的Profiles,Services和Characteristics之上的,如下图所示:

  • Profile:Profile并不是实际存在于BLE外设上的,它只是一个被Bluetooth SIG或者外设设计者预先定义的Service的集合。例如,心率Profile(Heart Rate Profile)就是结合了Heart Rate Service和Device Information Sercvice。所有官方通过的GATT Profile的列表可以从这里找到。
  • Service:Service是把数据分成一个个的独立逻辑项,它包含一个或者多个Characteristic。每个Service有一个UUID唯一标识,UUID有16bit或者128bit的。16bit的UUID是官方通过认证的,需要花钱购买,128bit是自定义的,这个就可以自己随便设置,官方通过了一些标准Service。以Heart Rate Service为例,可以看到它的官方通过16bitUUID是0x180D,包含3个Characteristic:Heart Rate Measurement,Body Sensor Location和Heart Control Point,并且定义了只有第一个必须的,其它是可选实现的。
  • Characteristic:在GATT事务中的最低级别的是Characteristic,Characteristic是最小的逻辑数据单元,当然它可能包含一个组关联的数据,例如加速度计的X/Y/Z三轴值。与Service类似,每个Characteristic用16bit或者128bit的UUID唯一标识。你可以免费使用Bluetooth SIG官方定义的标准Characteristic,使用官方定义的可以确保BLE的软件和硬件能相互理解。当然,你可以自定义Characteristic,这样的话就只有你自己的软件和外设能够相互理解。举个例子,Heart Rate Measurement Characteristic,这是上面提到的Heart Rate Service必需实现的Characteristic,它的UUID是0x2A37。它的数据结构是,开始8bit定义心率数据格式,接下来就是对应格式的实际心率数据。实际上,和BLE外设打交道,主要是通过Characteristic。你可以从Characteristic读取数据,也可以往Characteristic写数据,这样就实现了双向的通信。所以你可以自己实现一个类似串口(UART)的service,这个Service中包含两个Characteristic,一个被配置只读的通道(RX),另一个配置为只写的通道(TX)。

这篇关于BLE Profile(GATT与GAP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135444

相关文章

Anroid BLE蓝牙(手机分别作为中心设备和外围设备)

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。  BLE蓝牙模块主要应用领域     1、移动扩展设备     2、汽车电子设备     3、健康医疗用品:心跳带、血压计等     4、定位应用:室内定位、井下定位等     5、近距离数据采集:无线

BLE 数据传输的一些名词

 1、 Profile Profile 可以理解为一种规范,一个标准的通信协议,Profile 存在于从机中。蓝牙组织规定了一些列的标准 Profile, 例如 HID OVER GATT、 防丢器、 心率计等。 每个 Profile 中会包含多个 Service,每个 Service 代表从机的一种能力。 2、 Service Service 可以理解为一个服务,在 ble 从机中,通

两个 BLE实现数据传输

 通过TI BLE 1.3.2 协议栈安装后的主从通信实验,实现两个 BLE节点的通信,主机向 BLE 从机发送一个字节,然后再把写入的字节读回来,以测试主从之间的通信。 SimpleBLECentral 主机编程: 在 Bluetooth-LE 低功耗蓝牙中有四种设备类型:Central 主机、Peripheral 从机、Observer 观察者、Broadcaster 广播者。通

BLE协议栈安装和目录简介

首先在TI官网上下载BLE协议栈。  目前最新的协议栈版本已经升级到1.4.0, 并且此协议栈版本配套的 IAR 软件版本为 8.20.2。安装方法很简单,建议安装在C盘上,安装好后,你会在c盘上发现有Texas Instruments目录。 下面看看Texas Instruments下都有什么文件。 \Accessories\Drivers 里 面 存 放 的 是 烧 写 了

BLE协议栈简介

         协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;协议栈是协议的具体实现形式,通俗的理解就是用代码实现的函数库,以便于开发人 员调用。        BLE 协议栈将各个层定义的协议都集合在一起,以函数库的形式实现,并给用户提供 一些应用层 API,供用户调用。 使用 BLE 协议栈进行开发的基本思路可以概括为如下三点:        用户

TensorFlow程序分析(profile)实战

导入必要的包 import osimport tempfileimport tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data 建立模型 batch_size = 100# placeholderinputs = tf.placeholder(tf.float32, [batch_size

关于蓝牙BLE的GAP/GATT

概述 蓝牙低功耗(BLE)是无线技术的一项关键创新,提供了能效和简化的连接。BLE功能的核心是通用访问配置文件(GAP,Generic Access Profile)和通用属性配置文件(GATT,Generic Attribute Profile),这对参与BLE技术的任何人来说都是必不可少的。 BLE起源于蓝牙特别兴趣组(SIG,Bluetooth Special Interest Grou

浅析linux下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件

浅析linux下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件 /etc/profile:此文件为 系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.  并从/etc/profile.d目录的配置文件中搜集shell的设置.  /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bas

etc/profile和/etc/environment的比较

先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。 将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。 用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么

/etc/profile和 . profile 文件

两个重要的profile文件 在UNIX/Xenix系统中有两个对用户而言必不可少的文件——etc目录下的profile文件和 用户主目录($HOME)下的.profile文件。前者是系统文件,对系统下全体用户起作用,后者是 用户自己的"私人"文件。 这两个文件的功能类似于DOS系统下的Autoexec.bat文件,不同之处在于Autoexec.bat文 件可以为空,而这两个