蓝牙基础知识
蓝牙参考资料
蓝牙基础知识
蓝牙通信协议也是通信协议的一种,目的就是把复杂的问题简单化,任何通信协议都具有层次性,特点如下:
-
从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护
-
在通信实体内部,下层向上层提供服务,上层是下层的用户。
-
在通信实体之间,协议仅针对每一层。实体间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。
当前的蓝牙协议包括BR/EDR(Basic Rate/Enhanced Data Rate)、AMP(Alternate MAC/PHYs)、LE(Low Energy)三种技术。
蓝牙技术特点
-
蓝牙4.0版本包括3个子规范,即传统蓝牙技术、高速蓝牙和低功耗蓝牙技术。
目前移动设备上适用的蓝牙大多是V4.0以上,经典V4.0是传统的3.0蓝牙升级而成,向下兼容。而BLE4.0 是新的分支,不向下兼容。经典蓝牙模块,一般用于数量比较大的传输:如语音、音乐等较高数据量传输。经典蓝牙模块可细分为传统蓝牙模块和高速蓝牙模块。低功耗蓝牙模块是指支持蓝牙协议4.0或更高的模块,特点是成本和功耗的降低,应用于实时性要求比较高的产品中。
-
蓝牙V4.1 以“internet of things”为目标对V4.0进行软件升级,在连接性进行提升(在硬件层面V4.0无需任何改动即可使用V4.1)。表现在:
- V4.1标准下蓝牙设备可以同时作为发射方(bt smart,v4.0上贴着的)和接收方(bt smart Ready),并且可以连接到多个设备上。 (主从一体,如智能手环作为主 和防丢器连接,同时也可以作为从 和智能手机相连)
- 长期睡眠下的自动唤醒功能(离开则断开,回来则直接连上) ;
- 通过IPV6建立网络连接 -----即蓝牙芯片设备可以取得互联网上的唯一标记,与其他的联网设备进行通信,即蓝牙V4.1连上可上网的设备后,就可以直接利用IPV6连接网络了,实现和WIFI模块相同的功能,但在兼容性上还在做改进。
-
蓝牙V4.2改善了数据传输速度和隐私保护程度,并接入了该设备将可直接通过IPv6和6LoWPAN接入互联网。 速度提高2.5,数据包容量相当于之前的10倍。低功耗从260kbps —> 650Kbps,全功耗仍为2.1Mbps。 新标准为固件升级提供了支持。
-
V4.1 和V4.2都在规格书上添加对无线共存项的测试,因此在4G共存上确保与其的共存性。
蓝牙模块分类标准
-
按支持的蓝牙协议分
- 单模蓝牙模块:支持蓝牙某一种协议的模块;
- 双模蓝牙模块: 同时支持经典蓝牙(BT)和低功耗蓝牙(BLE)协议的模块。
-
按应用分
-
蓝牙数据模块:一般多使用BLE低功耗蓝牙模块;
-
蓝牙音频模块:音频需要大码流的数据传输更适合使用BT经典蓝牙模块。
低功耗蓝牙和传统蓝牙实际上有很大的不同,低功耗蓝牙是nokia的wibree标准上发展起来的。在功耗上,传统蓝牙有3个级别的功耗,class1、class2、class3分别支持100m、10m、1m的传输距离;低功耗蓝牙没有功耗级别,一般发送功率在7dbm。
低功耗蓝牙协议栈
BLE起源
BLE起源于Bluetooth 4.0,最初由诺基亚设计为WiBree,后被蓝牙技术联盟–SIG(Bluetooth Special Interest Group)采用。从一开始,重点就是设计一款具有最低功耗标准的无线电标准,专门针对低成本、低带宽、低功耗、低复杂度进行优化。这些设计目标试图使BLE成为真正的低功耗标准,由芯片供应商实施,并在一个不起眼的纽扣电池供电下运行更长的时间。
BLE发展历程
- BLE4.0 :低功耗、属性协议ATT、通用属性配置文件GATT
- BLE4.1 :低功耗、属性协议ATT、通用属性配置文件GATT
- BLE4.2 :LE数据包长度扩展、安全连接
- BLE5.0 :2Mbps传输、长距离(4.2LE的4倍)、扩展广播(4.2LE的8倍)、发射功率增加(4.2LE的2倍)
- BLE5.1 :AoA/AoD、广播信道索引、定期广告同步传送
协议栈架构
BLE工作在免许可的2.4G ISM射频端,它一开始就设计为高低功耗无线技术。
BLE协议可分为2大部分:BLE Application 和BLE Core ;而BlueTooth core又包括 BLE controller 和 BLE Host 2部分。
BLE Core 包括Controller 到Host的L2CAP层,以及相关的核心profile.
BlueTooth Application 包括各种各样的profile(规范),如HOGP、A2DP、HFP、OOP等。
蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(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。
通信实体内从下到上各层分析
Physical Layer 物理层
任何一个通信系统,首先要确定的是通信介质(通信通道,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),包括接收灵敏度等。
Link Layer 链路层
主要功能:在Physical Channel(即40个RF Channel)上可靠收发数据。需要控制RF收发相关的参数以及解决Physical Channel的共享问题,还需要(对于两个通信实体),有一条独享的传输通道(即logical Link,逻辑链路)。另外,由于Physical Channel是不可靠的,Link Layer需要提供校验、重传等机制,确保数据传输的可靠性。
解决问题1:Physical Channel的共享问题
-
数据量比较少、发送不频繁、对时延不很敏感的场景。 例如一个传感器节点(如温度传感器),需要定时(如1s)向处理中心发送传感器数据(如温度)。 这种场景,BLE的Link Layer采取了一种比较懒的处理方式----广播通信:
- 从40个Physical Channel中选取3个,作为广播通道(advertising channel);
- 在广播通道上,任何参与者,随意收发;
- 所有参与者,共享同一个逻辑传输通道(广播通道)
-
数据量大、发送频率高、对时延较敏感的场景
- BLE的Link Layer会从剩余的37个Physical Channel中,选取一个,为这种场景里面的通信双方建立单独的通道(data channel)。这就是连接(connection)的过程。
- 为了增加容量,增大抗干扰能力,连接不会长期使用一个固定的Physical Channel,而是在多个Channel(如37个)之间随机但有规律的切换,这就是BLE的跳频(Hopping)技术。
解决问题2:如何建立独享的逻辑链路----状态和角色定义
BLE协议在Link Layer抽象出5中状态:
Standby State(待机状态)、Advertising State(广播状态)、Scanning State(扫描状态)、Initiating State(发起状态)、Connection State(连接状态)。 同一时刻设备只能处于一种状态。
注意 双向箭头和单向箭头 。
Link Layer 状态机变化图
1、Standby
状态是初始状态,既不发送数据,也不接受数据。根据上层实体的命令(如位于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 to 257 octets) CRC(3 octets)
Access Address,用于识别是数据包还是广播包。
PDU,BLE在Link Layer的PDU长度最大为257 octets(octets当做bytes就行了)。这决定了上层实体,如L2CAP、Application等,需要拆分、重组才能支持更大数据量的传输。
Link Layer总packet长度是9~264bytes。
-
Link Layer有5种状态,每种状态下所传输数据的功能不尽相同。所以,Air Interface Protocol定义出多种的PDU类型 。
-
以白名单(White List)的形式定义Link Layer的数据过滤机制。主要针对广播通道,因为随着通信设备的增多,空中的广播数据将会呈几何级的增长,为了避免资源的浪费(特别是BLE Host),有必要在Link Layer过滤掉一些数据包,例如根据蓝牙地址,过滤掉不是给自己的packet。
-
Link Layer Control
经过Air Interface Protocol的抽象,BLE实体已经具备广播通信、点对点连接的建立和释放、点对点通信等基本的能力。除此之外,Link Layer又抽象出来一个链路控制协议(Link Layer Control),用于管理、控制两个Link Layer实体之间所建立的这个Connection,主要功能包括:
更新Connection相关的参数,如transmitWindowSize、transmitWindowOffset、connInterval等等;
更新该连接所使用的跳频图谱(使用哪些Physical Channels);
执行链路加密(Encryption)有关的过程。
HCI
HCI 的全称是: Host Controller Interface ,是 Host 和 Controller 通信之间的接口。
一般的,BLE 是一颗单芯片的解决方案,芯片集成了所有的软硬件资源,对于单独的产品来说,可能出现以下产品形态:
1、Full stack:从上到下的协议栈全部都有,用户简单的写 App 调用接口即可,此刻,HCI 退化成为 Function Call(比如手环产品,节点控制器,单车控制器等等)
2、Only Controller:有的产品,只需要 Controller 不要 Host 和 APP,BLE 芯片作为一个外挂芯片,接到主控芯片上,主控芯片通过标准的 HCI 指令(通常介质为 UART)与 BLE 芯片交互。此刻,HCI 便成为了一种两颗芯片之间的通信协议(比如手机上 AP 和 BLE 就是这样的关系)
3、Only Host:Android 不就是么
BLE Core Spec 支持的 HCI 种类有 4 种:UART、USB、SDIO、3-Wire UART
HCI Type
HCI packet type | HCI packet indicator |
---|---|
HCI Command Packet | 0x01 |
HCI ACL Data Packet | 0x02 |
HCI Synchronous Data Packet | 0x03 |
HCI Event Packet | 0x04 |
因为 HCI 是双向的,发给 Controller 的命令称之为 HCI Command,Controller 发给上层的成为 HCI Event。
如果上层要给 Controller 发数据,那么叫 HCI ACL Data Packet。在 LE 中,HCI Synchronous Data Packet 没用,不管。
L2CAP
Logical Link Control and Adaptation Protocol 。 一个介于应用程序(Profile、Application等)和Link Layer之间的protocol 。
功能主要包括:
- Protocol/channel multiplexing,协议/通道的多路复用;
- Segmentation and reassembly,上层应用数据(L2CAP Service Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现 ;
- Flow control per L2CAP channel,基于L2CAP Channel的流控机制;
- Error control and retransmissions,错误控制和重传机制;
- Support for Streaming,支持流式传输(如音频、视频等,不需要重传或者只需要有限重传);
- Fragmentation and Recombination,协议数据单元(PDUs)的分片(和重组),生成符合Link Layer传输要求的数据片(长度不超过251);
- Quality of Service,QoS的支持。
ATT
Attribute Protocol 。
Physical Layer负责提供一系列的Physical Channel;
基于这些Physical Channel,Link Layer可在两个设备之间建立用于点对点通信的Logical Channel;
而L2CAP则将这个Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP欢快的run起来了。
物联网中最重要、最广泛的一类应用是:信息的采集。
这些信息往往都很简单,如温度、湿度、速度、位置信息、电量、等等。
采集的过程也很简单,节点设备定时的向中心设备汇报信息数据,或者,中心设备在需要的时候主动查询。
基于信息采集的需求,BLE抽象出一个协议:Attribute protocol,该协议将这些“信息”以“Attribute(属性)”的形式抽象出来,并提供一些方法,供远端设备(remote device)读取、修改这些属性的值(Attribute value)。
Attribute Protocol的主要思路包括:
- 基于L2CAP,使用固定的Channel ID
- 采用client-server的形式。提供信息(以后都称作Attribute)的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。
- 一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。
- Attribute可以定义一些权限(Permissions),以便server控制client的访问行为,包括:
- 访问有关的权限(access permissions),Readable、Writeable以及Readable and writable;
- 加密有关的权限(encryption permissions),Encryption required和No encryption required;
- 认证有关的权限(authentication permissions),Authentication Required和No Authentication Required;
- 授权有关的权限(authorization permissions),Authorization Required和No Authorization Required。
- 根据所定义的Attribute PDU的不同,client可以对server有多种访问方式,包括:
- Find Information,获取Attribute type和Attribute Handle的对应关系;
- Reading Attributes,有Read by type、Read by handle、Read by blob(只读取部分信息)、Read Multiple(读取多个handle的value)等方式;
- Writing Attributes,包括需要应答的writing、不需要应答的writing等。
GATT
ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪些信息,ATT并不关心,这是GATT(Generic Attribute Profile)的主场。
GATT相对ATT只多了一个‘G‘,但含义却大不同,因为GATT是一个profile(更准确的说是profile framework)。
在蓝牙协议中,profile一直是一个比较抽象的概念,我们可以将其理解为“应用场景、功能、使用方式”都被规定好的Application。传统的BR/EDR如此,BLE更甚。上面我们讲过,BLE很大一部分的应用场景是信息(Attribute)的共享,因此,BLE协议栈基于Attribute Protocol,定义了一个称作GATT(Generic Attribute)的profile framework(它本身也是一个profile),用于提供通用的、信息的存储和共享等功能。
由上图可知,GATT profile的层次结构依次是:Profile—>Service—>characteristic。
“Profile”是基于GATT所派生出的真正的Profile,位于GATT Profile hierarchy的最顶层,由一个或者多个和某一应用场景有关的Service组成。
一个Service包含一个或者多个Characteristic(特征),也可以通过Include的方式,包含其它Service。
Characteristic则是GATT profile中最基本的数据单位,由一个Properties、一个Value、一个或者多个Descriptor组成。
Characteristic Properties定义了characteristic的Value如何被使用,以及characteristic的Descriptor如何被访问。
Characteristic Value是特征的实际值,例如一个距离特征,其Characteristic Value就是距离长度。
Characteristic Descriptor则保存了一些和Characteristic Value相关的信息(例如value记录距离长度,那么Descriptor可以是长度单位m/km)。
以上除“Profile”外的每一个定义,Service、Characteristic、Characteristic Properties、Characteristic Value、Characteristic Descriptor等等,都是作为一个Attribute存在的,包括之前所描述的Attribute的所有特征:Attribute
Handle、Attribute Types、Attribute Value和AttributePermissions。
GAP
Generic Access Profile .
BLE协议栈定义了一个称作Generic Access(通用访问)的profile,以实现如下功能:
1)定义GAP层的蓝牙设备角色(role)
和3.3中的Link Layer的role类似,只不过GAP层的role更接近用户(可以等同于从用户的角度看到的蓝牙设备的role),包括:
Broadcaster Role,设备正在发送advertising events;
Observer Role,设备正在接收advertising events;
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。
2)定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),包括:
Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
Discovery modes and procedures,实现蓝牙设备的发现操作;
Connection modes and procedures,实现蓝牙设备的连接操作;
Bonding modes and procedures,实现蓝牙设备的配对操作。
3)定义User Interface有关的蓝牙参数,包括:
蓝牙地址(Bluetooth Device Address);
蓝牙名称(Bluetooth Device Name);
蓝牙的pincode(Bluetooth Passkey);
蓝牙的class(Class of Device,和发射功率有关);