蓝牙4.0协议详解

RF/无线

1773人已加入

描述

蓝牙v4.0与以前的版本有根本区别,因为它以两个协议为基础,而非一个协议。 这带来了一些需要蓝牙Smart品牌解决的问题”Svein-Egil Nielsen解释说。

虽然蓝牙技术联盟(SIG)在很多事情上都备受指责,但是在消费者中成功树立蓝牙品牌却无可非议。早在2008年进行的一项独立调查发现,85%的消费者“认识了无线技术”, 今天这个数字很可能会更高。

随着蓝牙v4.0的推出,技术联盟面临着一个新的挑战,就是准确解释这项技术是什么。 跟以往版本不一样,蓝牙v4.0架构采用了两类不同的无线电技术和协议。一种类型可以与以往版本通信,而另一种则不可以。

从用户所关注的互操性到工程人员所需,技术联盟的答案是,新品牌可帮助消费者在市场上找到所需产品。蓝牙Smart和蓝牙Smart Ready品牌背后所采用的蓝牙v4.0技术正在被广泛应用。

蓝牙4.0BLE介绍

蓝牙4.0支持的角色有:

广播者(BroadCaster)——广告发送者,不是可连接的设备

观察者(Observer)——扫描广告,不能够启动连接

外围设备(Peripheral)——广告发送者,是可连接的设备,在单一链路层连接时作为一个从机

中央设备(Center)——扫描广告启动连接,在单一或者多链路层连接时作为主机,支持三个同时连接

广播者跟观察者配对使用不能建立连接。应用:温度传感器跟温度显示器。

中央设备跟外围设备可以进行连接、配对、数据通信。应用:手表跟手机。

BLE连接的过程:

1、外围设备发送具体的广告数据让任何中央设备知道他是一个可连接的设备,广告内容包含设备地址,还可以包含一些额外的额数据,比如设备名称、服务ID等。

2、中央设备(Center)接收到广告后发送一个搜索请求给外围设备(Peripheral),外围设备(Peripheral)返回扫描响应给中央设备(Center)。这样中央设备就知道这是一个可连接的设备。

3、中央设备可以发送一个建立连接的请求给外围设备。进行配对连接,必要时进行绑定操作(连接可以被从机或者主机任一方终止)。

配对(Pairing):建立连接,配对完成后可以进行数据通信。

绑定(Banding): 将配对信息记录下来,如设备地址,这样下次连接时就不需要再次配对的过程(快速连接)。

蓝牙低功耗:

低耗能蓝牙技只用 3 个 信道做广播信道,允许毫秒级快速建立连接,效率远高于传统蓝牙的 32 个信道方式。

少的数据频道和宽频道间隔:传统蓝牙有 79 个数据信道,频道间隔 是 1MHz;低耗能蓝牙有 40 个数据信道,频 道间隔是 2MHz。

传统蓝牙的工作峰值电流一般是 35mA,睡眠状态电流是 0.01mA。

而低耗能蓝牙的工作峰值电流是小于 15mA,睡眠状态电流是 0.004mA

还可以软件设置以下三个参数来降低功耗。

连接间隔:当设备建立连接时,即使没有数据的收发,两设备仍然会通过交换链路层数据来维持连接,连接间隔就是两个连接事件之间的时间间隔。设置范围(7.5ms - 4s)。

从机延迟: 从机可以跳过若干连接事件继续休眠节省功耗。

管理超时:两个成功连接事件之间最大的允许间隔。如果超出这个时间就认为设备断开连接。设置范围(100ms--32s)

蓝牙4.0BLE协议与协议栈的关系

协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发。

协议栈是协议的具体实现形式,通俗的理解为用代码实现的函数库,以便于开发人员调用。

蓝牙4.0BLE协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并提供一些应用层API,供用户调用。

注意:虽然协议是统一的,但是协议的具体实现形式是变化的,即不同厂商提供的协议栈是有区别的,例如:函数名称和参数列表可能有区别,选择协议栈以后,需要学习具体的例子,查看厂商提供的Demo演示程序、说明文档(通常,实现协议栈的厂商会提供一些API手册供用户查询)来学习各个函数的使用方式,进而快速地使用协议栈进行应用程序的开发工作。

如何使用蓝牙4.0BLE协议栈

既然蓝牙4.0BLE协议栈已经实现了蓝牙4.0BLE协议,那么用户就可以使用协议栈提供的API进行应用程序的开发,在开发过程中不必过多的关注蓝牙4.0BLE协议的具体实现细节,只需要关注一个核心的问题:应用程序数据从哪里来到哪里去。

至于调用协议栈中函数后,如何初始化应用进行数据发送等工作,蓝牙4.0BLE协议栈已经完成了所需要的初始化。

如果开发过程中确实需要或者是想要了解蓝牙4.0BLE协议,可以查看SIG提供的标准协议规范。

深入理解蓝牙4.0BLE协议栈

协议栈概述

我们以TI的CC254X系列BLE芯片为例来深入了解下蓝牙4.0BLE协议栈。TI的蓝牙4.0BLE协议栈包含两部分:主机和控制器。主机和控制器的分离要追溯到蓝牙BR/EDR设备时期,控制器和主机通常会分开实现。

协议栈的实现方式采用分层的思想,控制器部分包括:物理层、链路层、主机控制接口层;主机部分包括:逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层、通用属性配置文件层;上层可以调用下层提供的函数来实现需要的功能。

协议栈基础

蓝牙4.0BLE协议栈的结构图如下:

蓝牙4.0

详细介绍如下:

1.物理层(Physical Layer,简写 PHY):

是1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学与医疗)频段。

2.链路层(Link Layer,简写 LL):

用于控制设备的射频状态,设备将处于五种状态之一:等待、广告、扫描、初始化、连接。广播设备不需要建立连接就可以发送数据,而扫描设备接收广播设备发送的数据;发起连接的设备通过发送连接请求来回应广播设备,如果广播设备接受连接请求,那么广播设备与发起连接的设备将会进入连接状态。发起连接的设备称为主机,接受连接请求的设备称为从机。

3.主机控制接口层(Host Controller Interface,简写 HCI):

为主机和控制器之间提供标准通信接口。这一层可以是软件或者硬件接口,如UART、SPI、USB等。

4.逻辑链路控制及自适应协议层(Logical Link Control and Adaptation Protocol,简写 L2CAP):

为上层提供数据封装服务,允许逻辑上的点对点数据通信。

5.安全管理层(Security Manager,简写 SM):

定义了配对和秘钥分配方式,并为协议栈其他层与另一个设备之间的安全连接和数据交换提供服务。

6.属性协议层(Attribute protocol,简写 ATT):

允许设备向另外一个设备展示一块特定的数据,称之为“属性”。在ATT环境中,展示“属性”的设备称为服务器,与之配对的设备称为客户端。链路层状态(主机和从机)与设备的ATT角色是相互独立的。例如:主机设备既可以是ATT服务器,也可以是ATT客户端;从机设备既可以是ATT服务器,也可以是ATT客户端。

7.通用属性配置文件层(Generic Attribute profile,简写 GATT):

定义了使用ATT的服务框架。GATT规定配置文件(profile)的结构。在BLE中,所有被profile或者服务用到的数据块称为“特性”,两个建立连接的设备之间的所有数据通信都是通过GATT子程序处理。GATT层用于已连接的蓝牙设备之间的数据通信,应用程序和profile直接使用GATT层。

当两个设备建立连接之后,它们就处于下面两种角色之一:

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

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

注意:GATT角色中的客户端和服务器的概念与链路层的主机和从机的概念完全独立,与GAP层角色中的外设和集中器的概念也是完全独立。 主机既可以是GATT客户端也可以是GATT服务器;从机既可以是GATT客户端也可以是GATT服务器。

一个GATT服务器中可包含一个或多个GATT服务,GATT服务是完成特定功能的一系列数据的集合。每一个应用工程大致包含下列三种服务:

(1)强制的GAP服务。这一服务包含了设备和访问信息。例如,设备、设备供应商和产品标示。它是协议栈的一部分,是BLE规范对每一个BLE设备的强制要求。这部分没有提供源代码,而是直接编译到协议栈库文件中了。

(2)强制的GATT服务。这一服务包含了GATT服务器的信息,是协议栈的一部分,同样也是BLE规范对每一个BLE设备的要求。这部分同样没有提供源代码而是直接编译到协议栈库文件中了。

(3)自定义服务。这部分服务包含应用数据的信息,与应用数据的传递密切相关,我们可以按照特定的格式编写自己的GATT服务。

“特性”(Characteristic)是服务用到的值,以及其内容和配置信息。GATT定义了在BLE连接中发现、读取和写入属性的子过程。GATT服务器上的特性值及其内容和配置信息(称为描述符)存储于属性表中。属性表是一个数据库,包含了成为属性的小块数据,除了值本身,每个属性都包含下列属性:

(1)句柄:属性在表中的地址,每个属性有唯一的句柄。

(2)类型:表示数据代表的事物,通常是蓝牙技术联盟规定或用户自定义的UUID(Universally Unique Identifier)。

(3)权限:规定了GATT客户端设备对属性的访问权限,包括是否能访问和怎样访问。

GATT定义了若干在GATT服务器和客户端之间的通信的子过程:

(1)读特性值:客户端设备请求读取句柄处的特性值,服务器将此值回应给客户端(假定属性有读权限)。

(2)使用特性的UUID读:客户端请求读基于一个特定类型的所有特性值,服务器将所有与指定类型匹配的特性的句柄和值回应给客户端设备(假设属性有读权限)。

(3)读多个特性值:客户端一次请求中读取几个句柄的特性值,服务器将这些特性值回应给客户端(假设属性有读权限),客户端需要知道如何解析这些不同的特性值数据。

(4)读特性描述符:客户端请求读特定句柄处的特性描述符,服务器将特性描述符的值回应给客户端设备(假设属性有读权限)。

(5)使用UUID发现特性:客户端通过发送“特性”的类型(UUID)来请求发现这个“特性”的句柄。服务器将这个”特性”的声明回应给客户端设备,其中包括特性值的句柄以及“特性”的权限。

(6)写特性值:客户端设备请求向服务器特定的句柄处写入特性值,服务器将数据是否写入成功的信息反馈给客户端(假设特性有写权限,另外有一种特殊的写类型是不需要服务器来反馈是否写入成功的信息的,使用的时候根据具体应用来具体分析使用)。

(7)写特性描述符:客户端设备请求向服务器特定的句柄处写入特性描述符,服务器将特性描述符是否写入成功的信息反馈给客户端(假设特性描述有写权限)。

(8)特性值通知:服务器将一个特性值通知给客户端,客户端设备不需要向服务器请求这个数据,客户端收到这个数据时,不需要属性协议层确认特性值是否被成功接收。

(9)特性值指示:服务器将一个特性值指示给客户端,客户端设备同样不需要向服务器请求这个数据,但是跟通知不一样的是,客户端收到这个数据之后,属性协议层必须确认特性值被成功接收。

通知与指示功能的流程如下:

蓝牙4.0

何时发送通知或指示的条件可以在配置文件中设置,也可以通过应用来设置。要想使能通知和指示功能,需要分别在相应的句柄特性描述符写入“0x0001”和“0x0002”,如下表所示:

蓝牙4.0

每个Profile初始化其相应的服务并内在的通过设备的GATT服务器来注册服务。GATT服务器将整个服务加到属性表中,并为每个属性分配唯一句柄。GATT属性表中有一些特殊的属性类型,其值由蓝牙技术联盟定义:

(1)GATT_PRIMARY_SERVICE_UUID:表示新服务的起始和提供的服务类型。

(2)GATT_CHARACTER_UUID:称为“特性声明”,紧随其后的是GATT特性值。

(3)GATT_CLIENT_CHAR_CFG_UUID:这一属性代表特性描述符,它与属性表中它前面最近的句柄处的特性值相关,它允许GATT客户端设备使能特性值通知或者指示。

(4)GATT_CHAR_USER_DESC_UUID:这一属性代表描述符,它与属性表中它前面最近的句柄处的特性值相关,包含一个ASCII字符串,是对相关特性的描述。

8.通用访问配置文件层(Generic Access Profile,简写 GAP):

负责处理设备访问模式和程序,包括设备发现、建立连接、终止连接、初始化安全特性和设备配置。

GAP层总是作为下面四种角色之一:

(1)广播者:不可连接的广播设备。

(2)观察者:扫描设备,但不发起建立连接。

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

(4)集中器:扫描广播设备并发起连接,可以在单个链路层连接中作为主机。

外部设备广播特定的数据使集中器知道它是一个可以连接的设备。广播内容包括设备地址以及一些额外的数据,如设备名等,当然也可以是自定义的数据,只要满足广播数据中广告的格式即可。集中器收到广播数据后向外部设备发送扫描请求,然后外部设备将特定的数据回应给集中器,称为扫描回应。集中器收到扫描回应后便知道这是一个可以建立连接的外部设备。这就是设备发现的全过程。此时集中器可以向外部设备发起建立连接的请求。连接请求包括一些链接参数。

GAP层也处理BLE连接中安全特征的初始化。只有在已认证的连接中特定的数据才能被读写,一旦连接建立,两个设备进行配对,当配对完成后,形成加密链接的密钥。典型应用中外设请求集中器提供密钥来完成配对工作,密钥可以是一个固定的值,如000000,也可以随机生成一个数据提供给使用者,集中器设备发送正确的密钥后,两设备交换安全密钥并加密认证链接。

在许多情况下,同一对外设和集中器会不定时地连接和断开,BLE的安全机制中有一项特性允许两个设备之间建立长期的安全密钥信息,这种特性称为绑定,它允许两设备重新连接时快速地完成加密认证,而不需要每次连接时执行配对的完整过程。

蓝牙4.0BLE协议栈分层思想的优点

蓝牙4.0BLE协议栈采用分层思路的最大优点是:将服务、接口和协议这三个概念明确的区分开来。服务说明某一层为上一层提供了一些什么样的功能;接口说明上一层如何使用下一层的服务;而协议涉及到如何实现本层的服务。这样,各层之间就具有很强的独立性,当协议的一部分发送变化时,只需对与此相关的分层进行修改即可,其他分层不需要改变。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分