TI CC2540 BLE协议栈 蓝牙相关

《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 的方式,速度要比直接读写的速度要慢。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 一、BLE协议栈架构 BLE 协议栈(简称“协议”)由两部分组成: 和 。控制器与主机分离的形式来自标准的蓝牙 B...
    Leung_ManWah阅读 2,589评论 0 3
  • 蓝牙 蓝牙的波段为2400-2483.5MHz(包括防护频带)。这是全球范围内无需取得执照(但定不是无管制的)的工...
    苏永茂阅读 6,145评论 0 11
  • 一、概述 1、BLE蓝牙协议栈结构 协议栈分为两部分:控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有p...
    张志中阅读 1,368评论 0 2
  • 这次介绍一下蓝牙协议栈(BLE)的基础知识,蓝牙协议栈组成如下图所示,首先我们说说GAP和GATT 1. G...
    一智半解阅读 7,358评论 0 3
  • 背景 蓝牙历史说到蓝牙,就不得不说下蓝牙技术联盟(Bluetooth SIG),它负责蓝牙规范制定和推广的国际组织...
    徐正峰阅读 12,307评论 6 33