蓝牙基础知识整理
阅读原文时间:2021年04月25日阅读:2

1、背景

上一次蓝牙过的比较匆忙,这次下定决心要把蓝牙的基础知识和应用搞清楚。

1.1 参考资料

蓝牙版本发展概述 http://blog.sina.com.cn/s/blog_d2db96110102xnj6.html

深入浅出低功耗蓝牙(BLE)协议栈 https://blog.csdn.net/shunfa888/article/details/80140475

BLE 协议系列之(一) 蓝牙介绍 https://blog.csdn.net/zwc1725/article/details/80703326

2、蓝牙基础知识

蓝牙协议也是通信协议的一种,目的就是把复杂的问题简单化,任何通信协议都具有层次性,特点如下:

1、从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护

2、在通信实体内部,下层向上层提供服务,上层是下层的用户。

3、在通信实体之间,协议仅针对每一层。实体间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。

当前的蓝牙协议包括BR/EDR(Basic Rate/Enhanced Data Rate)、AMP(Alternate MAC/PHYs)、LE(Low Energy)三种技术。

2.1当前蓝牙技术特点---蓝牙协议版本看

蓝牙历史我不追究,就从V4.0版本蓝牙开始。蓝牙4.0版本包括3个子规范,即传统蓝牙技术、高速蓝牙和低功耗蓝牙技术。

目前移动设备上适用的蓝牙大多是V4.0以上,经典V4.0是传统的3.0蓝牙升级而成,向下兼容。而BLE4.0 是新的分支,不向下兼容。经典蓝牙模块,一般用于数量比较大的传输:如语音、音乐等较高数据量传输。经典蓝牙模块可细分为传统蓝牙模块和高速蓝牙模块。低功耗蓝牙模块是指支持蓝牙协议4.0或更高的模块,特点是成本和功耗的降低,应用于实时性要求比较高的产品中。

蓝牙4.0有诸如低成本、跨厂商互操作性、3毫秒低延时、100米以上超长距离、AES-128加密等特点外,有效传输距离有所提升。

蓝牙4.0 主打的是省电,蓝牙V4.1主打的是IOT(物联网)。

蓝牙V4.1 以“internet of things”为目标对V4.0进行软件升级,在连接性进行提升(在硬件层面V4.0无需任何改动即可使用V4.1)。

表现在:1、V4.1标准下蓝牙设备可以同时作为发射方(bt smart,v4.0上贴着的)和接收方(bt smart Ready),并且可以连接到多个设备上。 (主从一体,如智能手环作为主 和防丢器连接,同时也可以作为从 和智能手机相连)

2、长期睡眠下的自动唤醒功能(离开则断开,回来则直接连上); 3、通过IPV6建立网络连接???? -----即蓝牙芯片设备可以取得互联网上的唯一标记,与其他的联网设备进行通信,即蓝牙V4.1连上可上网的设备后,就可以直接利用IPV6连接网络了,实现和WIFI模块相同的功能,但在兼容性上还在做改进,加油吧,骚年。

蓝牙V4.2改善了数据传输速度和隐私保护程度,并接入了该设备将可直接通过IPv6和6LoWPAN接入互联网。 速度提高2.5,数据包容量相当于之前的10倍。低功耗从260kbps---》650Kbps,全功耗仍为2.1Mbps。新标准为固件升级提供了支持

V4.1 和V4.2都在规格书上添加对无线共存项的测试,因此在4G共存上确保与其的共存性。

当前蓝牙协议包括BR/EDR、AMP、LE三种技术。

2.2蓝牙模块分类标准

1、按支持的蓝牙协议分

单模蓝牙模块:支持蓝牙某一种协议的模块;

双模蓝牙模块:同时支持经典蓝牙(BT)和低功耗蓝牙(BLE)协议的模块。

2、按应用分

蓝牙数据模块:一般多使用BLE低功耗蓝牙模块

蓝牙音频模块:音频需要大码流的数据传输更适合使用BT经典蓝牙模块。

低功耗蓝牙和传统蓝牙实际上有很大的不同,低功耗蓝牙是nokia的wibree标准上发展起来的。在功耗上,传统蓝牙有3个级别的功耗,class1、class2、class3分别支持100m、10m、1m的传输距离;低功耗蓝牙没有功耗级别,一般发送功率在7dbm。

3 低功耗蓝牙协议栈

3.1 协议栈架构

BLE工作在免许可的2.4G ISM射频端,它一开始就设计为高低功耗无线技术。

BLE协议可分为2大部分:BLE Application 和BLE Core;而BlueTooth core有包括BLE controllerBLE Host 2部分。

BLE Core 包括Controller 到Host的L2CAP层,以及相关的核心profile.

BlueTooth Application 包括各种各样的profile(规范),如HOGP、A2DP、HFP、OOP等。

上图为BLE协议栈整体架构(application+core),要想实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后再协议栈上开发自己的应用。因此BLE协议栈是连接芯片和应用的桥梁,是实现整个 BLE应用的关键。

图上的BlueTooth Core 和BlueTooth Application  Host Controller,都是指"逻辑实体"。所谓“逻辑实体”,需要和日常生活中的"物理实体"区分开。如一块蓝牙芯片、主控CPU,就是指物理实体。而蓝牙协议所描述的这些“逻辑实体”,不一定会和物理实体一一对应。如在实际应用中,host和Bluetooth Application可能会位于同一物理实体中(主控CPU),而Controller单独位于另一个物理实体中(蓝牙芯片)。

蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议和(Buletooth Core)蓝牙应用层协议(Bluetooth Application).蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,定义出各种各种的策略,如FTP,文件传输,局域网等。

Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。

在一个系统中,Host只有一个,但Controller可以是一个,或多个。如:单独的LE Controller,单独的BR/EDR Controller,单独的LE+BR/EDR Controller;在单独的BR/EDR  Controller或LE+BR/EDR Controller基础上,增加一个或多个AMP Controller。

3.2 通信实体内从下到上各层分析

3.2.1 物理层PHY

任何一个通信系统,首先要确定的是通信介质(通信通道,Physical Channel)

Physical Layer(PHY)  ----PHY层用来指定BLE所用的无线频段、调制解调方式和方法。

具体描述:由于BLE属于无线通信,则其通信介质是一定频率范围下的频带资源(Frequency Band);BLE的市场定位是个体和民用,因此使用免费的ISM频段(频率范围是2.400~2.4835GHz);为了同时支持多个设备,将整个频带分为40份,每份的带宽为2MHz,称为RF Channel。--------BLE的物理通道   频点为f=2402+K*2 MHz  k=0~39,带宽为2MHz的40个RF Channel。

除了物理通道之外,Physical Layer还需要定义RF收发双方的而一些其他特性:

RF发射相关的特性(Transmitter Characteristics),包括发射功率(Transmission power、调制方式(Modulation),高斯频移键控(Gaussian Frequency Shift Keying ,GFSK)、Spurious Emissions、Radio Frequency Tolerance等等。(不影响本文后续的讨论,不用深究);

RF接收相关的特性(Receiver Characteristics),包括接收灵敏度等。

主要功能:在Physical Channel(即40个RF Channel)上可靠收发数据。需要控制RF收发相关的参数以及解决Physical Channel的共享问题,还需要(对于两个通信实体),有一条独享的传输通道(即logical Link,逻辑链路)。另外,由于Physical Channel是不可靠的,Link Layer需要提供校验、重传等机制,确保数据传输的可靠性。

解决问题1:Physical  Channel的共享问题

1、数据量比较少、发送不频繁、对时延不很敏感的场景

----Link Layer采用 广播通信,从40个RF Channel中选取3个,作为广播通道(advertising  channel);即所有参与者,共享同一个逻辑传输通道(广播通道)

2、数据量大、发送频率高、对时延较敏感的场景

-----从Link Layer剩余的37个RF Channel中,选取一个,为这种场景里面的通信双方建立独立的通道(data channel)------这是连接的过程。

----注意,为了增加对4G(2.4G 频段)的抗干扰能力,采用跳频技术(Hopping)。即在多个channel之间随机但有规律的切换。

解决问题2:如何建立独享的逻辑链路----状态和角色定义

BLE协议在Link Layer抽象出5中状态:

Standby Stae、Advertising State、Scanning State、Initiating State、Connection State。 同一时刻设备只能处于一种状态。

 注意双向箭头和单向箭头

Link Layer 状态机变化图

1、Standby状态是初始状态,即不发送数据,也不接受数据。根据上层实体的CMD(如位于Host软件中GAP),可由其他任何一种状态进入,也可以切换至出Connection状态外的任何一种状态。

2、Advertising状态是可以通过广播通道发送数据的状态,有Standby状态进入。Advertiser广播的数据可以由处于Scanning或者Initiating状态的实体接收。上层实体可通过命令将Advertising状态切换回Standby状态。另外,连接成功后,可切换至Connection状态。

3、Scanning状态是可以通过广播通道接收数据的状态,由Standby状态进入。上层实体可通过命令将Scanning状态切换回Standby状态。

4、Initiating状态和Scanning状态类似,不过是一种特殊的接受状态,由Standby状态进入,只能接受Adverstiser广播的connectable的数据,并在接收到数据后,发送连接请求,以便和Advertiser建立连接。当连接成功后,Initiater和对应的Adverstiser都会切换至Connection状态,

5、Connection状态是和某个实体建立了单独通道的装填,在通道建立之后,由Initiating或Advertising自动切换而来。通道断开后,会重新回到Standby状态。

在通道建立后,处于Connection状态的双方,有两种角色Master和Slave。

对于Initiater方称作Master;  Advertiser方为Slave。   主机从机两种角色。

解决问题3:可靠性---空中点对点通信协议

1、在某一状态下,和其他实体对应状态之间的数据交换机制;2、根据上层实体的指令,以及当前的实际情况,负责状态间切换。---------由空中接口协议(Air Interface Protocol)处理。

两种类型的Physical Channel(advertising channel 和data channel)统一使用一种packet format。

Preamble(1 octet)   Access Address(4 octets) PDU(2~257 octets)  CRC(3 octets)   octets 8位字节

数据报格式特别说明:

注1:

Access Address 接入地址: 用于是被是数据包还是广播包

PDU,BLE在Link Layer的PDU长度最大为257 octets

Link Layer 总长度在9~264bytes(1+8 ~257+8)?????

注2:

数据链路层link Layer 有5种状态,每种状态下所传输的功能不尽相同,因此,定义了多种PDU类型。

以白名单(White List)的形式定义数据链路层的数据过滤机制-------针对广播通道

数据控制协议(Link Layer Control),用于管理、控制两个Link Layer实体间所建立的这个Connection。主要功能:

1、更新Connection相关的参数

2、更新该链接所使用的调频图谱(即使用哪些Physical Channels)

3、执行链路加密(Encryption)有关的过程。

3.2.3 HCI

定义Host和Controller(通常是两颗IC,ESP32可以在一颗上)之间的通信协议,可基于Uart、USB和软件模拟。

3.2.4 L2CAP Protocol

3.2.5 ATT Protocol

BLE的初衷是用于物联网,物联网中最重要、最广泛的应用是信息采集。基于信息采集的需求,BLE抽象出一个协议:Attribute protocol。这个协议将这些信息以"Atributte(属性)"的形式抽象出来,并提供一些方法,供远端设备remote devece 读取、修改这些属性的值(Attribute Value).

ATT(Attribute Protocol) 属性层是GATT和GAP的基础,它定义了BLE协议栈上层的数据结构和组织方式。

属性概念是ATT层的核心,定义了属性的内容,规定了访问属性的方法和权限。----类似于编程的数据结构

属性包括三种类型:服务项、特征值和描述符。三者之间存在树状包含关系,服务项包含一个或多个特征值,特征值包含一个或多个描述符,多个服务项组织在一起,构成属性规范(Attribute Profile)。

对于常用的属性规范,比如体重计、心率计,BLE协议做了具体定义。

只要BLE主从设备均遵守某个Profile来进行设计,那么两者就能优雅的通信。

GATT Profile 用ATT协议在设备间来传输命令、请求、应答、指示、通知和确认消息。这些数据存于Attibute  Protocol PDUS。

Opcode :操作码---特定命令、请求、应答、指示、通知、确认的操作码和用于身份验证的标志。

Attribute Parameter:特定命令或请求的数据, 或者是应答、通知和指示的数据。

Authentication signature: 可选的。

在服务器server设备上: 属性协议命令和请求以属性形式存储

属性有四部分组成:属性句柄、属性类型、属性值、属性权限。

2.3.2.4.1  属性数据结构

属性数据结构包含:句柄、类型、属性值、权限。下图是逻辑属性表示。

属性句柄(Attribute Handle)就是一个对应特定属性的一个索引。它是一个2字节的十六进制码,起始于0x0001,在系统初始化时候,各个属性的句柄递增(但不一定加一),最大不超过0xFFFF。与编程中的句柄的概念类似,就是某个属性值的查询地址。

属性类型(Attribute Type)是UUID,用于说明属性值的类型。用以区分当前属性是服务项或是特征值等。

属性值(Attribute Value): 数据(由Attribute Type描述,由Attribute handle 索引)。

属性权限(Attribute permissions):有Server使用决定给定的attribute是否允许写或读访问。由GATT来确认。

3.2.6 GATT

~1 Role

GATT的角色有两种:GATT server 和GATT client。客户端和服务器:提供数据的设备称为GATT服务器,访问GATT服务器而获得数据的设备称为GATT客户端

~2 profile 架构

GATTProfile 指定了pfofile data 交换的数据结构。这个结构定义基本元素(如services和characteristics)。所有元素都用Attibute表示。

上图是GATT Profile的架构。一个profile包含一个或多个services。一个service包括多个characteristics 或其他service的应用(include)。每个characteristic包括值和其他可选的值的信息。在server设备中,service和characteristic和characteristic的组成(valus和descrptors)以Attributes存储。

~2.1 Characteristic

Characteristic定义至少包括2个属性,一个属性用于声明(characteristic declaration),另一个用于存放特征的值(characteristic value declaration)。另外可能还有特征描述符(characteristic descriptor declaration) 。上述的三种declaration都是包含在独立的Attribute中。 characteristic declaration之后紧跟characteristic value declaration。而可选的所有characteristic descriptor declaration跟在characteristic value declaration之后。characteristic descriptor declarations之间的顺序就那么不重要了。

可以把多个characteristic value declaration聚合在一起成为一个复合的Characteristic。

~2.1.1characteristic declaration 特征声明

对于Characteristic declaration 特征声明是一个属性。

其Attribute Type 为0x2803----- UUID for <>;   特征声明的UUID类型

其Attribute Value为Characteristic Properties,Characteristic Value Attribute的句柄和Characteristic UUID。

其Attribute Permissions 需要是可读的且无需身份验证或授权。

注意:当服务器和客户端建立信任关系时,特征声明的Attribute Value 不能改动。

一个service 可能有多个拥有相同Characteristic UUID的 特征声明。

有必要对特征声明的三个属性值在细究一下。

Characteristic Properties---------决定了特征值如何使用、特征描述符如何访问。如下表3.5所列,如果设置了对应的位,则表中UI对应描述会被允许。位或操作。

~2.1.2 characteristic value declaration 特征值

特征值是一个属性,它包括特征的值。

其Attribute Type:16-bit BlueTooth UUID 或者是 128-bit的Characteristic UUID。

其Atrribute Vlaue: Characteristic 的值。

Attribute Permissions:有service指定,没有指定时由spcecific实现。

~2.1.3characteristic descriptor declaration

这里面的内容比较多。

~2.1 Service

Service定义包括service描述(service declaration),也可能包括定义(definitions)和特征定义(Characteristic definitions)。

server设备上Service definitions按Attribute Handle的顺序排列。

服务描述是一个Attribute。

Attribute Type属性类型: 设置为0x2800——《Primary Service》或0x2801——《Secondary Service》.

Attribute Value:16bit的BlueTooth的UUID 或者 128bit 服务UUID。-------称为服务UUID。客户端必须同时支持16bit 和128bit 的UUID。一个客户端可能可以忽略任何具有未知服务UUID的服务定义。一个未知的服务UUID是服务不支持的UUID。

Attribute Permission:必须是可读的且无需身份验证或授权。

当存在多个服务,服务定义中有16bit的蓝牙UUID服务说明分在一组,128bi的UUID的服务说明分在另一组。

2.3.2.7 GAP-Generic Access Profile

该Profile保证不同的Bluetooth产品可以互相发现对方并建立连接。

GAP定义了蓝牙设备如何发现和建立与其他设备的安全/不安全连接。它出一些一般的业务(如询问、命名和搜索)和一些安全性问题(如担保) 同时还处理一些有关连接的业务(如链路建立、信道和连接建立)。

GAP规定的是一些一般性的运行任务。因此,它具有强制性,并作为所有其它蓝牙应用规范的基础。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章