蓝牙
2021-02-01 22:18:00 阿炯

蓝牙:Bluetooth,一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网PAN。其使用短波特高頻UHF无线电波,经由2.4至2.485 GHz的ISM頻段来进行通信。1994年由电信商爱立信Ericsson发展出这个技术。它最初的设计,是希望创建一个RS-232数据线的无线通信替代版本。它能够链接多个设备,克服同步的问题。

蓝牙技术目前由蓝牙技术联盟SIG来负责维护其技术标准,其成员已超过三万,分布在电信、电脑、网络与消费性电子产品等领域。IEEE曾经将蓝牙技术标准化为IEEE 802.15.1,但是这个标准已经不再继续使用。 蓝牙技术联盟英语:Bluetooth Special Interest Group,缩写为SIG拥有蓝牙的商标,负责制定蓝牙规范、认证制造厂商,授权他们使用蓝牙技术与蓝牙标志,但本身不负责蓝牙设备的设计、生产及贩售。


蓝牙技术最初由爱立信创制。技术始于爱立信公司的1994方案,它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一组统一规则标准化协议,以解决用户间互不兼容的移动电子设备。1997年前爱立信公司以此概念接触了移动设备制造商,讨论其项目合作发展,结果获得支持。

1998年5月20日,索尼爱立信、国际商业机器、英特尔、诺基亚及东芝公司等业界龙头创立“特别兴趣小组”Special Interest Group,SIG,即蓝牙技术联盟的前身,目标是开发一个成本低、效益高、可以在短距离范围内随意无线连接的蓝牙技术标准。并于当年推出0.7规格,支持Baseband与LMPLink Manager Protocol通讯协定两部分。1999年推出先后0.8版,0.9版、1.0 Draft版,1.0a版、1.0B版。1.0 Draft版,完成SDPService Discovery Protocol协定、TCSTelephony Control Specification协定。1999年7月26日正式公布1.0版,确定使用2.4GHz频谱,最高资料传输速度1Mbps,同时开始了大规模宣传。和当时流行的红外线技术相比,蓝牙有着更高的传输速度,而且不需要像红外线那样进行接口对接口的连接,所有蓝牙设备基本上只要在有效通讯范围内使用,就可以进行随时连接。

当1.0规格推出以后,蓝牙并未立即受到广泛的应用,除了当时对应蓝牙功能的电子设备种类少,蓝牙设备也十分昂贵。2001年的1.1版正式列入IEEE标准,Bluetooth 1.1即为IEEE 802.15.1。同年,SIG成员公司超过2000家。过了几年之后,采用蓝牙技术的电子设备如雨后春笋般增加,售价也大幅下降。为了扩宽蓝牙的应用层面和传输速度,SIG先后推出了1.2、2.0版,以及其他附加新功能,例如EDREnhanced Data Rate,配合2.0的技术标准,将最大传输速度提高到3Mbps、A2DPAdvanced Audio Distribution Profile,一个控音轨分配技术,主要应用于立体声耳机、AVRCPA/V Remote Control Profile等。Bluetooth 2.0将传输率提升至2Mbps、3Mbps,远大于1.x版的1Mbps实际约723.2kbps。


蓝牙用于在不同的设备之间进行无线连接,例如连接计算机和外围设备,如:打印机、键盘等,又或让个人数码助理PDA与其它附近的PDA或计算机进行通信。具备蓝牙技术的手机可以连接到计算机、PDA甚至连接到免持听筒。事实上,根据已订立的标准,蓝牙可以支持功能更强的长距离通讯,用以构成无线局域网。每个Bluetooth设备可同时维护8个连接[来源请求]。可以将每个设备配置为不断向附近的设备声明其存在以便创建连接。另外也可以对二个设备之间的连接进行密码保护,以防止被其他设备接收。

蓝牙的标准是IEEE 802.15.1,蓝牙协议工作在无需许可的ISMIndustrial Scientific Medical频段的2.45GHz,最高速度可达723.1kb/s。为了避免干扰可能使用2.45GHz的其它协议,蓝牙协议将该频段划分成79个频道带宽为1MHz每秒的频道转换可达1600次。


蓝牙技术分为基础率/增强数据率BR/EDR和低耗能LE两种技术类型。其中BR/EDR型是以点对点网络拓扑结构创建一对一设备通信;LE型则使用点对点一对一、广播一对多和网格多对多等多种网络拓扑结构。蓝牙技术已经应用到超过3万个联盟技术成员的82亿件产品之中。依靠蓝牙支持,电脑或PDA能通过手机的调制解调器实现拨号上网。可以在一定距离内架设电脑间的无线网络或数个以太网之间的无线桥架。蓝牙设备之间可以传输文件。


蓝牙协议堆栈

蓝牙协议堆栈依照其功能可分四层:
核心协议层HCI、LMP、L2CAP、SDP
线缆替换协议层RFCOMM
电话控制协议层TCS-BIN
选用协议层PPP、TCP、IP、UDP、OBEX、IrMC、WAP、WAE


规格和功能


第一代

早期的1.0和1.0B版本存在多个问题,多家厂商指出他们的产品互不兼容。同时,在两个设备“链接”handshaking的过程中,蓝牙硬件的地址BD_ADDR会被发送出去,在协议的层面上不能做到匿名,造成泄漏资料的危险,令一些用户却步。

蓝牙1.2版本可以向下兼容1.1版,其主要改进包括:
匿名方式:屏蔽设备的硬件地址BD_ADDR,保护用户免受身份嗅探攻击和跟踪。从1.1版开始已经可以实现硬件匿名,但未被实施,因此对普通消费者来说还是没有此功能。
自适应频率跳跃AFH,Adaptive Frequency Hopping:通过避免使用跳跃序列中的拥挤频率,从而改善对无线电干涉的抵抗。
更高的实际传输速度,实际测试约为90KB/S721Kbps左右。
L2CAP层引入了流量控制和错误纠正机制

第二代

蓝牙2.0+EDR版加入了“非跳跃窄频通道”Non-hopping narrowband channel。因为不需要与每个设备交换应答信号,这种通道可以用来将各种器件的蓝牙服务概要同时广播到巨量的蓝牙器件。应答信号交换过程当前需要大约一秒。实时公共交通时刻表、基本的交通畅通性信息和高级交通指向指示等未加密信息可以以高速度发送给设备。更高的连接速度,支持多个速度水平。

2007年7月26日,蓝牙技术联盟通过了蓝牙核心规范2.1+EDR,向下对1.2版本完全兼容,并增加了Sniff省电功能,使得适配器与设备的联系时间延长到0.5秒,能节约不小电量;增强功能有简单安全配对SSP,这改善了蓝牙设备的配对经验,同时提升了使用和安全强度。

第三代

2009年4月21日,蓝牙技术联盟颁布了蓝牙核心规范3.0版3.0+HS,是一种全新的交替射频技术。蓝牙3.0+HS提高了资料传输速率,集成802.11PAL最高速度可达24Mbps。是蓝牙2.0速度的8倍。此外,引入了增强电源控制,实际空闲功耗明显降低。

第四代

2010年7月7日,蓝牙技术联盟推出了蓝牙4.0规范。其最重要的特性是支持省电。

Bluetooth 4.0,协议组成和当前主流的Bluetooth h2.x+EDR、还未普及的Bluetooth h3.0+HS不同,Bluetooth 4.0是Bluetooth从诞生至今唯一的一个综合协议规范,还提出了“低功耗蓝牙”、“传统蓝牙”和“高速蓝牙”三种模式。

其中:高速蓝牙主攻数据交换与传输;传统蓝牙则以信息沟通、设备连接为重点;低功耗蓝牙顾名思义,以不需占用太多带宽的设备连接为主。前身其实是NOKIA开发的Wibree技术,本是作为一项专为移动设备开发的极低功耗的移动无线通信技术,在被SIG接纳并规范化之后重命名为Bluetooth Low Energy后简称低功耗蓝牙。这三种协议规范还能够互相组合搭配、从而实现更广泛的应用模式,此外,Bluetooth 4.0还把蓝牙的传输距离提升到100米以上低功耗模式条件下。
    分Single mode与Dual mode。
    Single mode只能与BT4.0互相传输无法向下兼容与3.0/2.1/2.0无法相通;Dual mode可以向下兼容,可与BT4.0传输也可以跟3.0/2.1/2.0传输
    超低的峰值、平均和待机模式功耗,覆盖范围增强,最大范围可超过100米。
    速度:支持1Mbps数据传输率下的超短数据包,最少8个八组位,最多27个。所有连接都使用蓝牙2.1加入的减速呼吸模式sniff subrating来达到超低工作循环。
    跳频:使用所有蓝牙规范版本通用的自适应跳频,最大程度地减少和其他2.4 GHz ISM频段无线技术的串扰。
    主控制:可以休眠更长时间,只在需要执行动作的时候才唤醒。
    延迟:最短可在3毫秒内完成连接设置并开始传输数据。
    健壮性:所有数据包都使用24-bit CRC校验,确保最大程度抵御干扰。
    安全:使用AES-128 CCM加密算法进行数据包加密和认证。
    拓扑:每个数据包的每次接收都使用32位寻址,理论上可连接数十亿设备;针对一对一连接优化,并支持星形拓扑的一对多连接;使用快速连接和断开,数据可以在网状拓扑内转移而无需维持复杂的网状网络。

苹果 iPhone 4S 是第一款支持蓝牙 4.0 标准的智能手机。2013年底,蓝牙技术联盟推出了蓝牙4.1规范,其目的是为了让 Bluetooth Smart 技术最终成为物联网(Internet of Things)发展的核心动力。此版本为蓝牙4.0的软件更新版本,搭载蓝牙4.0设备的终端可通过软件更新获得此版本。对于开发人员而言,该更新是蓝牙技术发展史上一项重要的进步。该更新提供了更高的灵活性和掌控度,让开发人员能创造更具创新并催化物联网IOT发展的产品。

支持多设备连接。增加设置设备间连接频率的支持。制造商可以对设备设置连接进行设置,使得设备可以更加智能的控制设备电量。

2014年12月,蓝牙技术联盟推出了蓝牙4.2规范。

第五代

蓝牙5.0在2016年6月发布。在有效传输距离上将是4.2LE版本的4倍理论上可达300米,传输速度将是4.2LE版本的2倍速度上限为24Mbps。蓝牙5.0还支持室内定位导航功能结合WiFi可以实现精度小于1米的室内定位,允许无需配对接受信标的数据比如广告、Beacon、位置信息等,传输率提高了8倍,针对物联网进行了很多底层优化,力求以更低的功耗和更高的性能为智能家居服务。开启「物联网」时代大门。

在低功耗模式下具备更快更远的传输能力,传输速率是蓝牙 4.2 的两倍速度上限为 2Mbps,有效传输距离是蓝牙 4.2 的四倍理论上可达 300 米,数据包容量是蓝牙 4.2 的八倍。Mesh 网状网络是一项独立研发的网络技术,它能够将蓝牙设备作为信号中继站,将数据覆盖到非常大的物理区域,兼容蓝牙 4 和 5 系列的协议。而 Mesh 网络能够使设备实现「多对多」的关系。Mesh 网络中每个设备节点都能发送和接收信息,只要有一个设备连上网关,信息就能够在节点之间被中继,从而让消息传输至比无线电波正常传输距离更远的位置。

2019年1月,蓝牙技术联盟推出了蓝牙5.1规范。

2020年1月,蓝牙技术联盟推出了蓝牙5.2规范。


蓝牙BLE详解

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。很多人对蓝牙的认识还很局限于手机领域,其实蓝牙的应用已经远远不止于此。过去几年里,蓝牙的增长量就达到了80%,当然,低功耗蓝牙的出现也起到关键的作用,相信未来蓝牙会开创一个可交互的物联世界。


标准分类

蓝牙4.0标准包括传统蓝牙模块部分和低功耗蓝牙模块部分,是一个双模标准。低功耗蓝牙也是建立在传统蓝牙基础之上发展起来的,并区别于传统模块,最大的特点就是成本和功耗降低,应用于实时性要求比较高。


BLEBluetooh Low Energy蓝牙低能耗技术是短距离、低成本、可互操作性的无线技术,它利用许多智能手段最大限度地降低功耗。

BLE技术的工作模式非常适合用于从微型无线传感器每半秒交换一次数据或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常少通常几个字节,而且发送次数也很少例如每秒几次到每分钟一次,甚至更少。


BLE协议栈的结构和配置

1、协议有两个部分组成:Controller和Host

2、Profiles和应用总是基于GAP和GATT之上

3、在单芯片方案中,Controller和Host,profiles,和应用层都在同一片芯片中

4、在网络控制器模式中,Host和Controller是在一起运行的,但是应用和profiles在另外一个器件上,比如PC或者其他微控制器,可以通过UART,USB进行操作

5、在双芯片模式中,Controller运行在一个控制器,而应用层,profiles和Host是运行在另外一个控制器上


BLE设备连接状态流程图


BLE协议栈各层功能机制

低功耗蓝牙体系结构


如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。可以看出BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头header和帧尾tail中。具体来说,BLE协议栈主要由如下几部分组成:

PHY层Physical layer物理层。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。

LL层Link Layer链路层。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个link连接,就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT。

HCIHost controller interface。HCI是可选的,HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。

GAP层Generic access profile。GAP是对LL层payload有效数据包如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。

L2CAP层Logic link control and adaptation protocol。L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。

SMPSecure manager protocol。SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。

ATTAttribute protocol。简单来说,ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。

GATTGeneric attribute profile 。GATT用来规范attribute中的数据内容,并运用group分组的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品。


BLE蓝牙模块主要应用领域

1、移动扩展设备

2、汽车电子设备

3、健康医疗用品:心跳带、血压计等

4、定位应用:室内定位、井下定位等

5、近距离数据采集:无线抄表、无线遥测等

6、数据传输:智能家居室内控制、蓝牙调光、打印机等


BLE协议栈详解

协议概述

所谓协议,即将指定的字节按照一定的顺序排列起来,以便他人使用自己的设备时,能通过该协议同其他设备进行通信。协议一特点,就是有固定的帧格式,通过该格式发送,接收者通过解读帧格式,进而得到新息内容;

BLE连接过程

一般通信协议,一类通信是直接发生数据,当设备接送到数据时,直接对数据进行解析,当接受到的数据合法时,即为有效数据,该类型的通信协议,主要用在有线通信协议中,比如Modbus,Can通常采用的即为该类型的通信方式。

另一类通信协议,则需要新建立连接,当双方连接建立成功了方可通信,例如TCP、BLE;BLE协议在需要进行通信时,即需要向外发送广播信号,告诉接收者,即将和它进行通信,接受者接收到广播内容后,确认是与自己通信,于是向广播者发送一响应信息,这样当广播者和接受者都有了对方的身份信息时,即表示双方连接成功。
因此,在连接过程中,必定有相应的广播帧格式。在BLE通信过程中,假设设备A需要连其他设备假设为B,则A需要不断地发送广播信号此过程一般有一个时间间隔,在没发送广播数据时间内,芯片处于低功耗状态,每发送一次广播包,称之为一次广播事件。

广播帧格式


前导:
是一个8比特的交替序列
接入地址的第一个比特为0:01010101
接入地址的第一个比特为1:10101010
接入地址:广播帧为固定地址:0x8E89BED6低字节在前

广播报文的报头:
包含4bit广播报文类型、2bit保留位、1bit发送地址类型和1bit接收地址类型。

广播报文类型:


发送地址类型:
0: 公共地址
1:随机地址

长度:广播报文的长度域包含8个比特,有效值的范围是6~37
数据:广播者地址(6个字节)+广播数据31个字节
校验:3个字节,为CRC校验。
广播数据: 分为有效数据和无效数据


有效数据部分:
包含N个AD Structure,每个AD Structure由Length,AD Type和AD Data组成。其中:
Length:AD Type和AD Data的长度。
AD Type:指示AD Data数据的含义,详见此处


BLE连接建立过程

1. BLE广播与扫描

设备B不断发送广播信号给手机Observer,如果手机不开启扫描窗口,手机是收不到设备B的广播的,如下图所示,不仅手机要开启射频接收窗口,而且只有手机的射频接收窗口跟广播发送的发射窗口匹配成功,而且广播射频通道和手机扫描射频通道是同一个通道,手机才能收到设备B的广播信号。也就是说,如果设备B在37通道发送广播包,而手机在扫描38通道,那么即使他们俩的射频窗口匹配,两者也是无法进行通信的。由于这种匹配成功是一个概率事件,因此手机扫到设备B也是一个概率事件,也就是说,手机有时会很快扫到设备B,比如只需要一个广播事件,手机有时又会很慢才能扫到设备B,比如需要10个广播事件甚至更多。


2. 建立连接connection establishment

根据蓝牙spec规定,advertiser发送完一个广播包之后150usT_IFS,advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,手机在第三个广播事件的时候扫到了设备B,并发出了连接请求CONN_REQ(CONN_REQ又称为CONNECT_IND)。



注:图中M代表手机,S代表设备B,M->S表示手机将数据包发给设备B,即手机开启Tx窗口,设备B开启Rx窗口;S->M正好相反,表示设备B将数据包发给手机,即设备B开启Tx窗口,手机开启Rx窗口。

如图所示,手机在收到A1广播包ADV_IND后,以此为初始锚点这个锚点不是连接的锚点,T_IFS时间后给Advertiser发送一个connection request命令,即A2数据包,告诉advertiser我将要过来连你,请做好准备。Advertiser根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:
Transmit window offset,定义如上图示

Transmit window size,定义如上图所示

connect_req数据包完整定义如下所示  


connect_req其实是在告诉advertiser,手机将在Transmit Window期间发送第一个同步包P1给你,请在这段时间里把你的射频接收窗口打开。设备B收到P1后,T_IFS时间后将给手机回复数据包P2ACK包。一旦手机收到数据包P2,连接即可认为建立成功。当然,实际情况会比较复杂,手机有可能收不到P2,这个时候手机将持续发送同步包直到超时时间supervision timeout到,在此期间只要设备B回过一次ACK包,连接即算成功。所以一旦P1包发出,主机手机即认为连接成功,而不管有没有收到设备的ACK包。这也是为什么在Android或者iOS系统中,应用经常收到连接成功的回调事件 该回调事件就是基于 P1包有没有发出,只要P1包发出,手机即认为连接成功,而不管有没有收到设备的ACK包 ,但实际上手机和设备并没有成功建立连接。后续手机将以 P1为锚点原点,Connection Interval为周期,周期性地 给设备B发送数据包Packet,Packet除了充当数据传送功能,它还有如下两个非常重要的功能:

同步手机和设备的时钟,也就是说,设备每收到手机发来的一个包,都会把自己的时序原点重新设置,以跟手机同步。

告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者手机称为Master或者Central,把被连接者之前的Advertiser称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能在规定的时间把自己的数据回传给Master。

3. 连接失败

有如下几种典型的连接失败情况:

如步骤2图所示,如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败。此时应该排查master那边的问题,看看master为什么没有在约定的时间把P1发出来。

如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去或者没有在超时时间内把P2回过去,那么连接也会失败。此时应该排查slave这边的问题,看一看slave为什么没有把P2回过去

如果master把P1发出来了,slave也把P2回过去了,此时主机或者从机还是报连接失败,这种情况有可能是软件有问题,需要仔细排查master或者slave的软件。还有一种比较常见的连接失败情况:空中射频干扰太大。此时应该找一个干净的环境,比如屏蔽室,排除干扰后再去测试连接是否正常。


数据帧格式


连接成功后,双方将可以互相发送数据,那么将涉及到其数据帧格式:

字段释义:
LLID:表示此包数据是 LL Date PDU 还是 LL Control PDU
    00b: Reserved
    01b: LL Date PDU:Continuation fragment of L2CAP             message, or an Empty PDU.
    10b: LL Date PDU:Start of an L2CAP message or a             complete L2CAP message with no fragmentation.
    11b: LL Control PDU

MIC Message Integrity Check:信息完整性检测。涉及到加密操作,上图中是用虚线表示的,并不是一定要有此项。
MD:这个标志位是用来通知对方设备自己还有其他数据准备发送。0 表示没有更多数据发送,1 表示有更多数据准备发送。这样,只要还有数据需要发送,连接事件会自动扩展。一旦不再有数据发送,连接事件立即关闭。

Note:如何区分是确定包、新包还是重发包?
SN:只有一个 bit 位,所以值是在 0 和 1 之间进行切换。如果序列号与之前的一样,则为重传报文,如果序列号和之间的不同,则为新报文。
NESN:预期序列号,它是接收方希望接到的下一包的序列号,也就是数据包的确认标志。当设备接收到序列SN为 0 的报文后,在发送给对方的数据包中,应将 NESN 设为 1,这样对方接收到这个包后,会发送一个新的数据包过来,否则就会重发上一次序列号为 0 的包。这个标志可以用来判断数据包是否被正确接收还是需要重传。


本文总结互联网,感谢原作者。