低能耗蓝牙4.0协议原理与实现方法

2012-07-25 07:16徐金苟
微型电脑应用 2012年10期
关键词:链路层状态机通信协议

徐金苟

0 引言

随着蓝牙技术由手机、游戏、耳机、便携电脑和汽车等传统应用领域向物联网、医疗等新领域扩展,市场对低功耗的要求越来越高。蓝牙4.0协议版本是在蓝牙3.0高速版本基础上增加了低能耗协议部分。嵌入式设备端在很多应用场景要求能耗非常低,传输速率要求也不高,对于这类设备,可以仅实现4.0协议中低能耗蓝牙部分,通过与支持双模的主机设备进行通信或者跟同类设备通信。

由于蓝牙4.0协议拥有极低的运行和待机功耗,使用一粒纽扣电池甚至可连续工作数年之久;同时还有低成本、跨厂商互操作性、3毫秒低延迟、AES-128加密等诸多特色,可以广泛应用于计步器、心律监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。所以,目前很多蓝牙厂商也都推出了符合蓝牙 4.0 版本的低功耗协议的蓝牙芯片。本文介绍蓝牙4.0低能耗部分协议即LE的技术原理、协议架构以及给出一个具体的实现方法。

1 协议原理

LE协议的底层与基础蓝牙协议底层基本相似,但在主机端,针对传感器网络应用推出了属性协议 ATT以及通用属性剖面GATT,具体协议分层结构,如图1所示:

图1 协议分层结构图

其中,基于逻辑链路与适配协议即L2CAP以上的部分可在主机端实现,这一部分可称为主机端部分,HCI层以下部分可称为芯片控制器层也可简称底层协议。下面我们对每层协议做一下描述。

(1)物理层(Physical Layer)

物理层采用调频技术减少干扰与信号衰减,从2.402~2.480 GHz均匀分为40个信道,每个信道宽2MHz;使用GFSK调制解调方式;输出功率为:0.01~10mw;传输速率1 Mb/s。提供3个固定的广播信道,广播数据用于建立连接以及发现设备,这样使得建立连接的时间可以压缩到3ms左右,大大提高了设备建立连接的效率。另外提供 37个数据信道采用自适应调频技术发送数据。

(2)链路层(Link Layer)

链路层功能是执行一些基带协议底层数据包管理协议。

链路层设备主要有待机、发起、扫描、连接、广播5种工作状态,状态转换图,如图2所示:

图2 状态转换图

待机状态不发送和不接受任何包,任何状态都可以进入待机状态。

广播状态在广播信道发送广播包并且监听可能的响应包,广播状态可以由待机状态进入。

扫描状态将会监听广播信道包,扫描状态可以从待机状态进入。

发起状态将会监听从特定设备发出的广播包并且发起链接请求作为响应,发起状态可从待机状态进入。

连接状态可以从发起状态或者广播状态进入,在连接状态下有主从两种角色。

当从发起状态进入连接状态时,发起连接请求,将会是主设备,当从广播状态进入连接状态时,将会是从设备。

链路层主要有两种重要的事件操作:扫描与建立链接。

设备扫描有被动扫描和主动扫描两种:

被动扫描是通过被动接收广播包得到设备信息。被动扫描过程,如图3所示:

图3 被动扫描

主动扫描是通过发送扫描请求得到扫描回应得到设备信息。主动扫描过程,如图4所示:

图4 主动扫描

而建立链接过程是通过发送链接请求包来建立设备链接。建立链接过程,如图5所示:

图5 建立连接流程图

(3)主机控制接口层(HCILayer)

主机控制接口与标准蓝牙技术相同,提供了主机与控制器层的通信方式与命令事件格式,重用标准蓝牙传输层接口如UART,USB等。

(4)逻辑链路与适配协议层(L2CAPLayer)

与标准蓝牙技术相同,为上层提供了数据封装业务,提供端到端的逻辑数据通信。

(5)安全管理层(Security Manager Layer)

定义了配对和密钥分发方法,提供其它层协议接口来安全的建立连接以及交换数据。安全管理层不涉及具体的BLE安全算法,只是提供一些接口,为节省功耗以及降低复杂性,具体安全算法可以通过在底层硬件实现。

(6)通用接入层(GAP Layer)

定义了通用的接口,供应用层调用底层模块,比如设备发现,建立连接相关的业务,同时封装了安全设置相关的API。

(7)属性协议层(ATT Layer)

属性协议允许设备以“属性”的形式向另外的设备暴露他的某些数据。在ATT协议里,暴露属性的称为Server 端,另外一端称为Client。

(8)通用属性剖面(GATT Profile)

GATT 层是一种具体使用属性协议的应用框架。GATT定义了属性协议应用的架构。在BLE协议中,应用中数据片段被称为“特征“, 而BLE中两个设备之间的数据通信就是通过GATT 子过程来处理的。

2 协议的实现方法

低能耗蓝牙是一种对数据传输速率要求不高的通信协议,在实现BLE数据协议时采用一种简单的分层协议架构。设计时可以将主机端与控制器端通过HCI 层分开实现。

这里,可以考虑采用一种通用的通信协议实现框架,该实现框架运行效率高,移植方便,并且可以运用到其他通信协议上。

首先,考虑一下一般通信协议需要考虑的主要实现策略:

(1)协议层次结构

分层结构是如果每层由一个任务来管理资源,其他层与之通信采用消息队列或者信号量等通信原语,这种结构层次较为清晰,由操作系统来负责调度和各层执行,但这种结构需要考虑系统任务切换时占用的开销。特别是对小型资源有限的嵌入式系统。

另外一种方法就是由一个任务来处理所有各层事物,这种方法可以减少任务切换的开销,但系统看起来结构不清晰,容易发生错误。

(2)Buffer 管理机制

通信协议数据Buffer的管理是一个难点,处理的不好会影响系统的效率。一种典型的应用是在不同层级之间采用数据分配、拷贝,然后释放,这种机制,结构清晰,但拷贝数据会影响系统的效率,如图6所示:

图6 内存拷贝方式

如果采用零拷贝的机制,在分配Buffer时预留所有头部和尾部区域,到各层通过填充相关信息,直到数据处理完毕,释放所分配的内存空间这种机制,将会有效提高系统的效率,如图7所示:

图7 内存无拷贝方式

(3)发送数据包与接收数据包机制

当有数据从应用层或者硬件到达的时候,通常有两种主要的策略:一种是通过周期性的查询的方式,另一种是通过中断或者事件触发。采用查询的方式可能会影响数据包的响应速度,而采用中断的方式将会打断任务进程。如果频繁的中断将会影响系统任务执行的效率。

(4)LE实现框架

我们基于LE协议的实现,主要考虑协议移植方便,要求效率高,代码层次清晰,设计了如下一种通信协议框架。这种协议框架是以状态机推动每层数据的处理与交互,各个模块都有一个完备的状态机实现,各模块之间通过事件来相互通信。各个状态机在一个任务里实现,从而减少了任务切换的开销。而 Buffer 的处理采用零拷贝的方式,通过分配预约资源对 Buffer 加以管理和分配,从而减少了内存拷贝占用CPU资源的开销。

对于主机端,协议的实现框架,如图8所示:

图8 主机端实现框架

通过各层的状态机推动系统的交互与运行。

而对于LE控制器层的实现,可分为3层:HCI 层、链路层以及基带层。协议框架,如图9所示:

图9 控制器端协议框架

HCI层提供了 HCI命令格式与各种命令分组,以及将事件通过 HCI传输层发送给上层应用程序。链路层相当于标准蓝牙中的链路管理层,对链路状态机进行维护,对链路信息进行管理,是底层BLE的核心。基带层主要是对硬件资源进行管理、调度。

主机控制器层对上层发下来的命令或者数据发送到链路层,链路层维护一个状态机,根据当前状态以及事件信息确定与基带层或者在本层进行处理;而基带层也维护了一个状态机,根据收到的事件以及数据包做出正确的响应。而对于基带层数据包的发送和接收,通过中断的方式,从而使数据包能够得到及时的处理,而且由于基带层和链路层状态机都在一个任务中执行,所以,中断的加入也不会导致任务的处理受到很大的影响。

(5)有限状态机

由于协议框架要求将各层抽象出一种状态机,所以状态机的实现决定了协议框架的好与坏。下面举例讨论一下状态机实现的基本方法:

先介绍两个重要的状态机实现的数据结构:

比如一个发送数据的状态转换图,如图10所示:

图10 状态转换图

初始状态为STATE1,当在此状态接收到主机送来的数据包,系统将会执行动作Send_CurData, 发送当前数据包,并且切换到STATE2状态, 当在STATE2状态下, 系统接收到回应的Ack, 发送下一个数据包,切换到STATE3状态,如果在STATE3状态下,接收到Ack确认, 并且没有数据包发送,回到状态STATE1状态。

这张状态图对应的表格为:

StateTypeTab StateTabForFSM[]= {/*CurState Event Action Return NextState */STATE1, Rx_data, SendCur, Reserved, STATE2 STATE2, RX_Ack, SendNext, Reserved, STATE3 STATE3, RX_Ack, Null, Reserved, STATE1 FsmType Fsm= {/* Start StateCount Pointer to FSM Table */STATE1, 3, StateTabForFSM

这样状态机就准备好了,现在的工作就是实现操作函数,来使得行为连贯以及状态机正确地迁移。具体到低能耗蓝牙协议,就是给每层设计一个完整的状态图。代码维护时对照状态表格和状态迁移图,就会非常容易理解协议和查找问题。

3 结论

通过对蓝牙4.0低能耗部分无线通信技术原理的介绍和以及通信协议的实现方法,读者可以了解LE协议的基本原理,以及分层架构的通信协议实现的一般方法和应对策略,从而为从事蓝牙技术或者其他通信技术的协议的工作者提供一定的参考。由于篇幅所限,本文没有对LE协议详细实现做过多描述。

[1]Bluetooth SIG.Bluetooth Specification Version 4.0.2010,06

[2]Bluetooth SIG.Core Specification V2.1+EDR of Bluetooth Specification. 2007,7

[3]Henrik Lindbom, Jonas Wigstein. A portable protocol stack framework for embedded systems. 2000

[4]Robin Heydon. ULP 开启全新无线应用.[j]电子设计应用 2007

[5]罗玮 一种新兴的蓝牙技术—超低功耗蓝牙技术[j]现代电信科技 2010

[6]金纯 编著. 超低功耗(ULP)蓝牙技术规范解析. [M]国防工业出版社. 2010,5

猜你喜欢
链路层状态机通信协议
基于多空间内存共享的数据链路层网络包捕获方法
卫星网络中的TCP 跨层技术研究
一种基于PCI接口的1394B总线的设计与实现
基于有限状态机的交会对接飞行任务规划方法
三段式状态机在单片机中的实现
基于NS-3的PLC多频通信协议仿真平台设计与实现
IEEE 1394事务层接口的设计与实现
基于风险分析的安全通信协议简化研究
RSSP-I、RSSP-Ⅱ及SAHARA三种安全通信协议实现技术简介
基于反熔丝FPGA的有限状态机加固设计