BLE协议栈架构如下所示:


用户开发应用程序或者说service的时候,调用的都是GATT API,而GATT又调用了ATT API。

BLE client/server(C/S) 架构

1、上图所示的Request和Response其实就是我们经常说的ATT命令(ATT PDU),也就是说Client和Server之间通过ATT PDU进行交互。
2、在BLE中,数据是通过characteristic进行包装的,而且多个characteristic组成一个service,service是一个独立的服务单元,或者说service是一个基本的BLE应用。
3、如果某个service是一个蓝牙联盟定义的标准服务,也可以称其为profile,比如HID/心率计/体温计/血糖仪等,都是标准蓝牙服务,因此都有相应的profile规格书。

一个characteristic包含三种条目:characteristic声明,characteristic的值以及characteristic的描述符(可以有多个描述符),如下所示:


1、characteristic declaration就是每个characteristic的分界符,包含value的读写属性等。
2、Characteristic value就是数据的值。
3、Characteristic descriptor就是数据的额外信息,比如温度的单位是什么,数据是用小数表示还是百分比表示等之类的数据描述信息。
4、CCCD是一种特殊的characteristic descriptor,可以使用CCCD来关闭characteristic的notify或者indicate功能。
5、client访问server的characteristic,我们把这种操作称为读或者写。
6、server可以直接把自己的characteristic的值告诉client,我们称其为notify或者indicate。
7、当characteristic具有notify或者indicate操作功能时,那么必须为其添加相应CCCD,以方便client来使能或者禁止notify或者indicate功能。

不管是characteristic declaration,characteristic value还是characteristic descriptor,实现的时候,我们都是用attribute来表达的,也就是说,他们每一个都是一个attribute,attribute可以用下图来表示:


1、Attribute handle,Attribute句柄,16-bit长度。Client要访问Server的Attribute,都是通过这个句柄来访问的,也就是说ATT PDU一般都包含handle的值。用户在软件代码添加characteristic的时候,系统会自动按顺序地为相关attribute生成句柄。
2、Attribute type,Attribute类型,2字节或者16字节长。在BLE中我们使用UUID来定义数据的类型,UUID是128 bit的,所以我们有足够的UUID来表达万事万物。其中有一个UUID非常特殊,它被蓝牙联盟采用为官方UUID,这个UUID如下所示:
3、Attribute value,就是数据真正的值,0到512字节长。
4、Attribute permissions,Attribute的权限属性,权限属性不会直接在空中包中体现,而是隐含在ATT命令的操作结果中。假设一个attribute read属性设为open(即读操作不需要任何权限),那么client去读这个attribute时server将直接返回attribute的值;如果这个attribute read属性设为authentication(即需要配对才能访问),如果client没有与server配对而直接去访问这个attribute,那么server会返回一个错误码:告诉client你的权限不够,此时client会对server发起配对请求,以满足这个attribute的读属性要求。目前主要有如下四种权限属性:
Open,直接可以读或者写
No Access,禁止读或者写
Authentication,需要配对才能读或者写,由于配对有多种类型,因此authentication又衍生多种子类型,比如带不带MITM,有没有LESC
Authorization,跟open一样,不过server返回attribute的值之前需要应用先授权,也就是说应用可以在回调函数里面去修改读或者写的原始值。
Signed,签名后才能读或者写,这个用得比较少。
5、每个attribute都有一个handle和UUID,handle用来访问该attribute,UUID用来指明该attribute的类型。可以说,server提供数据,而数据是由attribute来表达,所有attribute组成一个attribute table,设备支持的服务不同,attribute table就不同。这里说明一下,当你在Nordic已有例程基础上再去添加新的服务或者删除已有的服务,记得一定要去修改ATTR_TAB_SIZE那个宏,否则协议栈初始化会有问题。

参考 https://www.cnblogs.com/iini/p/12334646.html

BLE service, characteristic相关推荐

  1. 【Nordic】如何极致实现Nordic 蓝牙性能

    在很多应用场合,BLE只是作为一个数据透传模块,即将设备端数据上传给手机,同时接收手机端下发的数据.本文将和大家一起,一步一步演示如何开发一个BLE透传应用程序.按照本文的说明,大家可以很快就实现一个 ...

  2. android手机上的ancs,Android BLE开发之操作IOS ANCS

    前言 之前写过两篇有关于ANCS的文章,最近一段时间老是有人问关于得到ANCS服务的问题,因为IOS ANCS不同于其他的Peripheral一样对周边所有的蓝牙设备广播自己,而是仅有连接上配对并连接 ...

  3. BLE简介和Android BLE编程

    http://www.aiuxian.com/article/p-1752155.html 一.BLE和BT区别 其实我知道许多程序员不太喜欢阅读除了代码以外的文档,因为有时这些过于冗长的文档对编程并 ...

  4. 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

    目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...

  5. Android BLE(3) ---FastBle解析

    Android BLE开发详解和FastBle源码解析 项目中有用到了蓝牙相关的功能,所以之前也断断续续地针对蓝牙通信尤其是BLE通信进行了一番探索,整理出了一个开源框架FastBle与各位分享经验. ...

  6. ble mac地址 协议_BLE(bluetooth low energy)协议栈介绍

    大家好,今天开始给大家介绍一下蓝牙BLE技术,整个蓝牙技术其实从技术上分经典蓝牙和BLE蓝牙,而从技术模式上分三种:单模(only BLE),双模(BLE和经典都有,如手机),经典蓝牙BR/EDR.蓝 ...

  7. 安卓蓝牙开发(1)BLE蓝牙基础知识和一般开发流程

    一.BLE(Bluetooth Low Energy)低功耗蓝牙基本知识 Android 4.3(API级别18)引入了以低功耗蓝牙(BLE)为中心角色的内置平台支持,并提供应用程序可用于发现设备,查 ...

  8. 蓝牙BLE之系统学习

    文章目录 1 蓝牙BLE简介 2 蓝牙BLE概述 2.1 ISM Band 2.4GMHz 3 蓝牙BLE协议架构 3.1 Physical Layer 3.2 Link Layer 3.2.1 Ph ...

  9. ESP32 入门笔记05: BLE 蓝牙客户端和服务器 (ESP32 for Arduino IDE)

    目录 1. BLE 服务器和客户端 2. GATT 协议 3. UUID 4. 项目概述 4.1 材料清单 4.2 ESP32 BLE 服务器 4.3 ESP32 BLE 客户端 参考资料 1. BL ...

  10. TI低功耗蓝牙(BLE)介绍

    TI低功耗蓝牙(BLE)介绍 本文档翻译和修改自参考资料:CC2540Bluetooth Low Energy Software Developer's Guide (Rev. B),部分图片直接引用 ...

最新文章

  1. 程序员修神之路--分布式系统使用网关到底是好还是坏?
  2. java number转string_Java Number类, Character类,String类
  3. Qt5.7+Opencv2.4.9人脸识别(四)模型训练
  4. java颜色常量,Java FX场景构建器无法识别css自定义颜色常量(或变量)
  5. 洛谷 P1017 进制转换
  6. keli不支持中文,显示中文乱码
  7. Android手机截图命令screencap
  8. 对比MySQL和Pandas计算用户最大连续登录天数
  9. 【找规律】求123456789的第几个全排列
  10. java开发微信抢红包挂_java实现微信抢红包算法
  11. cadence使用教程
  12. html5情人节贺卡,情人节贺卡祝福语
  13. 前端剑法第三式————碎岩
  14. js数组操作(pop,push,unshift,splice,shift方法)
  15. Java多线程读取文件
  16. 使用支付宝实现零手续费跨行转帐。
  17. 不会聊天,怎么可能找到女朋友?
  18. github前端插件大全
  19. 源代码教育最新开班时间
  20. 【UI自动化】微信群聊未添加人数统计

热门文章

  1. android 实现按键精灵
  2. 4个角度教你选小程序开发工具?
  3. aws打开慢_亚马逊AWS服务器访问较慢,如何快速访问AWS服务器呢?
  4. c语言小鱼的游泳时间,信息学奥林匹克竞赛-小鱼的游泳时间
  5. 【SAP Abap】记录一次完整的BDC录屏开发
  6. 计算机主机sn号怎么查看,笔记本序列号怎么看_笔记本电脑SN序列号的查看方法-win7之家...
  7. iOS小知识: 使用bugly上报自定义错误信息进行数据监控
  8. 微软2015校园招聘 技术类职位在线笔试-题目1 : Browser Caching
  9. 几种x-ray产生的原理
  10. r语言数据变量分段_R语言之数据汇总