从0到1认识ble

一 概要

GAP :广播

GAP(Generic Access Profile),主要作用:使设备可见,控制设备连接以及广播(相关应用:ibeacon)。

GATT:链接(GATT是基于GAP之上完成的 | 相关应用:消费电子类手环)

GATT(Generic Attribute Protocol)主要作用:定义s设备的service&characteristic 和 建立c/s 设备间的应用数据的交互。


二 GAP

ble stack的GAP层负责连接功能。处理access modes以及从上电到建立连接的一系列步骤:设备发现--->链路的建立--->链路的终止--->安全特性的初始化--->设备配置。(如下图)


(图片来自:TI官方网站)

上图中各状态的简单解释:

Standby:复位后设备所处的初始化空闲状态。

Advertiser:设备s将广播特定的数据,以通知任何初始化的设备c这里有一个可连接的设备s(广播消息包括设备地址以及一些附加信息,如设备名)。

Scanner: 当设备c收到广播消息,设备c将发送扫描请求给广播者(即设备s),随后广播者将会给予一个相应的扫描响应。该过程也叫设备发现。扫描设备主动发现广播设备并发起连接。

Initiator: 初始化时,发起者必须确定一个同等设备以待连接。如果接收到一个刚好匹配的同等设备的广播消息,发起者将会发送一个包含建立连接参数的连接请求消息以建立连接。

Slave/Master: 链接建立形成后,广播者将扮演slave角色,发起者将扮演master角色。


三 GATT

类同于GAP层处理连接相关的功能,ble的GATT层stack主要被用来完成两连接设备间数据通信的应用。以储存在ble设备内存中的characteristics形式访问与储存数据。站在GATT立场来说,连接的两个设备都可以同时扮演一种或两种角色(client/server).

The GATT server:

该设备包含一个可被client设备read/write的 characteristic database 。

The GATT client:

该设备可以read/write server设备端的数据。


下图简单说明了GATT client和server间的数据通信:



(图片来自:TI官方网站)

需要注意的是:

#GATT中的client&server角色是完全独立于GAP中的peripheral&central角色。也就是说一个peripheral既可以是GATT client,也可以是GATT server,一个central同样既可以是GATT client,也可以是GATT server。

#GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。

#一个外设只能连接一个中心设备,而一个中心设备可以连接多个外设。


GATT 事务

GATT 事务结构如图所示:



GATT 事务是建立在嵌套的Profiles, Services 和 Characteristics之上的。举一个简单的栗子将显得更加明了:

在GATT Profile 的列表中可以找到Heart Rate Profile

UUID : 0x180D

包含 3 个 Characteristic:

Heart Rate Measurement

Body Sensor Location(option) 和 Heart Rate Control Point(option)



                                                                                                       update-time:rainy | Sunday | 12:56 | 15/4/2018

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页