来自Wi-Fi专家的声音

 

蓝牙的话题(2)

撰写于:2012年10月31日
作者:silex Wi-Fi专家

蓝牙 4.0是在2011 年 6 月公开的,现阶段的蓝牙最新规格。而4.0的特点是新添加了「Low Energy(LE)」和「属性(ATT)」等规格,而本次就以这两点为重点进行解说。

另外,对上次解说进行一些订正。上次我把SCO数据包解说为‘带FEC的‘EV’数据包’和‘没有FEC的‘HV’数据包’,而正确的是

HV = 有FEC(但HV3除外),无重传控制
EV =没有FEC,有重传控制

(原报道已修改)。


关于蓝牙的版本和规格

首先希望明确的是「蓝牙 Low Energy(LE)」和「蓝牙 4.0」的定义并不同样。「蓝牙 LE」是在 蓝牙 4.0中新追加的新通信方式,“蓝牙4.0”是将以前的蓝牙版本所有规格(包括2.1中添加的高速模式EDR和3.0中添加的超高速模式HS)都包含在其中的规格。也就是说“蓝牙X.X”这种记载是协议规格而不是说明硬件规格,而关于硬件规格的扩张,是在版本的后缀添加“EDR”或者“HS”或“LE”来表示。举例说明如下:

「蓝牙 1.2」...1Mbps 的 蓝牙 (BDR)
「蓝牙 2.1」...1Mbps 的 蓝牙, SSP 的配对可对应扩展规格
「蓝牙 2.1+EDR」...除了上述内容外还可支持2Mbps/3Mbps 的EDR高速模式 
「蓝牙 3.0+EDR」...除了上述内容外还可支持扩展省电(EPC)模式
「蓝牙 3.0+HS」...除了上述内容外还可支持WiFi的超高速模式(HS)
「蓝牙 4.0+HS」....除了上述内容外还可支持GATT属性
「蓝牙 4.0LE」...可支持GATT属性、可支持LE模式(但是,BDR/EDR 兼容性状态无法从该表示法中读取)

……是不是有点混乱呢。这种对应关系在2.1(+EDR)之前比较单纯,但在3.0模式增加之后就渐渐变得模糊,即使自称是“蓝牙3.0”,也有不支持HS、EDR的产品。如果是符合4.0规格的全标准,那么仅在PHY层就有4种(BDR, EDR, HS,LE)规格,所以如果只写了“支持蓝牙4.0”的话,会不知道到底支持哪种通信模式。即便如此,要是全部都罗列并写成“蓝牙4.0LE+EDR+HS”也是很麻烦的。
也许是蓝牙 SIG考虑到这是一个问题,所以决定采用“蓝牙Smart”(LE单功能设备)和“蓝牙Smart Ready”(同时支持LE和传统蓝牙的设备)这一术语并致力于普及此项技术。另外,“传统蓝牙”并不是正式的用语,在这篇文章中,为了方便起见,我将2.1以前的BDR/EDR蓝牙称为“传统蓝牙”。


PHY/MAC 层的区别

那么,蓝牙  LE原本是诺基亚公司的开发代码为「Wibree」的开发途中的独自无线规格,而之后蓝牙 SIG采用此规格后才成为了LE。我想也是因为有此种经历,所以旧的蓝牙和LE之间没有直接的兼容性。分组包长和地址长度还有CRC和加密方式都是不一致的,且“跳频”“微微网”“主从机”等等的都是似是而非的概念。

对于旧的蓝牙、1对主从机使用的通信频率是以625 μs为单位在79个1MHz宽的信道上传输(使用伪随机数)。蓝牙的调频也是做的比较彻底,且在设备搜索时的咨询步骤(Inquiry)的频率也是属于跳频。这是因为蓝牙是Personal Area Network (PAN)的一种,在蓝牙中很多设备被认为是高密度的,所以被认为是使用了扩频(Spread Spectrum)来避免频率冲突的一种设计。
但是结果是旧的蓝牙中,在设备搜索时也需要主从之间的跳跃模式同步过程,对未配对的设备搜索最长需几秒,对已配对的设备的重新连接最短只需花费0.1秒左右的时间。这可能对于手机的头戴设备等应用来说是可以接受的时间,但对于传感器网络等需要“几秒就发送一次十几字节左右数据”的应用来说,在耗电量和响应时间方面是不利的。

蓝牙LE将信道数量从79减少到40,降低了对频率精度的要求,40个信道中有3个是作为“Advertise Channel”来预约,而设备检测是经常使用这3个频率来简化了规格。因此,设备的搜索~连接~通信所需的延迟时间被缩短到了不到10毫秒。

另外,传统蓝牙在运行中会一直切换频率(注)。因此蓝牙芯片必须配备高精度的计时器和高速的频率切换电路,而这也成为降低芯片价格和耗电量的障碍。在蓝牙 LE中,在进行主从的数据包交换时,每当进行“连接”的时候,根据事先交换的“Connection Interval”时间单位(1.25毫秒的整数倍)来变更为可切换频率的“缓慢跳跃”,并预计可放宽调制、频率精度要求的同时降低价格和耗电量。

(※注)但是作为例外,在多时隙分组的发送和接收过程中,频率是固定的。

如我上次介绍的,传统蓝牙有ACL(DM/DH)和SCO(HV/EV)、多插槽和2倍、3倍速(EDR)等多种分组类型,而蓝牙 LE只有一种数据包类型(数据长度2 ~ 39字节)。错误自校正的FEC功能也消失了,取而代之的是错误检测功能的CRC从16 bit强化到24 bit。作为传统蓝牙的一大制约“1台主机可同时连接通信的子机数最多为7台”这种3bit的链接地址长度扩张为32bit,并可以连接在实用上无限制的从属设备。另外加密算法从E3变成了新的AES-CCM,也追加了旧的蓝牙没有的数据篡改防止机构(MIC)。

具体规格就不一一列举了,“传统蓝牙”和“蓝牙 LE”作为通信规格是不同的,这一点请大家注意。但是如果你从上层来看,你可以使用48bit MAC地址(Bluetooth Device Name)来指定通信对象,使用L2CAP来交换数据的API是相同的。

属性

属性是蓝牙4.0中新添加的规范。 由于它是适用于“蓝牙 4.0”而不是“蓝牙 LE”的扩展,因此该属性可适用于传统蓝牙和 LE。
上次介绍过,属性是一种以类似于SNMP的“对象单元”的“GET/SET”作为基本操作单元的通信规范。属性名称由 128 位 UUID 标识(*注),具有“值”(称为“特性”)的属性还附有“格式”信息。关联一个功能相关的属性可以总结“服务”为单位,这也和SNMP的MIB很相似(当然,想做同样的事情,做出同样的东西也是理所当然的)。

(※注)但是,由于几乎没有必要使用128bit全部进行识别,所以大多被视为省略了蓝牙共通的上位112bit的16bit的缩短UUID。另外,协议上的识别值是在与UUID不同的16位“句柄”下进行的。

属性的基本协议被称为“ATT”,通过属性的组合来描述特定功能(服务)的体系被称为“GATT(Generic Attribute Profile)”。在GATT之前的蓝牙中,每个特性文件都有大致不同的数据结构、分组格式和通信程序。但通过GATT就可以把“万步计”“体温计”“血压计”等单一功能的设备在共同的框架内使用,而这在上期也介绍过了(注)。截至2012年10月,GATT上定义了大约20种配置文件。

(※注)那么为何最初的时候不这么做呢、在蓝牙1.0被设计出的 1994年,与GATT相似的SNMP已经有了充分的业绩…虽然这么想,但也有其他的原因吧。

再重复一遍,属性(GATT 配置文件)并不是「蓝牙 LE」特有的,而是可以安装在传统蓝牙的规格。这也是为了在今后将要制定的设备规格在旧版本的和LE之间通用,同时也为了可支持的设备较少的LE能够顺利过渡。

蓝牙 LE的现实和课题

这样看来,蓝牙LE不仅仅是一个“低功耗版本的蓝牙”,而是一个同名但内容不同的标准。 正如“低功耗”这个名字所暗示的那样,低功耗是主要卖点,但过去 20 年来蓝牙操作也有了改进,例如易于实施、增强的安全性以及同时连接数量的增加。基于反思,可以说它是一个试图通过大胆省略大部分兼容性来应对新时代的标准。

那么,蓝牙LE实际上普及到什么程度呢?...至少在2012年10月,支持LE的市场产品的数量用一双手也数的过来。
蓝牙的后续规格是要纳入省电版本,这个消息在2009年的开始就已经在网络上大肆宣传了。虽然一些记载中有写道“支持的产品最早在年内发售”,像是这种预想一般都是不准的…从那以后,每年都有人说“快的话年内”,但3年过去了,支持蓝牙LE的产品几乎还没有出现在市场上。不过,作为新技术市场领导者的苹果热衷于支持LE, iPhone (4Gs以后),由于iPad (3G以后)等产品都支持LE的功能,所以有人说2012年“快的话年内”就会陆续推出支持LE的设备。另外,微软也在Windows 8兼容的标志认证条件中包含了“蓝牙4.0 +LE兼容”。

总结

蓝牙LE到底会不会在2012年(甚至2013年)实现飞跃性的提高吗?我个人认为,蓝牙LE是一项有前途且实用的技术,最重要的是有苹果iPhone这样强大的平台支持,所以我认为是值得期待的(更直接地说,我认为比竞争对手Zigbee、ANT+、Z-Wave的胜率更高)。但是,蓝牙LE的未来也不是一帆风顺。改善传统蓝牙不受好评的合格标志审查的费用和期限,在落后的Windows和Linux上支持蓝牙4.0 (GATT客户端/应用程序的实现)的充实,为了避免多种蓝牙规范并存的混乱而开展更多的启蒙活动,等等。如果不完成这样的课题,骄傲自满地认为“有苹果站在我们这边,就等于赢了”的话,很有可能会出现问题而大受打击。UWB曾经因为“英特尔站在我们这边”而将自己的命运交给无线USB,结果导致两败俱伤,我认为这可能就会导致与UWB所犯的错误是一样的。

那么虽然顺序有点反了,但在下一期我们会讲解关于“超高速模式”蓝牙 3.0+HS的一些事项。