基本概念
前言
自1994年由爱立信推出至今,蓝牙技术已经走过了20个岁月,从最初的Bluetooth V1.0,到Bluetooth V4.0(最新的为V4.1,2013年底发布)Bluetooth V5.0,本文基于蓝牙4.1规范,描述蓝牙技术的基本概念
概述
蓝牙协议包括两种技术:Basic Rate(BR)和Low Energy(LE),这两种技术,都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的
Basic Rate(BR)
Basic Rate是正宗的蓝牙技术,可以包括可选(optional)的EDR(Enhanced Data Rate)技术,以及交替使用的(Alternate)的MAC(Media Access Control)层和PHY层扩展(简称AMP)
蓝牙诞生之初,使用的是BR技术,此时蓝牙的理论传输速率,只能达到721.2Kbps,但是科技变化,很快Enhanced Data Rate就出现了,使用EDR技术的蓝牙,理论速率可以达到2.1Mbps。
随后,蓝牙借用了WIFI的物理层和MAC层,这就是AMP(Alternate MAC and PHY layer extension)速度终于达到了54Mbps
不过呢,由于蓝牙自身的物理层和AMP技术差异太明显了,这次扩展只能是交替使用(Alternate)的,也就是说,有我(BR/EDR)没你(AMP)。
Low Energy(LE)
上面所讲的BR技术的进化路线,就是传输速率的加快、加快、再加快。但能量是守恒的,你想传的更快,代价就是消耗更多的能量。而有很多的应用场景,并不关心传输速率,反而非常关心功耗。这就是Bluetooth LE(称作蓝牙低功耗)产生的背景。
LE技术相比BR技术,差异非常大,或者说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已。后面我们会详细的解释这种差异,以及LE的行为特征。
系统组成
蓝牙系统的组成,涉及到Bluetooth Application、Bluetooth Core、Bluetooth Host、Bluetooth Controller等词汇,不知道是因为对英文理解的歧义,还是因为蓝牙规范本身定义的歧义,理解这些词汇时感觉有点别扭。因此特意在这,对相关概念及其背后的意义进行说明。
- 图中所描述的蓝牙系统的组成部分,如Bluetooth Core和Bluetooth Application,如Host和Controller,都是指“逻辑实体”。所谓的“逻辑实体”,需要和日常生活中的“物理实体”区隔开。如在做电路设计时,一个蓝牙芯片、一个主控CPU,就是指物理实体。而蓝牙协议所描述的这些“逻辑实体”,不一定会和物理实体一一对应,如在实际应用中,Host和Bluetooth Application可能会位于同一个物理实体中(主控CPU),而Controller单独位于另一个物理实体中(蓝牙芯片)。
- 蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;蓝牙应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,百花齐放,定义出各种各样的策略,如FTP、文件传输、局域网等等。
- Bluetooth Core由两部分组成,Host和Controller。这两部分在不同的蓝牙技术中(BR/EDR、AMP、LE),承担角色略有不同,但大致的功能是相同的。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。
BR/EDR vs LE vs AMP
我们先从下面图片对BR/EDR、AMP和BLE三种技术有些更进一步的认识(点击可以查看放大后的原图):
该图片是对Bluetooth Core的一个Overview,从RF的Physical Channel,到Baseband的Physical Link、Logical Link、LMP、L2CAP等概念,都有一些粗略的介绍。
由该图片可以看出,BR/EDR、AMP、BLE等技术有如下的特点:
- BR/EDR技术,过于侧重“点对点”通信,以至于虽然在协议的底层(如Logical Link)有提及多播(Unidirectional)和广播(Broadcast)的概念,但在上层的应用场景中,几乎不存在(也不可能存在)相应的应用。
-
但随着物联网的发展,业界对简单的、不需要连接的多播或广播通信的需求越来越迫切,因此BLE技术在RF和Baseband的协议中,就做出了修改,以适应这种需求,即:修改原有的79个channel的跳频方式,将channel的个数减少为40个,并保留了不少于3个的固定channel,用于广播通信。为仅仅在剩下的37个data channel上跳频。
-
正因为这种改变,原有的搜索/连接/配对等概念,在BLE上就不再存在了,取而代之的是Advertisor、Initiator等概念。但在之后的数据通信的层次上,尽量保持了一致。
-
对于AMP来说,是基于BR/EDR的controller,在完成通常的点对点连接之后,两个蓝牙设备商议,是否需要将后续的数据通信,转移至AMP controller上。这就是Bluetooth 3.0引入的AMP技术。
芯片架构
在实际产品中,不同的使用场景有不同的搭配选择,都会根据芯片架构来确定,一般有以下几种方案
- host+controller双芯片,如手机AP芯片搭配蓝牙模块的方案,AP芯片一般使用Bluez开源协议栈来实现host,而controller则有蓝牙厂商实现
-
单芯片,单颗芯片实现host和controller,可用Apache Mynewt Nimble开源项目来实现host和Controller
-
自定义双芯片,MCU + 蓝牙soc
协议架构
协议层次
蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下:
-
从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护;
-
在通信实体内部,下层向上层提供服务,上层是下层的用户;
-
在通信实体之间,协议仅针对每一层,实体之间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。
蓝牙协议层次如下图:
蓝牙协议分为四个层次:物理层(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。
物理层
一个通信系统中通常存在多种类型的物理信道,蓝牙也不例外。蓝牙存在BR/EDR、LE和AMP三种技术,这三种技术在物理层的实现就有很大的差异
相同点:
BR/EDR、LE和AMP的RF都使用2.4GHz ISM(Industrial Scientific Medical) 频段,频率范围是2.400-2.4835 GHz。
除了相同点剩下的就是不同点了。
Physical Channel
BR/EDR
ISM频率范围内被分成79个channel,每一个channel占用1M的带宽,在0 channel和78 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)
采用跳频技术(hopping),也就是说,某一个物理信道,并不是固定的占用79个channel中的某一个,而是以一定的规律在跳动(该规律在技术上叫做"伪随机码",就是"假"的随机码)。因此蓝牙的物理信道,也可以称作跳频信道(hopping channel)
BR/EDR技术定义了5种物理信道(跳频信道)
- BR/EDR Basic Piconet Physical Channel,用在处于连接状态的蓝牙设备之间的通信,使用全部79个跳频点
-
BR/EDR Adapted Piconet Physical Channel,用在处于连接状态的蓝牙设备之间的通信,使用较少的RF跳频点,根据当前的信道情况使用79个跳频点中的子集,但是跳频数目也不能少于20个。这个主要是因为蓝牙使用ISM频段,当蓝牙和WIFI共存的时候,部分跳频点被WIFI设备占用而使得蓝牙设备在这些跳频点上的通信总是失败,因此,需要避过那些WIFI设备占用的频点。
-
BR/EDR Page Scan Physical Channel,用于蓝牙设备的连接操作(connect),即我们常用的连接其它蓝牙设备(connect)以及被其它蓝牙设备连接(connectable)
-
BR/EDR Synchronization Scan Channel,可用于无连接的广播通信
同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道
LE
LE是为蓝牙低功耗而生的技术,为了实现低功耗的目标,其物理信道的定义与BR/EDR有些差异。
ISM频率范围内被分成40个channel,每一个channel占用2M的带宽,在0 channel和39 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)
LE技术定义了2种物理信道,LE Piconet channel和LE Advertisement Broadcast Channel
LE Piconet Channel用在处于连接状态的蓝牙设备之间的通信,和BR/EDR一样,采用调频技术。和BR/EDR不一样的地方是,只会在40个频率channel中的37个上面跳频。
LE Advertisement Broadcast Channel用于在设备间进行无连接的广播通信,这些广播通信可用于蓝牙的设备的发现、连接(和BR/EDR类似)操作,也可用于无连接的数据传输。
和BR/EDR一样,同一时刻,BT设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道
AMP
AMP物理信道只有一种,即AMP Physical Channel,主要用于已连接设备之间的数据通信,和BR/EDR技术中的BR/EDR Adapted Piconet Physical Channel位于一个级别,可以互相切换使用
Physical Links(物理链路)
Physical Link是一个虚拟概念,不对应协议中任何的实体,数据包封包/解包的过程中不被体现
由上述所知,蓝牙协议为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)的进一步封装,其主要特征是:
- AMP Physical Channel、LE Piconet Channel、LE Advertisement Broadcast Channel均有一个一一对应的Physical Link,分别是AMP Physical Link、LE Active Physical Link、LE Advertising Physical Channe
-
BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel、BR/EDR Synchronization Scan Channel只在特定时间段使用,且无法控制任何属性,因此不需要再Physical Link中体现
-
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三个物理链路上。
-
BR/EDR Active Physical Link和BR/EDR Parked Physical Link的抽象主要有两个方面的意义:
-
屏蔽底层的Basic/Adapted Piconet Physical Channel之间的差异,统一使用Physical Link取代。在需要的时候,可以通过上层的链路管理协议,指定使用哪一种physical channel(Basic or Adapted)。
-
可以通过Physical Link的抽象,控制Physical Channel的一些属性(如发射功率、收发周期等),以达到节省功耗的目的。而上面的层次(如逻辑层)不需要对这些动作知情 如:BR/EDR Active Physical Link定义了连接状态的蓝牙设备在链路处于active状态时的物理链路,该物理链路对应的设备的发射功率是可修改的。
-
BR/EDR Parked Physical Link定义了连接状态的蓝牙设备在链路处于parked状态时的物理链路。parked状态是一种特殊的连接状态,连接双方没有正在进行的数据传输,所有的链路消耗,都是为保持连接所做的事情。此时可以通过降低在物理信道上的收发频率而降低功耗。该物理链路和BR/EDR Active Physical Link使用相同的物理信道。
-
BR/EDR Connectionless Slave Broadcast Physical Link使用BR/EDR Adapted Piconet Physical Channel,用于一点到多点的广播通信。
-
逻辑层
逻辑层的主要功能,是在已连接(LE Advertisement Broadcast可以看做一类特殊的连接)的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似
一条城市道路可以看做一个物理链路(可能有两个方向,我们只考虑其中一个即可),该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、掉头车道、快速车道、慢速车道等等。
Logical Links
用于管理底层物理链路的控制类传输,包括AMP-C、ACL-C、PSB-C、LE-C、ADVB-C
传输用户数据的用户类传输,包括AMP-U、ACL-U、PSB-U、LE-U、ADVB-U
其它比较特殊的传输类型,包括流式传输(stream)、PBD(Profile Broadcast Data)
Logical Transports
以上每种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提供服务。
L2CAP layer
L2CAP Channels
L2CAP是Logical Link Control and Adaptation Protocol(逻辑链路控制和适配协议)的缩写,该层扮演的角色为
对下,它在用户类XXX-U Logical Link的基础上,抽象出和具体技术无关的数据传输通道(包括单播和广播两类),至此用户就不再需要关心繁杂的蓝牙技术细节。
对上,它以L2CAP channel endpoints的概念(类似TCP/IP中的端口),为具体的应用程序(profile)提供独立的数据传输通道(当然,也是一个逻辑通道)。
Profiles
profile是蓝牙Application的代指,也可以翻译为服务,为了实现不同平台下的不同设备的互联互通,蓝牙协议为各种可能的、有通用意义的应用场景,都制定的了规范,如SPP、HSP、HFP等等。
Profiles基于L2CAP提供的L2CAP channel endpoints实现,在它们对应的层次上进行数据通信,以完成所需功能,后续文章会详细介绍profile的使用
蓝牙规范
蓝牙规范有两类:
一类是蓝牙核心规范,由Bluetooth Core Specification定义,囊括到L2CAP层,以及相关的核心profile;
另一类是蓝牙Application规范,包含了各种各样的profile规范(具体可参考“Specifications | Bluetooth® Technology Website”中的列表)。
蓝牙核心规范所定义的框架如下:
BR/EDR Radio & LE Radio & AMP PHY
蓝牙RF层(物理层),包括BR/EDR、LE以及AMP三种。负责在物理channel上收发蓝牙packet。
对BR/EDR和LE RF来说,还会接收来自Baseband的控制命令来控制RF频率的选择和timing。
AMP PHY使用802.11(WIFI)的规范,本文不再详细介绍,后续有关AMP的内容,也不过多涉及。
Link Controller & Baseband resource management
Link Controller和Baseband resource management组成了蓝牙的基带(baseband)。
Link Controller负责链路控制,主要是根据当前物理channel的参数、逻辑channel的参数、逻辑transport的参数将数据payload组装成bluetooth packet。另外,通过Link Control Protocol(对LE来说是LL Layer Protocol),可以实现流控、ack、重传等机制。
Baseband resource management,主要用于管理RF资源。
Link Manager
Link Manager主要负责创建、修改、释放蓝牙逻辑连接(Logical Link),同时也负责维护蓝牙设备之间物理连接(Physical Link)的参数。它的功能主要是通过Link Management Protocol(LMP,for BR/EDR)和Link Layer Protocol(LL,for LE)完成。
Device Manager
搜索附近的蓝牙设备
连接到其他的蓝牙设备
使得本地的蓝牙设备connectable和discoverable
控制本地蓝牙设备的属性(例如本地蓝牙设备的名字、link key等)
HCI(Host Controller Interface)
蓝牙系统分为Bluetooth Controller和Bluetooth Host两个大的block。它们之间通过HCI接口以HCI协议进行通信。
L2CAP
L2CAP位于Bluetooth Host中,包括两个子模块:
Channel Manager主要负责创建、管理、释放L2CAP channel。
L2CAP Resource Manager负责统一管理、调度L2CAP channel上传递的PDU(Packet Data Unit),以确保那些高QoS的packet可以获得对物理信道的控制权。
SMP(Security Manager Protocol)
SMP是一个点对点的协议,基于专用的L2CAP channel,用于生成加密(encryption)和识别(identity)用的密匙(keys)。
SDP(Service Discover Protocol)
SDP也是一个点对点的协议,基于专用的L2CAP channel,用于发现其它蓝牙设备能提供哪些profile以及这些profile有何特性。在了解清楚了其他蓝牙设备的profile以及特性之后,本蓝牙设备可以发起对自己感兴趣的蓝牙profile的连接动作
AMP Manager
基于L2CAP channel,和对端的AMP manager交互,用于发现对方是否具备AMP功能,以及收集用于建立AMP物理链路的信息。
GAP(Generic Access Profile)
GAP是一个基础的蓝牙profile,用于提供蓝牙设备的通用访问功能,包括设备发现、连接、鉴权、服务发现等等。
GAP 是所有其它应用模型的基础,它定义了在 Bluetooth 设备间建立基带链路的通用方法。还定义了一些通用的操作,这些操作可供引用 GAP 的应用模型以及实施多个应用模型的设备使用。GAP 确保了两个 蓝牙设备(不管制造商和应用程序)可以通过 Bluetooth 技术交换信息,以发现彼此支持的应用程序。
引用于:蜗窝科技