系统设计通过使用CC2541芯片所具有的蓝牙4.0 BLE协议实现蓝牙设备的互联以及无线数据的发送。TI公司推出的蓝牙4.0 BLE协议栈[9]包含两部分:主机和控制器。协议栈的实现方式采用分层的思想,控制器部分包括物理层、链路层、主机控制接口层;主机部分包括逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层、通用属性配置文件层;上层可以调用下层提供的函数来实现需要的功能。蓝牙4.0 BLE协议栈的结构如图7所示
图7 BLE协议栈的结构
BLE协议栈具有结构简单,兼容性强等特点,开发软件主要包括五个部分:OSAL、HAL、配置文件、BLE协议栈和应用程序。PHY层采用1Mbps自适应跳频技术,运行在免证的2.4GHz频段;LL层为RF控制器,控制设备处于准备、广播、监听/扫描、初始化、连接五种状态中一种。五种状态切换可以描述为:未连接时,设备广播信息,另外一个设备一直处于监听或扫描状态,当两个设备连接初始化,设备就连接上了。发起的设备为主设备,接受的设备为从设备,主设备和从设备原则上不能切换,本系统设计数据显示终端为主机设备,温湿度采集节点为从机设备。HCI层为接口层,向上为主机提供软件应用程序接口(API),对外为外部硬件控制接口,本设计调试阶段采用串口进行调试;L2CAP层提供数据封装服务;SM层提供配对和密匙分发,实现安全连接和数据交换;ATT层负责数据检索的角色;GATT层负责处理与应用打交道,负责向下把检索任务子进程交给ATT,该层是蓝牙系统开发比较关键的部分,主要通过特性值来和各层进行数据传输交流;GAP层对上提供应用程序接口,对下管理各级职能部门,尤其是指示LL层五种状态切换,该层是蓝牙系统开发关键部分,控制各节点在系统里面扮演的不同角色。
蓝牙4.0 BLE协议栈中有3个变量至关重要[10],这几个参量贯穿于整个蓝牙温湿度系统设计。
1、tasksCnt:该变量保存了任务的总个数。该变量的声明为“uint8 tasksCnt”,其中uint8的定义为“typedef unsigned char uint8”。
2、tasksEvents:这是一个指针,指向了事件表的首地址。该变量的声明为“uint16 *tasksEvents”,其中uint16的定义为 “typedef unsigned short uint16”。
3、tasksArr:这是一个数组,该数组的每一项都是一个函数指针,指向了事件处理函数。该数组的声明为“pTaskEventHandlerFn tasksArr[]”,其 中pTaskEventHandlerFn定义如下:
typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short event )
这是定义了一个函数指针。因此tasksArr数组的每一项都是一个函数指针,指向了对应的事件处理函数。
可以将BLE协议栈的运行机制总结为通过不断地轮询事件表来判断是否有事件发生,如果有事件发生,则查找函数表找到对应的事件处理函数对事件进行处理。事件表使用数组来实现数组的每一项对应一个任务的事件,每一位表示一个事件。函数表使用函数指针数组来实现,数组的每一项是一个函数指针,指向了事件处理函数。