初识物联网无线通信技术之蓝牙4.0BLE协议栈


一、需要的软件工具

1、BLE协议栈(BLE-CC254x-1.4.0)

2、IAR开发软件(IAR Embedded Workbench8.20.2)

注:1.4.0协议栈使用8.20.2的iar版本,1.3.2协议栈等使用的是8.10.4的iar版本。

二、BLE协议栈安装目录下文件夹说明

Accessories 一些工具和已经编译好的Hex文件此文件夹中有Btool的安装包、USB-CDC的驱动附件;

Components Hal驱动,OSAL源码、协议栈通用源码此文件夹是OSAL各层组件的实现;

Documents 帮助文档协议栈说明文档,包括协议栈和DEMO的相关介绍和开发文档,这是学习BLE最好的资料;

Projects 工程文件这里有一些TI的Demo,我们开发一般是在Demo的基础上进行修改。

三、BLE协议栈工作流程

关于BLE协议栈工作流程图大概就是下面这个样子:


初识物联网无线通信技术之蓝牙4.0BLE协议栈


BLE协议栈分为主机和控制器两部分。主机部分包括:逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层、通用属性配置文件层;控制器部分包括:物理层,链路层、主机控制接口层。BLE协议栈的配置文件层包括GAP角色/安全配置文件、GATT配置文件两部分,处于协议栈的顶层,配置文件层将协议栈和应用层联系在一起。GAP层负责处理设备访问模式和连接,如广播的使能/禁止、广播的间隔、配对绑定及连接的控制、初始化安全管理。在成功连接设备后,可以调用对应的函数来获得设备的service(服务),并对service中的characterister(标签)进行读写。GATT层主要是用来数据通信,即service跟characterister。可以在设备的BLE协议栈中添加一个或多个service,而service(服务)中包含一个或多个characterister(标签)。BLE协议栈四种设备类型:Central主机、Peripheral从机、Observer观察者、Broadcaster广播者。主机和从机的通信过程大概是:从机开启广播,主机开始扫描,当从机接收到主机的扫描消息后,会向主机发送扫描回应数据。然后主机发起连接,建立通信。

四、消息广播

在完成一个处理事件后,需要把这个消息广播出去,就把值填加到广播数组中advertData[],调用GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );函数广播出去,这样还不能广播成功。进入GAPRole_SetParameter里面发现缺少GAP_UpdateAdvertisingData函数,需要修改动态广播数据,加入以下代码:

case GAPROLE_ADVERT_DATA:

if ( len <= B_MAX_ADV_LEN )

{

VOID osal_memset( gapRole_AdvertData,0, B_MAX_ADV_LEN );

VOID osal_memcpy( gapRole_AdvertData,pValue, len );

gapRole_AdvertDataLen = len;

GAP_UpdateAdvertisingData(gapRole_TaskID,

TRUE,gapRole_AdvertDataLen, gapRole_AdvertData );

}

else

{

ret = bleInvalidRange;

}

break;

在调用完GAPRole_SetParameter函数后可以广播了,需要控制任务调用时间控制后面添加osal_start_timerEx函数,这个是定时循环向任务发送事件消息,具体实际时间可以自己定。

GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );

osal_start_timerEx(simpleBLEBroadcaster_TaskID,SBP_ADV_RGB_EVT,100);

return ( events ^SBP_ADV_RGB_EVT );

这样数据就可以广播了,采用PacketSniffer抓包就可以在AdvData看到广播数据了(十六进制数)。在使用某个功能时,必须在Option下配置C/Compiler Preprocessor添加宏定义来开启。比如使用串口时添加HAL_UART=TURE,注销POWER_SAVING。在使用ADC功能时,添加HAL_ADC=TRUE。


分享到:


相關文章: