关于低功耗蓝牙技术连接的技术细节
低功耗蓝牙技术(Bluetooth® low energytechnology)是蓝牙经典标准的演进,专注于为设备间提供可靠、高效且低功耗的链路连接。它具有超低的功耗,满足超长的续航能力。2014年年底,蓝牙技术核心规范4.2版本正式发布。在该版本中,引入了最新的隐私保护机制,此外,该版本还大大提升了低功耗蓝牙技术设备间数据传输的速度与可靠性。由于低功耗蓝牙技术封包容量增加,设备之间的数据传输速度可较蓝牙4.1版本提升2.5倍。数据传输速度与封包容量的增加能够降低传输错误发生的机率并减少电池能耗,进而提升连网的效率。本文就低功耗蓝牙技术设备之间的连接进行详细的讲解。希望能帮助开发者设计出更多有创新性的产品和解决方案。
在低功耗蓝牙技术建立连接的过程中,设备都是成对出现的:master和slave设备。如果master希望与slave建立连接,master就需要发起连接请求(ConnecTIonRequest,CONNECT_REQ),因此master可以称之为连接发起者;同时,slave必须是可连接的并且具有解析连接请求CONNECT_REQ的能力,slave可以称之为广播者。图1是连接请求CONNECT_REQ的帧结构。
图1 CONNECT_REQ帧结构
其中,InitA是连接发起者的蓝牙设备地址,长度为6字节;AdvA是广播者的蓝牙设备地址,长度为6字节。除了InitA和AdvA之外,帧格式中最为重要的部分则是LLData,这一部分包含了在连接建立过程中所需要使用的有意义的参数。
为了更好的理解连接请求CONNECT_REQ,我们可以在日常生活中找到类似的一个例子,帮助我们理解它的含义。读者们很多应该都有过工作经验,在开始新的工作之前,都需要和雇主签署一份劳动合同,而CONNECT_REQ就是一份由"雇主"master提供的"劳动合同",只需经过"雇员"slave确认,这份"合同"就开始生效,低功耗蓝牙技术的连接也就建立了。接下来我们就对"合同"中的各项条款逐条进行分析(如图2所示)。
图2 LLData示意图
(1)接入地址(AA:Access Address)
这份合同的第一条款就是为雇员分配一个公司内部的唯一识别码,类似于工号,雇员可以在公司内部使用这一工号;当雇员离开公司之后,唯一识别码自动失效;即使是这一雇员再次加入到这家公司,他/她的新工号也与旧的工号不同。类似的,在两个低功耗蓝牙技术设备建立连接之前,master设备负责生成接入地址,这一地址类似于一个4字节的随机数,当连接建立之后,master和slave都使用这一接入地址进行通信;当连接断开之后,接入地址自动失效。
(2)CRCInit(CRC初始值)
这份"合同"的第二条款是CRCInit,它就是雇员在公司内部的一个密钥,通过这个密钥,雇员可以访问公司内部的资源。对于低功耗蓝牙技术设备,master和slave使用CRCIinit来验证数据包的完整性。
(3)WinSize和WinOffset
合同的第三条款中规范了雇员首次来公司报到的时间以及今后每次工作的时长。WinSize和WinOffset在低功耗蓝牙技术连接中,也做了类似的定义。WinOffset定义了在CONNECT_REQ命令之后的一个通信窗口的偏移量,如图3所示。在slave设备收到CONNECT_REQ之后,slave设备需要占用一些时间、根据LLData参数进行一些相关的配置,因此,WinOffeset为slave设备进行此种操作提供了时间,transmitWindowOffset= WinOffset&TImes;1.25 ms。WinSize定义了设备每次开启收发机的窗口时间,无论是master还是slave,它们都遵循WinSize的定义,窗口时间transmitWindowSize=WinSize&TImes;1.25 ms。
因此,在CONNECT_REQ之后,第一个由master发送到slave的数据帧,我们称之为"锚点"(如图3所示),因为之后的所有的连接事件都以这一时刻为基准,呈现周期性变化。从红色框图中我们可以看到,第一个数据帧的时刻不能早于(1.25ms+transmitWindowOffset),同时也不能晚于(1.25 ms + transmitWindowOffset + transmitWindowSize)。
图3 发起连接时序图
(4)Interval, Latency & TImeout
一般情况下,人们的工作时间是朝九晚五,一周工作五天。但是在低功耗蓝牙技术的连接机制当中,我们采用了更加灵活的"弹性工作制"。对于低功耗蓝牙技术连接的弹性工作制,这里有三个参数需要了解,Interval,Lantency和Timeout。
图4 连接事件时序图
在连接建立之后,master和slave之间的数据交互我们可以称之为连接事件,连接事件的发生周期(connInterval)则是由Interval参数来进行设定,connInterval= Interval×1.25 ms, connInterval的取值范围则是在7.
- 移动芯片变革趋势及设计注意事项(03-20)
- 一种低功耗宽频带LDO线性稳压电路设计(07-29)
- 低功耗 ADC:凌力尔特新方法降低整个信号链路的功耗(11-22)
- 针对低功耗的设计(04-18)
- 低功耗无线检测(07-16)
- 浅谈低功耗控制电路和程序设计思路(10-13)