• BLE学习(1):蓝牙协议栈的介绍


    蓝牙官方(The Bluetooth Special Interest Group)定义了低功耗蓝牙(Bluetooth low energy,即LE)和基础/增强速率蓝牙(Bluetooth basic rate/enhanced data rate,即BR/EDR)两种技术的协议栈。这两种协议栈可以单独使用,也可以同时使用,如下图所示:
    在这里插入图片描述
    这里仅对Bluetooth LE Protocol Stack进行介绍:
    下图展示了蓝牙的协议栈和OSI(Open System Interconnection)参考模型的对比。
    在这里插入图片描述

    • OSI模型的数据链路层对应着蓝牙的Link LayerL2CAP层。
    • 蓝牙LE栈的上层提供应用层服务、设备角色和模式、连接管理和安全协议

    蓝牙LE协议栈按功能分为三个层:ControllerHostApplication Profiles and Services
    在这里插入图片描述
    1、Controller
    控制层包含着蓝牙LE物理层(PHY)、数据链路层(LL)和控制端主机控制接口(HCI)。
    蓝牙LE物理层工作在无需许可的2.4GHz频段,它有以下特性:

    • 射频频率范围为2.4GHz~2.4835Hz
    • 通道带宽为2MHz,工作频带分为40个频道,第k个通道的中心频率为2402+k×2Mhz,k=0,...,39
      • 用户的数据包在0~36通道传输
      • 广播数据包在37、38和39通道传输
      • 公式中的k并不代表具体的通道,实际上广播通道的频率是分散开的,CH37的频率为2402Hz,CH38的频率为2426Hz,CH39的频率是2480Hz
    • 采用高斯频移键控(GFSK)调制方案
    • 采用跳频扩频(FHSS)来减少干扰和对抗衰落信道的影响。频率跳变的时间范围为7.5ms~4s

    (1)LL
    LL(链路层,即Link Layer)执行类似于OSI模型的介质访问控制(MAC)层的任务,它直接与蓝牙PHY层直接相连,并管理链路状态。BLE状态机如下图所示:
    在这里插入图片描述
    Standby:既不发送也不接收任何数据包,其他的所有状态都可以直接进入待机状态
    Advertising:BLE正在广播数据包,广播可以被范围内的任何支持BLE的设备接收。
    Scanning:BLE正在监听在范围内的其他BLE设备所广播的数据包。
    Initiating:BLE正试图与另一个BLE设备建立连接。
    Connected:BLE已经连接到另一个BLE的设备,两个设备之间可以交换数据。
    (2)HCI
        HCI层是BLE协议栈中的可选部分,它提供了Host和Controller之间的标准化通信接口。HCI为数据包数据的传输和接收定义了一组命令和事件。当从控制器接收数据包时,HCI从控制器提取原始数据发送给主机。
        如果省略了HCI层,就意味着Host层和Controller层的实现需要在同一个处理器之中;如果使用了HCI层,就可以比如系统的主处理芯片作为Host层,而系统的蓝牙芯片作为Controller层,它们之间可以通过串口、USB等连接。
    2、Host
        Host由Profiles(配置文件)组成。Profile提供了协议栈中的每个协议应该如何相互通信以及如何在特定的使用模型下进行协同工作的详细信息。
        Host层包括了逻辑链路控制与适配协议(Logical Link Control and Adaptation Protocol,即L2CAP)、属性协议(attribute protocol,即ATT)、通用属性配置文件(generic attribute profile,即GATT)、安全管理协议(security manager protocol ,即SMP)和通用访问配置文件(generic access profile,即GAP)。
    (1)L2CAP
    L2CAP层处理蓝牙数据的收发:

    • 将来自蓝牙LE上层的数据封装成标准的蓝牙LE报文格式进行传输
    • 根据ATT层和SMP层指定的链路配置,在接收时从标准的蓝牙LL层报文中提取数据

    (2)ATT
    ATT基于GATT属性概要在客户端和服务端之间传输属性数据。ATT会将数据组织成如下图所示的属性:

    在这里插入图片描述

    • attribute handle:由服务端分配的一个16位的标识符,客服端可以通过这个句柄来查询指定的attributes
    • attribute type:为蓝牙官方定义的一个通用唯一标识码(universally unique identifier,即UUID) ,长度为2或16字节
      • UUID的标准长度为16字节,但为了减少传输的数据量,蓝牙协议栈中会将用户提供的2字节UUID映射为一个16字节的UUID。
    • attribute value:长度可变,与UUID对应的attribute value
    • attribute permissions:指定属性的读写权限,以及读写权限所需的安全级别

    (3)GATT
    GATT封装了ATT,主要用来规范attribute中的数据内容,并将不同的attribute进行分组分类。负责协调蓝牙LE链路中配置文件的交换,配置文件包括诸如handle分配、UUID和权限等信息和数据。

    (4)SMP
    SMP通过安全算法对数据包进行加解密。

    (5)GAP
        GAP负责定义设备在蓝牙LE通信中的角色。它还管理连接的建立和安全。GAP直接与应用程序配置文件和App层连接。目前主要用来进行广播、扫描和发起连接。
        GAP定义了四种设备角色:BroadcasterObserverPeripheralCentral
    ①无连接通信:Broadcaster(广播者)应该分享信息,Observer(观察者)应该监听信息
    ②面向连接的通信(单播):只有在两台设备之间建立连接后才进行数据交换,首先需要发现设备,Peripheral(外围设备)通过广播来表示它的存在,然后Central(中心设备)应该扫描这些广播报文,然后向Peripheral发送连接指示。

    总之,GAP让我们能够访问链路层的状态机,GAP层不同的角色,对应着LL层状态机的不同状态:
    在这里插入图片描述Broadcaster: Standby、Advertising
    Observer:Standby、Scanning
    Peripheral:Standby、Advertising、Connected
    Central:Standby、Scanning、Initiating、Connected

  • 相关阅读:
    【广度优先搜索】leetcode 107. 二叉树的层序遍历 II
    什么是DNS劫持?如何进行有效应对?
    Java高级:IO
    Elasticsearch语法之Term query不区分大小写
    Sql 中常用日期转换Convert(Datetime)
    猿创征文 |『牛客|每日一题』循环链表
    Pyside(PYQT)应用程序基本框架
    【Java】IO流体常用类FileReader和FileWriter
    java计算机毕业设计-酒店管理系统-源码+mysql数据库+系统+lw文档+部署
    软件企业认定条件
  • 原文地址:https://blog.csdn.net/tilblackout/article/details/127921514