大家好,欢迎来到IT知识分享网。
1. 概述
1.1 蓝牙是什么
- 一种短距离无线通信技术
- 爱立信公司创建,如今由蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG)管理。
- 现在用的都是低功耗蓝牙 Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)
- 在 5.0 以后才支持外设模式,
1.2 蓝牙的优点
- 低功率 便于电池供电设备工作
- 使用方便,点对点连接
- 短距离,低成本,以及高速
- 在智能设备的普及性高,应用广。
1.3 蓝牙通信流程
- 注册适配器打开蓝牙
- 注册广播监听蓝牙状态
- 搜索附近设备和已配对设备
- 选择未配对设备进行配对
- 选择已配对设备进行连接通信
1.4 蓝牙发展历史
1.5 蓝牙模块分类
- 蓝牙技术分为经典蓝牙(BT)和低耗能(LE)两种技术类型。
其中经典蓝牙(BT)包括基础速率/增强数据率(BR/EDR),BR/EDR型是以点对点网络拓扑结构创建一对一设备通信;LE型则使用点对点(一对一)、广播(一对多)和网格(多对多)等多种网络拓扑结构 - 蓝牙芯片的三种功能配置:
- 蓝牙的详细分类:
1.6 蓝牙协议栈
蓝牙协议栈由主机 + HCI(可选) + 控制器三大块组成,其中对于单芯片方案是没用HCI的。
- 主机(Host) :主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成;
- HCI:此部分定义了主机和控制器之间通信的接口标准(Vol 4: Host Controller Interface)
- 控制器(Controller):此部分拆分为低功耗蓝牙(Vol 6: Low Energy Controller)(Vol 2: BR/EDR Controller)
GAP规范(通用接入规范)
ATT(属性协议)
定义了访问对端设备上数据的一组规则,是GATT规范的基础,也是低功耗蓝牙的基石。定义了Host端属性报文格式和报文类型。
- Requests:请求报文,客户端发给服务端,且需要服务端的一个应答Responses;(C->S,带ACK的请求报文)
- Responses :响应报文,和Requests成对出现,服务端对客户端Requests的Responses;
- Commands :命令报文,客户端发给服务端,不需要应答;
- Notifications :通知报文,服务端主动发给客户端的通知;
- Indications :通知报文,相比Notifications,客户端要应答确认Confirmations ,是否收到通知了;
- Confirmations :和Indications 成对出现;
GATT(通用属性规范)
位于ATT之上,定义了属性的类型及其使用方法。 GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题。
L2CAP层(链路控制和适配协议)
SMP(安全管理协议)
定义了蓝牙设备配对、认证、解密等行为的安全操作。
LLCP/LL (链路层控制)
低功耗蓝牙参考 《Core_v4.2.pdf》中Part B: Link Layer Specification章节部分。
PHY(物理层)
1.7 相关专业词汇
- profile
profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。 - service
service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据 - characteristic
characteristic特征值,ble主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。 - UUID
UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识
注:每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。
2.规范
2.1 通用接入规范 GAP(Generic Access Profile)
GAP(Generic Access Profile)是用来控制设备连接和广播。GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如 Beacon 设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。
- 设备角色
GAP 给设备定义了若干角色,其中主要的两个是:外围设备(Peripheral)和中心设备(Central)。
外围设备:这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如小米手环。
中心设备:中心设备相对比较强大,用来连接其他外围设备。例如手机等。 - 广播数据
在 GAP 中外围设备通过两种方式向外广播数据: Advertising Data Payload(广播数据)和 Scan Response Data Payload(扫描回复),每种数据最长可以包含 31 byte。这里广播数据是必需的,因为外设必需不停的向外广播,让中心设备知道它的存在。扫描回复是可选的,中心设备可以向外设请求扫描回复,这里包含一些设备额外的信息,例如设备的名字。(广播的数据格式我将另外专门写一个篇博客来讲。) - 广播流程
GAP 的广播工作流程如下图所示。
从图中我们可以清晰看出广播数据和扫描回复数据是怎么工作的。外围设备会设定一个广播间隔,每个广播间隔中,它会重新发送自己的广播数据。广播间隔越长,越省电,同时也不太容易扫描到。
- 广播的网络拓扑结构
大部分情况下,外设通过广播自己来让中心设备发现自己,并建立 GATT 连接,从而进行更多的数据交换。也有些情况是不需要连接的,只要外设广播自己的数据即可。用这种方式主要目的是让外围设备,把自己的信息发送给多个中心设备。因为基于 GATT 连接的方式的,只能是一个外设连接一个中心设备。使用广播这种方式最典型的应用就是苹果的 iBeacon。广播工作模式下的网络拓扑图如下:
2.2 通用属性规范 GATT (Generic Attribute Profile)
现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。 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 连接。
GATT 连接的网络拓扑
GATT 通信事务
GATT 结构
- ProfileProfile 并不是实际存在于 BLE 外设上的,它只是一个被 Bluetooth SIG 或者外设设计者预先定义的 Service 的集合。例如心率Profile(Heart Rate Profile)就是结合了 Heart Rate Service 和 Device Information Service。所有官方通过 GATT Profile 的列表可以从这里找到。 - ServiceService 是把数据分成一个个的独立逻辑项,它包含一个或者多个 Characteristic。每个 Service 有一个 UUID 唯一标识。 UUID 有 16 bit 的,或者 128 bit 的。16 bit 的 UUID 是官方通过认证的,需要花钱购买,128 bit 是自定义的,这个就可以自己随便设置。
2.3 GAP和GATT的区别与联系
GAP 和 GATT 有什么不同呢?
- GAP :定义一个 BLE 网络栈的通用拓扑结构。
- GATT:描述关于如何数据在连接中如何传输的细节。GATT 尤其关注于数据如何被格式化、打包、然后跟据分发规则去在网络中发送。属性协议(ATT)与GATT紧密相连,那么GATT 处于 ATT 的上层,使用 ATT 去描述数据如何在两个连接的设备中交换。
GAP (Generic Access Profile)
GATT(Generic Attribute Profile)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128639.html