蓝牙4.0/BLE协议栈学习笔记(一)



蓝牙4.0/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协议栈的配置文件层包括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/C++Compiler Preprocessor添加宏定义来开启。比如使用串口时添加HAL_UART=TURE,注销POWER_SAVING。在使用ADC功能时,添加HAL_ADC=TRUE。

更多技术文章浏览请关注:

百家号:
https://author.baidu.com/home?context=%7B%22app_id%22%3A%221646108714303504%22%7D&wfr=bjh

头条号:
https://www.toutiao.com/c/user/8115738721/#mid=1646025109246987

发布了39 篇原创文章 · 获赞 20 · 访问量 19万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章