本篇文章很多内容摘抄自蜗窝科技的蓝牙协议分析!
自1994年由爱立信推出至今,蓝牙技术已经走过了20多个岁月。从最初的Bluetooth V1.0,到Bluetooth V5.0,经历了近10多个版本的修订后,发展为当前的状况。
如今的蓝牙,像一个大杂烩:BR/EDR沿用旧的蓝牙规范;LE抄袭802.15.4;AMP直接使用802.11。而这一切的目的,就是以兼容性和易用性为基础,在功耗和传输速率之间左右为难,这并不是优雅的设计。
版本 | 规范发布时间 | 增强功能 |
---|---|---|
0.7 | 1998.10.19 | Baseband、LMP |
0.8 | 1999.01.21 | HCI、L2CAP、RFCOMM |
0.9 | 1999.04.30 | OBEX于IrDA的互通性 |
1.0 Draft | 1999.07.05 | SDP、TCS |
1.0 A | 1999.07.26 | 第一个正式版本 |
1.0 B | 2000.10.01 | 安全性,厂商设备之间连接兼容性 |
1.1 | 2001.02.22 | IEEE 802.15.1 |
1.2 | 2003.11.05 | 快速连接、自适应跳频、错误检查、流程控制和同步能力 |
2.0+EDR | 2004.11.09 | EDR传输率提升至2-3Mbps |
2.1+EDR | 2007.07.26 | 扩展查询响应、简易安全配对、暂停与继续加密、Sniff省电 |
3.0+HS | 2009.04.21 | 交替射频技术(AMP)、802.11协议适配层、电源管理、取消了UMB的应用 |
4.0+BLE | 2010.06.30 | 低功耗物理层和链路层、AES加密、ATT、GATT和SM等 |
4.1 | 2013.13.03 | 与4G不构成干扰,通过IPV6连接到网络,可同步发送和接收数据 |
4.2 | 2014.12.04 | 数据传输更快、隐私功能更强大,支持6LoWPAN |
5.0 | 2016.06.16 | 更快的传输速度,更远的传输距离,更低的功耗,导航功能,物联网功能 |
蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索(discovery)、连接(connection)等机制,但它们是不能互通的。
如果厂商要确保能和所有的蓝牙设备互通,那么就只能同时实现两种技术。可以说BR和LE是完全不同的两种技术。
Basic Rate是正宗的蓝牙技术,包括可选(optional)的EDR(Enhanced Data Rate)技术,以及交替使用的(Alternate)的MAC(Media Access Control)层和PHY层扩展(简称AMP)。
说着很拗口,不过通过背后的应用场景,就好理解了:
(1)蓝牙诞生之初,使用的是BR技术,此时蓝牙的理论传输速率只能达到721.2Kbps。在那个年代,56Kbps的Modem就是高大上了,这个速度可以说是惊为天人了啊!但是科技变化太快了,BR技术转眼就过时了。那怎么办呢?缝缝补补一下,增强速度呗,Enhanced Data Rate就出现了。
(2)使用EDR技术的蓝牙,理论速率可以达到2.1Mbps。这一次的升级换代,还算优雅,因为没有改变任何的硬件架构、软件架构和使用方式上的改变。
(3)也许你也猜到了,EDR又落伍了,看看人家WIFI(WLAN),几十Mbps,上百Mbps,咱们才2.1Mbps,也太寒酸了吧!那怎么办呢?蓝牙组织想了个坏主意:哎,WIFI!把你的物理层和MAC层借我用用呗!这就是AMP(Alternate MAC and PHY layer extension)。艾玛,终于松口气了,我们可以达到54Mbps了。
(4)不过呢,由于蓝牙自身的物理层和AMP技术差异太明显了,这次扩展只能是交替使用(Alternate)的,也就是说,有我(BR/EDR)没你(AMP)。
NOTE: 细心的读者可能会注意到,这里特别强调了optional和alternate这两个字眼,这是蓝牙Spec的原话。它意味着,BR和EDR是可以同时存在的,但BR/EDR和AMP只能二选一。
BR技术的进化路线,就是传输速率的加快、加快、再加快。但能量是守恒的,你想传的更快,代价就是消耗更多的能量。而有很多的应用场景,并不关心传输速率,反而非常关心功耗。这就是Bluetooth LE(称作蓝牙低功耗)产生的背景。
LE技术相比BR技术,差异非常大,或者说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已。后面我们会详细的解释这种差异,以及LE的行为特征。
蓝牙系统的组成,涉及到Bluetooth Application、Bluetooth Core、Bluetooth Host、Bluetooth Controller等部分。从core5.0摘录的架构图如下:
(1)这几部分都是逻辑实体,而不是都能对应特定的硬件设备。所谓的“逻辑实体”,需要和日常生活中的“物理实体”区隔开。如在做电路设计时,一个蓝牙芯片、一个主控CPU,就是指物理实体。而蓝牙协议所描述的这些“逻辑实体”,不一定会和物理实体一一对应,如在实际应用中,Host和Bluetooth Application可能会位于同一个物理实体中(主控CPU),而Controller单独位于另一个物理实体中(蓝牙芯片)。
(2)蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;蓝牙应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,定义出的策略,如AVRCP、A2DP、HID等。
(3)Bluetooth Core由两部分组成,Host和Controller。这两部分在不同的蓝牙技术中(BR/EDR、AMP、LE),承担角色略有不同,但大致的功能是相同的。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。
(4)在一个系统中,Host只有一个,但Controller可以一个,也可以有多个。如:单独的LE Controller;单独的BR/EDR Controller;单独的LE+BR/EDR Controller;在单独的BR/EDR Controller或LE+BR/EDR Controller基础上,增加一个或多个额外的AMP Controller。
BR/EDR、AMP、BLE等技术有如下的特点:
(1)BR/EDR技术,侧重“点对点”通信,以至于虽然在协议的底层(如Logical Link)有提及多播(Unidirectional)和广播(Broadcast)的概念,但在上层的应用场景中,几乎不存在相应的应用。
(2)随着物联网的发展,业界对简单的、不需要连接的多播或广播通信的需求越来越迫切,因此BLE技术在RF和Baseband的协议中,就做出了修改,以适应这种需求,即:修改原有的79个channel的跳频方式,将channel的个数减少为40个,并保留了不少于3个的固定channel,用于广播通信。为仅仅在剩下的37个data channel上跳频。
(3)因为这种改变,原有的搜索/连接/配对等概念,在BLE上就不再存在了,取而代之的是Advertisor、Initiator等概念。但在之后的数据通信的层次上,尽量保持了一致。
(4)对于AMP来说,是基于BR/EDR的controller,在完成通常的点对点连接之后,两个蓝牙设备商议,是否需要将后续的数据通信,转移至AMP controller上。这就是Bluetooth 3.0引入的AMP技术。
蓝牙发射功率分三级:一级功率100mW(20dBm);二级功率2.5mW(4dBm);三级功率1mW(0dBm)
蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下:
从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护;
在通信实体内部,下层向上层提供服务,上层是下层的用户;
在通信实体之间,协议仅针对每一层,实体之间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。
蓝牙协议分为四个层次:物理层(Physical Layer)、逻辑层(Logical Layer)、L2CAP Layer和应用层(APP Layer)。
物理层,负责提供数据传输的物理通道(通常称为信道)。通常情况下,一个通信系统中存在几种不同类型的信道,如控制信道、数据信道、语音信道等等。
逻辑层,在物理层的基础上,提供两个或多个设备之间、和物理无关的逻辑传输通道(也称作逻辑链路)。
L2CAP层,L2CAP是逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol)的缩写,负责管理逻辑层提供的逻辑链路。基于该协议,不同Application可共享同一个逻辑链路。类似TCP/IP中端口(port)的概念。
APP层,理解蓝牙协议中的应用层,基于L2CAP提供的channel,实现各种各样的应用功能。Profile是蓝牙协议的特有概念,为了实现不同平台下的不同设备的互联互通,蓝牙协议不止规定了核心规范(称作Bluetooth core),也为各种不同的应用场景,定义了各种Application规范,这些应用层规范称作蓝牙profile。
在以上四个层次的基础上,蓝牙协议又将物理层和逻辑层划分了子层,分别是Physical Channel/Physical Links和Logical Transports/Logical Links,这一划分,相当使人崩溃,要多花费大量的脑细胞去理解它们,具体请参考下面的分析。
物理层负责提供数据传输的物理信道,蓝牙的物理层分为Physical Channel和Physical Links两个子层。我们先介绍Physical Channel。
一个通信系统中通常存在多种类型的物理信道,蓝牙也不例外。蓝牙存在BR/EDR、LE和AMP三种技术,这三种技术在物理层的实现上就有很大的差异,下面让我们一一介绍。
首先是相同点,BR/EDR、LE和AMP的RF都使用2.4GHz ISM(Industrial Scientific Medical) 频段,频率范围是2.400-2.4835 GHz。
地理位置 | ISM频段范围 | 射频信道频率 |
---|---|---|
中国、美国、欧洲 | 2400.0~2483.5MHz | F=(2402+k)MHz,k在0、1、……78中随机取值 |
法国 | 2446.5~2483.5MHz | F=(2454+k)MHz,k在0、1、……22中随机取值 |
日本 | 2471.0~2497.0MHz | F=(2473+k)MHz,k在0、1、……22中随机取值 |
西班牙 | 2445.0~2475.0MHz | F=(2449+k)MHz,k在0、1、……22中随机取值 |
NOTE: 不同国家和地区蓝牙的频率和信道分配情况是不同,本文所有的描述都以中国采用的“欧洲和美国”标准为准。
我国的蓝牙频率在2.402GHz~2.483GHz,蓝牙每个频道的宽度为1MHz,为了减少带外辐射的干扰,保留上、下保护为3.5MHz和2MHz,79个跳频点中至少75个伪随机码跳动,30S内任何一个频点使用时长不能超过0.4S。
除了相同点,剩下的都是不同点了。
BR/EDR是传统的蓝牙技术,它这样定义物理信道:
(1)ISM频率范围内被分成79个channel,每一个channel占用1M的带宽,在0 channel和78 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。
(2)采用跳频技术(hopping),也就是说,某一个物理信道,并不是固定的占用79个channel中的某一个,而是以一定的规律在跳动(该规律在技术上叫做"伪随机码",就是"假"的随机码)。因此蓝牙的物理信道,也可以称作跳频信道(hopping channel)。
(3)BR/EDR技术定义了5种物理信道(跳频信道),BR/EDR Basic Piconet Physical Channel、BR/EDR Adapted Piconet Physical Channel、BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel和BR/EDR Synchronization Scan Channel。
(4)BR/EDR Inquiry Scan Physical Channel用于蓝牙设备的发现操作(discovery),即我们常用的搜索其它蓝牙设备(discover)以及被其它蓝牙设备搜索(discoverable)。
(5)BR/EDR Page Scan Physical Channel用于蓝牙设备的连接操作(connect),即我们常用的连接其它蓝牙设备(connect)以及被其它蓝牙设备连接(connectable)。
(6)BR/EDR Basic Piconet Physical Channel和BR/EDR Adapted Piconet Physical Channel主要用在处于连接状态的蓝牙设备之间的通信。它们的区别是,BR/EDR Adapted Piconet Physical Channel使用较少的RF跳频点。BR/EDR Basic Piconet Physical Channel使用全部79个跳频点,而BR/EDR Adapted Piconet Physical Channel是根据当前的信道情况使用79个跳频点中的子集,但是跳频数目也不能少于20个。这个主要是因为蓝牙使用ISM频段,当蓝牙和WIFI共存的时候,部分跳频点被WIFI设备占用而使得蓝牙设备在这些跳频点上的通信总是失败,因此,需要避过那些WIFI设备占用的频点。
(7)BR/EDR Synchronization Scan Channel可用于无连接的广播通信,后续文章会详细介绍。
(8)同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。
LE是为蓝牙低功耗而生的技术,为了实现低功耗的目标,其物理信道的定义与BR/EDR有些差异:
(1)ISM频率范围内被分成40个channel,每一个channel占用2M的带宽,在0 channel和39 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。
(2)LE技术定义了2种物理信道,LE Piconet channel和LE Advertisement Broadcast Channel。
(3)LE Piconet Channel用在处于连接状态的蓝牙设备之间的通信,和BR/EDR一样,采用跳频技术。和BR/EDR不一样的地方是,只会在40个频率channel中的37个上面跳频。
(4)LE Advertisement Broadcast Channel用于在设备间进行无连接的广播通信,这些广播通信可用于蓝牙的设备的发现、连接(和BR/EDR类似)操作,也可用于无连接的数据传输。
(5)和BR/EDR一样,同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。
AMP是为高速数据传输设计的技术,其物理层规范直接采用802.11(WIFI)的PHY规范,主要有如下特点:
AMP物理信道只有一种,即AMP Physical Channel,主要用于已连接设备之间的数据通信,和BR/EDR技术中的BR/EDR Adapted Piconet Physical Channel位于一个级别,可以互相切换使用。
由3.1.1的描述可知,蓝牙协议为BR/EDR、LE和AMP三种技术定义了8种类型的物理信道,包括:
AMP physical channel
BR/EDR Basic Piconet Physical Channel
BR/EDR Adapted Piconet Physical Channel
BR/EDR Page Scan Physical Channel
BR/EDR Inquiry Scan Physical Channel
BR/EDR Synchronization Scan Channel
LE Piconet Channel
LE Advertisement Broadcast Channel
而物理链路,则是对这些物理信道(主要是BR/EDR技术中的Basic Piconet Physical Channel和Adapted Piconet Physical Channel)的进一步封装,其主要特征是:
(1)Physical Link是一个虚拟概念,不对应协议中任何的实体,数据包封包/解包的过程中不被体现。
(2)AMP Physical Channel、LE Piconet Channel、LE Advertisement Broadcast Channel均有一个一一对应的Physical Link,分别是AMP Physical Link、LE Active Physical Link、LE Advertising Physical Channel。
(3)BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel、BR/EDR Synchronization Scan Channel只在特定时间段使用,且无法控制任何属性,因此不需要再Physical Link中体现。
(4)BR/EDR Basic Piconet Physical Channel和BR/EDR Adapted Piconet Physical Channel是BR/EDR技术中已连接设备之间进行数据通信的通道,且同一时刻只能根据应用场景选择一种channel进行数据传输。因此这两个channel被map到BR/EDR Active Physical Link、BR/EDR Parked Physical Link和BR/EDR Connectionless Slave Broadcast Physical Link三个物理链路上。
(5)BR/EDR Active Physical Link和BR/EDR Parked Physical Link的抽象主要有两个方面的意义:
(5-1)屏蔽底层的Basic/Adapted Piconet Physical Channel之间的差异,统一使用Physical Link取代。在需要的时候,可以通过上层的链路管理协议,指定使用哪一种physical channel(Basic or Adapted)。
(5-2)可以通过Physical Link的抽象,控制Physical Channel的一些属性(如发射功率、收发周期等),以达到节省功耗的目的。而上面的层次(如逻辑层)不需要对这些动作知情。
(6)BR/EDR Active Physical Link定义了连接状态的蓝牙设备在链路处于active状态时的物理链路,该物理链路对应的设备的发射功率是可修改的。
(7)BR/EDR Parked Physical Link定义了连接状态的蓝牙设备在链路处于parked状态时的物理链路。parked状态是一种特殊的连接状态,连接双方没有正在进行的数据传输,所有的链路消耗,都是为保持连接所做的事情。此时可以通过降低在物理信道上的收发频率而降低功耗。该物理链路和BR/EDR Active Physical Link使用相同的物理信道。
(8)BR/EDR Connectionless Slave Broadcast Physical Link使用BR/EDR Adapted Piconet Physical Channel,用于一点到多点的广播通信。
(9)由上面的描述可知,物理链路这一层抽象,实在是可有可无,希望大家不要纠结,知道怎么回事即可。
逻辑层的主要功能,是在已连接(LE Advertisement Broadcast可以看做一类特殊的连接)的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似:
一条城市道路可以看做一个物理链路(可能有两个方向,我们只考虑其中一个即可),该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、掉头车道、快速车道、慢速车道等等
这里的车道(逻辑信道),从物理角度看,并没有什么分别,只是为了方便交通(数据传输),人为的抽象出来的。和车道类似,蓝牙逻辑信道的划分依据是传输类型,主要包括下面3类(即Logical Link):
(1)用于管理底层物理链路的控制类传输,包括AMP-C、ACL-C、PSB-C、LE-C、ADVB-C。
(2)传输用户数据的用户类传输,包括AMP-U、ACL-U、PSB-U、LE-U、ADVB-U。
(3)其它比较特殊的传输类型,包括流式传输(stream)、PBD(Profile Broadcast Data)。
以上每种Logic Link都会在下层对应一个Logical Transport,这些Logical Transport具有一些属性值,如流控、应答/重传机制等。如下:
AMP ACL(Asynchronous Connection-Oriented Link),基于AMP技术的、面前连接的、异步传输链路,为AMP-U提供服务。
BR/EDR ACL,基于BR/EDR技术的ACL链路,为ACL-C、ACL-U提供服务。
SCO/eSCO(Synchronous Connection-Oriented/Extended SCO),基于BR/EDR技术的、面向连接的、同步传输链路,为stream类型的Logical Link提供服务。
ASB(Active Slave Broadcast)、PSB(Parked Slave Broadcast),基于BR/EDR技术的、面向连接的广播传输链路,为ACL-U、PSB-U、PSB-C提供服务。
CSB(Connectionless Slave Broadcast),基于BR/EDR技术的、无连接的广播链路,为PBD提供服务。
LE ACL,基于LE技术的、面前连接的、异步传输链路,为LE-U、LE-C提供服务。
ADVB(Advertising Broadcast),基于LE技术的、广告/广播链路,为ADVB-U、ADVB-C提供服务。
AMP-C没有对应的Logical Transport,而是直接控制AMP Physical Link完成所需功能。
L2CAP是Logical Link Control and Adaptation Protocol(逻辑链路控制和适配协议)的缩写,蓝牙协议到这个层次的时候,就清爽多了:
对下,它在用户类XXX-U Logical Link的基础上,抽象出和具体技术无关的数据传输通道(包括单播和广播两类),至此用户就不再需要关心繁杂的蓝牙技术细节。
对上,它以L2CAP channel endpoints的概念(类似TCP/IP中的端口),为具体的应用程序(profile)提供独立的数据传输通道(当然,也是一个逻辑通道)。
profile是蓝牙Application的代指,也可以翻译为服务,为了实现不同平台下的不同设备的互联互通,蓝牙协议为各种可能的、有通用意义的应用场景,都制定的了规范,如SPP、HSP、HFP、FTP、IPv6/6LoWPAN等等。
Profiles基于L2CAP提供的L2CAP channel endpoints实现,在它们对应的层次上进行数据通信,以完成所需功能。有关蓝牙profile的介绍,会在后续文章中陆续给出,这里就不再详细说明了。