蓝牙spp与ble协议区别(初识物联网无线通信技术之蓝牙4.0BLE协议栈)
蓝牙spp与ble协议区别(初识物联网无线通信技术之蓝牙4.0BLE协议栈)Components Hal驱动,OSAL源码、协议栈通用源码此文件夹是OSAL各层组件的实现;Accessories 一些工具和已经编译好的Hex文件此文件夹中有Btool的安装包、USB-CDC的驱动附件;2、IAR开发软件(IAR Embedded Workbench8.20.2)注:1.4.0协议栈使用8.20.2的iar版本,1.3.2协议栈等使用的是8.10.4的iar版本。二、BLE协议栈安装目录下文件夹说明
[本文属原创,转载请附上原文出处链接。]
一、需要的软件工具
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协议栈工作流程图大概就是下面这个样子:
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。