美文网首页
TI CC2540 BLE协议栈 蓝牙相关

TI CC2540 BLE协议栈 蓝牙相关

作者: YuQiao0303 | 来源:发表于2019-03-15 11:09 被阅读0次

《AMOMCU-CC254x开发板快速入门.pdf 》 笔记
阿莫淘宝店: https://amomcu.taobao.com/

什么是协议栈

  • 协议:定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;
  • 协议栈:是协议的具体实现形式,通俗的理解就是用代码实现的函数库,以便于开发人员调用。

使用BLE 协议栈进行开发的基本思路可以概括为如下三点:

  • 用户对于BLE 无线网络的开发就简化为应用层的C 语言程序开发,用户不需要深入研究复杂的BLE 协议栈;
  • Bluetooth-LE 低功耗蓝牙中数据采集,只需要用户在应用层加入传感器的读取函数即可。
  • 如果考虑到节能,可以根据数据采集周期进行定时,定时时间到就唤醒BLE。
image.png

注意;所有的协议栈demo都要放到Projects/BLE 这个目录下编译运行

术语

1. profile

  • 通信协议
  • 位于从机中
    蓝牙组织规定了一系列的标准Profile,例如HID OVER GATT、防丢器、心率计等
    每个Profile中会包含多个Service

2. service

  • 服务/从机的能力:电量信息服务,系统信息服务
  • 每个Service 里又包含多个Characteristic 特征值。

3. characteristic

  • 特征值
  • 可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
  • BLE 主从机的通信均是通过Characteristic 来实现

4. UUID

  • 统一识别码
  • Service 和Characteristic,都需要一个唯一的UUID来标识。

主从机互相发送数据 资料4.3节

主-》从:GATT_WriteCharValue 函数
从-》主:GATT_Notification 函数
纸尿裤中的例子如下:

纸尿裤的例子

从机接收数据

  • 从机收到主机发来的数据后,会产生一个GATT Profile Callback 调用,
  • 我们在这个callback 中接收主机发送的数据
  • 这个callback 在从机初始化时向Profile 注册。
    下面的例子同样来自纸尿裤/药盒:


    image.png
image.png

该回调函数的一个例子:

*********************************************************************
 * @fn      simpleProfileChangeCB
 *
 * @brief   Callback from SimpleBLEProfile indicating a value change
 *
 * @param   paramID - parameter ID of the value that was changed.
 *
 * @return  none
 */
static void simpleProfileChangeCB( uint8 paramID )
{
  uint8 newValue;
  uint8 newChar6Value[SIMPLEPROFILE_CHAR6_LEN];
  uint8 returnBytes;
  
  switch( paramID )
  {
    case SIMPLEPROFILE_CHAR1: 
/**
判断是否是写特征值Characteristic 1,如果是,将characteristic1 的value 复制到newValue 中,然后可以通过lcd 输出显示。
*/
      SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR1, &newValue, &returnBytes );

      #if (defined HAL_LCD) && (HAL_LCD == TRUE)
        HalLcdWriteStringValue( "Char 1:", (uint16)(newValue), 10,  HAL_LCD_LINE_3 );
      #endif // (defined HAL_LCD) && (HAL_LCD == TRUE)

      break;

    case SIMPLEPROFILE_CHAR3:
      SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR3, &newValue, &returnBytes );

      #if (defined HAL_LCD) && (HAL_LCD == TRUE)
        HalLcdWriteStringValue( "Char 3:", (uint16)(newValue), 10,  HAL_LCD_LINE_3 );
      #endif // (defined HAL_LCD) && (HAL_LCD == TRUE)

      break;
    
    case SIMPLEPROFILE_CHAR6:
      SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR6, newChar6Value, &returnBytes );
      if(returnBytes > 0)
      {
        if(simpleBLE_CheckIfUse_Uart2Uart())     //使用透传模式时才透传
        {
            NPI_WriteTransport(newChar6Value,returnBytes);
            
            // 这里可以处理一下数据,比如发命令点灯
            // MT 命令处理 函数
            simpleBLE_MT_CMD_Handle(newChar6Value,returnBytes);
          }
      }
 
      break;
      
    default:
      // should not reach here!
      break;
  }
}

GATT 的Service 和 Client

  • GATT 有Service 和Client之分
  • Central 作为Client, Peripheral 作为Service
  • 主机Central 会调用 GATT_WriteCharValue 或者GATT_ReadCharValue 来和从机通信
  • 而Peripheral 需要通过notify 的方式,也就是调用GATT_Notification 发起和主机的通信
  • 一般来说,Peripheral notify 的方式,速度要比直接读写的速度要慢。

相关文章

  • TI CC2540 BLE协议栈 蓝牙相关

    《AMOMCU-CC254x开发板快速入门.pdf 》 笔记阿莫淘宝店: https://amomcu.taoba...

  • 蓝牙4.0BLE中协议栈详解

    蓝牙4.0BLE协议栈介绍 问题:什么是BLE协议栈?BLE协议栈与BLE协议的关系? 顾名思义,人类之间需要一种...

  • [转载]BLE开发的各种坑

    这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈)。总体感觉 Android BLE 还是不太稳定,...

  • BLE开发的各种坑

    这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈)。总体感觉 Android BLE 还是不太稳定,...

  • AliOS Things蓝牙协议栈及应用开发框架介绍

    摘要:AliOS Things从1.2.0版本开始支持蓝牙协议栈(BLE),及基于蓝牙协议栈的应用层开发框架。本文...

  • 蓝牙BLE协议栈基础知识

    这次介绍一下蓝牙协议栈(BLE)的基础知识,蓝牙协议栈组成如下图所示,首先我们说说GAP和GATT 1. G...

  • BLE蓝牙协议栈

    小结: BLE协议就是实现低功耗蓝牙协议的代码,实现过程是层层打包。 对于开发而言,只需要知道以下几点: 1.不需...

  • BLE入门07 TI BLE

    一、概述 1、BLE蓝牙协议栈结构 协议栈分为两部分:控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有p...

  • 蓝牙4.0/4.1/4.2 BLE协议监控分析仪

    典型应用: - 抓取BLE蓝牙传输数据,分析数据传输协议; - 协助开发调试BLE相关软件,固件; - 实时捕获、...

  • 深入浅出讲解低功耗蓝牙(BLE)协议栈

    蓝牙协议是通信协议的一种,一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议...

网友评论

      本文标题:TI CC2540 BLE协议栈 蓝牙相关

      本文链接:https://www.haomeiwen.com/subject/yjthpqtx.html