协议定义的是一系列的通信标准, 通信双方需要共同按照这一标准进行正常的数据收发; 协议栈是协议的具体实现形式, 就是用代码实现的函数库, 以便于开发人员调用。
  BLE 协议栈将各个层定义的协议都集合在一起, 以函数库的形式实现, 并给用户提供一些应用层 API, 供用户调用。
   协议栈的每个例程都不是单独存在的, 蓝牙是为了能够通信, 想要通信就必须遵守一定的规则, Profile 就可以理解为相互约定的规则, 因为每个协议栈demo 都 会 有 一 个 Profile 与 之 对应, 例如SimpleBLExxx 对应的就是simpleGATTprofile, 大多数 profile 都是蓝牙组织 SIG 规定好的, 但是, 如果我们的项目不涉及到跟第三方的设备进行互联, 那么我 们 完 全 可 以 自 定 义 profile , 例 如 , TI 的 SimpleBLEPeripheral 从 机 和SimpleBLECentral主机工程, 就是自定义的profile , 0xfff1~0xfff5。

一、BLE 协议栈的构成

  协议栈的实现方式采用分层的思想, 控制器部分包括: 物理层、 链路层, 控制接口层,主机部分包括: 裸机链路控制及自适应协议层、 安全管理层、 属性协议层、 通用访问配置文件层(GAP), 通用属性配置文件层(GATT)。 BLE 协议的构成如下图所示:

1.1、PHY层

  物理层(PHY) RF 规格特性:
  运行在 2.4GHz ISM band (此频段主要是开放给工业、 科学、 医学三个主要机构使用, 属于Free License, 无需授权许可, 只需要遵守一定的发射功率(一般低于1W), 并且不要对其它频段造成干扰即可)
  GFSK 调制方式(高斯频移键控)
  40 频道 2MHz 的通道间隙
  3 个固定的广播通道
  37 个自适应自动调频数据通道

1.2、LL 层

  RF 控制层, 控制芯片工作在 standby(准备)、 advertising(广播)、 scanning(监听/扫描), initiating(发起连接)、 connected(已连接) 这五个状态中的一种。 五种状态的切换描述为: advertising(广播) 不需要连接就可以发送数据(告诉所有人, 我来了), scanning(监听/扫描) 来自广播的数据, initiator(发起人) 将携带 connection request(连接请求) 来响应广播者, 如果 advertiser(广播者) 同意该请求, 那么广播这和发起者都会进入已连接状态, 发起连接的设备变为 master(主机), 接收连接请求的设备变为 slave(从机)。

1.3、HCI 层

  通信层, 向 host 和 controller 提供一个标准化的接口。 该层可以由软件 api 实现或者使用硬件接口 uart、 spi、 usb 来控制。

1.4、L2CAP 层

  相当于快递, 将数据打包, 可以让客户点对点的通信。

1.5、SM 层

  安全服务层, 提供配对和密钥的分发, 实现安全连接和数据交换。

1.6、ATT 层

  ATT 环境中, 允许设备向另外一个设备展示一块特定的数据, 称之为“属性”, 展示“属性” 的设备称为服务器, 与之配对的设备称为客户端。 链路层状态(主机和从机) 与设备的 ATT 角色是相互独立的, 也就是说, 主机设备可以是 ATT 服务器, 也可以是 ATT客户端。 从机也一样。

1.7、GATT 层

  从名字就能看出, GATT 是在 ATT 上面的一层结构, 定义了使用 ATT 的服务框架,GATT 规定了配置文件(鼎鼎有名的 profile) 的结构, 在 BLE 中, 所有被 profile 或者服务用到的数据块都称为“特性, characteristic” 两个建立连接的设备之间的所有数据通信都是通过 GATT 子程序处理, 应用程序和 profile 直接使用 GATT 层, 在后面具体的代码中, 我们会经常见到 GATT, 数据交互也是再GATT层。
  以上各层, 全部封装在 lib 库中, 对外提供接口函数。 函数库的OSAL、 HAL、 Profile、APPS 等均是源码的形式提供。

CC2541的BLE协议栈构成相关推荐

  1. java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈

    详解BLE连接建立过程 https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式-兼BLE Link layer协议解析 https://www. ...

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

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

  3. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈

    深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实 ...

  4. BLE协议栈学习2——OSAL

    OSAL简介 BLE 协议栈包含了 BLE 协议所规定的基本功能,这些功能是以函数的形式实现的,为了便于管理 这些函数集,BLE 协议栈内加入了实时操作系统(并非真正意义上的操作系统),称为 OSAL ...

  5. BLE协议栈 – SM

    SM(Security Manager)安全管理层定义了BLE通信两端设备的配对方法和密钥分发的工作模式,提供了一系列加密算法,为BLE通信提供了加密.认证等安全保障.它与GAP层密切相关,关于安全需 ...

  6. 深入浅出低功耗蓝牙(BLE)协议栈,使用Ubertooth one扫描嗅探低功耗蓝牙

    BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 深入浅出低功耗蓝牙BLE协议栈 1. 协议栈框架 2. 如何通过无线发送一个 ...

  7. BLE 协议栈(Master,Slave;Standby,Advertiser,Scanner,Initiator;连接流程,连接参数)

    文章目录 1.BLE 协议栈的结构和配置(应用层,Host 主协议层,Controller 控制层) 2.BLE 物理层(PHY) 3.拓扑结构(星型拓扑) 4.设备状态(Master,Slave:S ...

  8. ble协议栈从零开始八(security manager 最细致分析上)

    SIG BLE MESH 视频 教程https://edu.csdn.net/course/detail/27321​​​​​​​ 一.前言 ble协议栈最难的一章来了,我尽自己的努力把这一章写好.安 ...

  9. 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍

    原文链接:蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍 系列索引:蓝牙协议分析(1)_基本概念 蓝牙协议分析(2)_协议架构 目录 1. 前言 2. Why 3. How和What 4. Phy ...

最新文章

  1. 从前端框架到前端架构参考资料
  2. 过滤某一个时间段的日志----sed
  3. 怎么使用socket在云服务上通信步骤(可支持TCP或UDP)
  4. android 设置对话框的高度,如何控制Android中默认警报对话框的宽度和高度?
  5. 实现ftoa与itoa
  6. 电源模块怎么选?以下6点你都知道吗?
  7. ASP.NET MVC 在WebService中Token的使用方法
  8. java 手机视频_JAVA炫播手机视频
  9. [poj1410]Intersection
  10. python学了有什么用-python学来有什么用
  11. fdisk添加分区引起的Linux Error: 22: Invalid argument
  12. 虚拟麦克风音频输入_Au音频效果(合集)
  13. outlook企业邮箱服务器要多少钱,怎么把企业邮箱配置到outlook中
  14. 关于围棋的基本功(转)
  15. 2017年Go语言入门教程-徐培成-专题视频课程
  16. 实战SOHO接单的全过程
  17. 电脑(PC端)多开两个或多个微信
  18. 新版ideal2021配置Tomcat
  19. 手机网站新模式-3G门户HTML5概念版
  20. 如何理解java的回调函数?

热门文章

  1. CSS控制图片等比例缩放
  2. Ubuntu 20.04 开启root权限登陆、网卡配置
  3. 关于GitHub客户端 authentication failed的解决办法
  4. c语言随机数rand函数一探究竟
  5. opencv提取图像中的颜色直方图(RGB、HSV)
  6. 【下载】2020考研视频教程大全
  7. 基于Nokia手机的移动游戏开发
  8. 宋版“三国演义”(北宋、辽、西夏和南宋、金、蒙古)
  9. 纸质文件从PDF转化为word 教程
  10. 2011年10月12日