侧边栏壁纸
博主头像
李振洋的博客博主等级

歌颂动荡的青春

  • 累计撰写 38 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

低功耗蓝牙协议栈

低功耗蓝牙协议栈

蓝牙技术的无线电工作频率范围为 2.4 GHz。目前使用的 2 个蓝牙标准是:

  • Bluetooth Classic,支持两种不同的数据速率,基本速率 (BR) 和增强数据速率 (EDR)。

  • Bluetooth Low Energy (LE),针对低功耗进行了优化,主要用于受电池续航时间限制的应用。Bluetooth LE 不常用于交换大量数据,但与 Bluetooth Classic 相比,可以提供支持实现更高的音频质量和更多样化的音频选项。

Bluetooth LE规格

Bluetooth LE的体系结构、过程和协议全部由蓝牙核心规范的关键规范定义。

specifications.png

Bluetooth Core Specification:定义了技术及其层的体系结构,描述和定义技术的关键特性以及设备在堆栈的给定层上可以通信的协议。

Profile Specifications:当两个蓝牙LE设备通过连接进行通信时,通常会形成客户机/服务器关系。服务器包含状态数据,客户端以某种方式使用这些数据。配置文件规范定义了相关设备所承担的角色,特别是定义了客户端设备的行为以及它应该使用的连接服务器上的数据。

Service Specifications:服务规范定义了单个服务及其包含的特征和描述符。提供服务的设备为响应各种条件和状态数据值而显示的行为在服务规范中定义。

Bluetooth LE 协议栈

stack.png协议栈由 Host(主机协议层)和 Controller(控制协议层)组成,且这两部分一般是分开执行。配置和应用程序是在协议栈的通用访问配置文件(GAP)和通用属性配置文件(GATT)层中实现的。

PHY

物理层(PHY)是 BLE 协议栈最底层,它规定了 BLE 通信的基础射频参数,包括信号频率、调制方案等。

BLE 5.0 的物理层有三种实现方案,分别是 1Mbps 的无编码物理层、2Mbps 的无编码物理层和 1Mbps 的编码物理层。其中 1Mbps 的无编码物理层与 BLE 4.0 系列协议的物理层兼容,另外两种物理层则分别扩展了通信速率和通信距离。

LinkLayer

链路层(LinkLayer)控制设备处于准备(standby)、广播(advertising)、监听/扫描(scanning)、发起(initiating)、连接(connected)这五种状态中一种。围绕这几种状态,BLE 设备可以执行广播和连接等操作,链路层定义了在各种状态下的数据包格式、时序规范和接口协议。

Generic Access Profile

通用访问协议(Generic Access Profile)是BLE 设备内部功能对外接口层。它规定了三个方面:GAP 角色、模式和规程、安全问题。主要管理蓝牙设备的广播,连接和设备绑定。

GAP 角色
  • 广播者:不可以连接的一直在广播的设备

  • 观察者:可以扫描广播设备,但不能发起建立连接的设备

  • 从机:可以被连接的广播设备,可以在单个链路层连接中作为从机。外围设备(Peripheral)

  • 主机:可以扫描广播设备并发起连接,在单个链路层或多链路层中作为主机。中心设备(Central)

广播数据

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

广播流程

Advertising.png

外围设备会设定一个广播间隔,每个广播间隔中,会重新发送自己的广播数据。广播间隔越长,越省电,同时也不太容易被扫描到。

设备状态

GAP_ROLE_state.png

  • Standby:低功耗蓝牙协议栈未启用的空闲状态;

  • Advertiser:设备使用特定的数据进行广播,广播中可包含设备的名称、地址等数据。广播可表明此设备可被连接。

  • Scanner:当接收到广播数据后,扫描设备发送扫描请求包给广播者,广播者会返回扫描相应包。扫描者会读取广播者的信息并且判断其是否可以连接。此过程描述了发现设备的过程。

  • Initiator:建立连接时,连接发起者必须指定用于连接的设备地址,如果地址匹配,则会与广播者建立连接。连接发起者在建立连接时将初始化连接参数。

  • Master or Slave:如果设备在连接前是广播者,则其在连接时是从机;如果设备在连接前是发起者,则其在连接后为主机。

逻辑链路控制协议(Logical Link Control and Adaptation Protocol)是主机与控制器直接的适配器,提供数据封装服务。它向上连接应用层,向下连接控制器层,使上层应用操作无需关心控制器的数据细节。

Security Manager

安全管理协议(Security Manager)提供配对和密匙分发服务,实现安全连接和数据交换。

Attribute Protocol

属性传输协议(Attribute Protocol)定义了属性实体的概念,包括UUID、句柄和属性值,规定了属性的读、写、通知等操作方法和细节。

Generic Attribute Profile

通用属性规范(Generic Attribute Profile)定义了使用ATT的服务框架和协议的结构,两个设备应用数据的通信是通过协议栈的GATT层实现。ATT 协议把 Service, Characteristic对应的数据保存在一个查找表中,次查找表使用 16 bit ID 作为每一项的索引。

  • GATT 服务器:为GATT 客户端提供数据服务的设备

  • GATT 客户端:从GATT 服务器读写应用数据的设备

一旦两个设备建立起了连接,GATT 就开始起作用了,这也意味着,必需完成前面的 GAP 协议。需要说明的是GATT 连接,必需先经过 GAP 协议。

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

GATT 通信事务

GATT通信的双方是C/S关系。外设作为GATT服务端(Server),维持了ATT的查找表以及service和characteristic的定义。中心设备是GATT客户端(Client),他向Server发起请求。所有的通信事件,都是由客户端(也叫主设备,Master)发起,并且接收服务端(也叫从设备,Slava)的响应。

一旦连接建立,外设将会给中心设备建议一个连接间隔(Connection Interval),这样,中心设备就会在每个连接间隔尝试去重新连接,检查是否有新的数据。但是,这个连接间隔只是一个建议,中心设备可能并不会严格按照这个间隔来执行,例如中心设备正在忙于连接其他的外设,或者中心设备资源太忙。

GATT.png

GATT 结构

GATT事务是建立在嵌套的Profiles,Services和Characteristics之上

GATT_Server.png

  • Profile:被Bluetooth SIG或者外设设计者预先定义的Service的集合。例如心率Profile(Heart Rate Profile)就是结合了Heart Rate Service和Device Information Sercvice。所有官方通过GATT Profile的列表可以从这里找到。

  • Service:把数据分成一个个的独立逻辑项,它包含一个或者多个Characteristic。每个Service有一个UUID唯一标识。UUID有16bit的,或者128bit的。16bit的UUID是官方通过认证的,需要花钱购买,128bit是自定义的,可以用户自定义。

  • Characteristic:Characteristic是最小的逻辑数据单元,当然它可能包含一个组关联的数据,例如加速度计的X/Y/Z三轴值。与Service类似,每个Characteristic用16bit或者128bit的UUID唯一标识。可以免费使用Bluetooth SIG官方定义的标准Characteristic,也可以用户自定义。

参考

蓝牙核心协议文档 Specifications | Bluetooth® Technology Website

蓝牙低功耗入门 The Bluetooth® Low Energy Primer | Bluetooth® Technology Website

GATT Specification Supplement | Bluetooth® Technology Website

Device Properties | Bluetooth® Technology Website

0

评论区