Android-BLE蓝牙原理
Posted 懒惰的星期六
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-BLE蓝牙原理相关的知识,希望对你有一定的参考价值。
https://www.jianshu.com/p/f98e77c9ec65
蓝牙4.1BLE协议栈的结构图如下:
-
PHY(Physical Layer):物理层,蓝牙是工作在2.4GHz附近,这是工业、科学、医疗ISM的频段,免许可证。WIFI也是工作在同一个频段。蓝牙把频段切分为40个通道,3个广播通道,37个数据通道,按照一个规律跳频通信。
-
LL(Linker Layer):链路层,用于控制设备的射频状态,设备将处于五种状态之一:等待、广告、扫描、初始化、连接。广播设备不需要建立连接就可以发送数据,而扫描设备接收广播设备发送的数据;发起连接的设备通过发送连接请求来回应广播设备,如果广播设备接受连接请求,那么广播设备与发起连接的设备将会进入连接状态。发起连接的设备称为主机,接受连接请求的设备称为从机。
-
HCI(Host Controller Interface):主机和控制器就是通过这个接口来进行同学的,通信的介质就是HCI命令。这层在协议栈中是可选的,一些小型终端可能没有,但是android设备上肯定有,这层是蓝牙上层和芯片的交互必经之路,对于蓝牙硬件开发者,这里的log能够很好的帮助解决问题。
-
HOST部分要复杂一些,有链路控制和适配层(L2CAP),安全管理(SM)等。其中L2CAP和SM我们知道概念就可以了,这里就不多关注了。我们重点来看属性协议层,也就是ATT。它是整个BLE通信的基础。ATT负责数据封装,向外暴露为"属性",提供"属性"的为服务端,获取"属性"的为客户端。ATT是专门为BLE低功耗蓝牙而设计的传输协议,结构简单,传输数据短(后面会有提及)。
-
GATT(Generic Attribute Profile):全称叫做通用属性配置文件,是基于ATT做进一步的逻辑封装,定义数据的交互方式和含义,APP的开发其实就已经接触到这一层了。GATT按照层级定义了三个非常重要的概念:服务(Service)、特征(Characteristic)、描述(Descripter)。他们之间的关系如下:
-
一个Service可以包含若干个Characteristic,一个Characteristic可以包含属性(properties)和值(value),还可以包含多个descripter。Characteristic实际上具有读、写、通知等权限,我们在对一个BLE设备发起连接成功以后,对他进行读写,其实就是对Characteristic的读写或者订阅通知。图中所谓的Profile,实际上是一组服务的集合,这些服务被人组合起来就形成了一个特定的使用场景。比如说,小米手环,里面就有一个计算用户当前步数的服务。这就是这个Ble可以做的事情,也就是它的profile。
-
第5个我们又提到一个BLE设备实际上就是一组Service的集合,那BLE蓝牙以什么来标识多个Service呢。答案就是UUID。BLE中的Service,Characteristic,Descripter都是使用UUID来作为唯一标识。所以我们在读写BLE蓝牙数据时,都要带上相应的UUID。
-
GAP(Generic Access Profile):通用访问控制配置文件。定义了BLE整个通信过程中的流程,负责处理设备访问模式和程序,包括设备发现,建立连接,终止连接,初始化安全特性,设备配置。GAP层总是作为下面四种角色之一:(1)广播者:不可连接的广播设备。(2)观察者:扫描设备,但不发起建立连接。(3)外部设备:可连接的广播设备,可以在单个链路层连接中作为从机。(4)集中器:扫描广播设备并发起连接,可以在单个链路层连接中作为主机。
以上是关于Android-BLE蓝牙原理的主要内容,如果未能解决你的问题,请参考以下文章
Android-Ble蓝牙通讯开发–扫描,连接,发送和接收数据,分包解包(附源码)