STM32 - 蓝牙通讯

蓝牙概述:

  1. 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技术,能在移动电话、PDAQ、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换,蓝牙工作在全球通用的2.4 GHz(2.4 至 2.485 GH)ISM(即工业、科学、医学)频段,使用IEEE802.11协议。
  2. 蓝牙协议包括两种技术:BR(Basic Rate)和LE(Low Energy)。这两种技术都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是相互独立的,不能互通的技术。

蓝牙协议栈:

  1. 蓝牙协议栈分为经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)两类。

  2. 蓝牙的核心系统,由一个Host和一个或多个Controller组成。

  3. 蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。

    1. 蓝牙核心协议:关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制。

    2. 蓝牙应用层协议:是在蓝牙核心协议的基础上,根据具体的应用需求,百花齐放,定义出各种各样的策略,如FTP、文件传输、局域网等等。

      蓝牙1

  4. 蓝牙核心协议(Bluetooth Core)又包含BLE Controller和BLE Host两部分。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。

    蓝牙2

    1. 物理层(PHY)
      • PHY 层主要负责在物理信道上发送和接收信息包。Bluetooth LE 使用 40 个射频信道。频率范围:2402 MHz 到 2480 MHz。
    2. 链路层(LL)
      • LL 层主要负责创建、修改和释放逻辑链路(如果有需要,还包括与之相关的逻辑传输),同时负责更新与设备之间物理链路相关的参数。它控制链路层状态机处于准备、广播、监听 / 扫描、发起连接、已连接这五种状态中的一种。
    3. 主机控制接口层(HCI)
      • HCI 层向主机和控制器提供一个标准化的接口。该层可以由软件 API 实现或者使用硬件接口 UART、SPI、USB 来控制。
    4. 逻辑链路控制及自适应协议层(L2CAP)
      • L2CAP 层负责对主机和协议栈之间交换的数据进行协议复用能力、分段和重组操作。
    5. 安全管理层(SM)
      • SMP 层用于生成加密密钥和身份密钥。
      • SMP 还管理加密密钥和身份密钥的存储,并负责生成随机地址并将随机地址解析为已知设备身份。
    6. 通用访问配置文件层(GAP)
      • GAP 层代表所有蓝牙设备通用的基本功能,例如传输、协议和应用程序配置文件使用的模式和访问程序。
      • GAP 服务包括设备发现、连接模式、安全、身份验证、关联模型和服务发现。
    7. 属性协议层(ATT)
      • ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。
      • BLE引入了Attribute概念,用来描述一条一条的数据。
      • Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
    8. 通用属性配置文件层(GATT)
      • GATT 层表示属性服务器和可选的属性客户端的功能,该配置文件描述了属性服务器中使用的服务、特征和属性的层次结构。
      • GATT 层提供用于发现、读取、写入和指示服务特性和属性的接口。

ESP32-C3中的蓝牙功能:

  1. BLE 角色划分:

    1. 在 BLE 协议栈中不同的层级有不同的角色划分。这些角色划分互不影响
    2. **LL:**设备可以划分为主机和从机,从机广播,主机可以发起连接。
    3. **GAP:**定义了4种特定角色:广播者、观察者、外围设备和中心设备。
    4. **GATT:**设备可以分为服务端和客户端。
  2. BLE 的地址:

    1. 分为公共地址和随机地址。

    2. 公共地址:

      1. BLE的公共地址,就类似于我们日常的身份证号码,是全球唯一的且不可改变的。(像WiFi的MAC地址)

      2. 为了保证BLE公共地址的全球唯一性,其需要向IEEE购买,然后IEEE组织就会对应地分配公共地址给买家。

      3. BLE的公共地址是全球唯一的,且在BLE设备的整个生命周期都不会改变。

      4. 总长度为6个字节,共48位。

        蓝牙3

    3. 随机地址:

      1. 除了公共地址类型之外,还有一个随机地址类型,提供额外的隐私保护,其又分为静态地址(Static Address)和私有地址(Private Address),它们之间主要通过最高的 2 位有效位来区分。
      • 静态地址:总长度也是48位,但是最高位的2位必须是0b11。随机部分至少有一个位是0和1。也就是说不能全部是0或全部是1。设备重启之前不会改变。

        蓝牙4

      • 私有地址:总长度也是48位。最高位是00/01。随机部分至少有一个位是0和1。也就是说不能全部是0或全部是1。定时更新改变。

        蓝牙5

    4. 地址的使用:

      1. **公共地址:**该类型的地址是全球唯一且固定的,理论上重复的概率基本为0,因为它们是由IEEE组织分配给买家的,适用于为保证BLE设备地址的唯一性,方便其他人辨别。
      2. **随机地址:**说白了就是厂商白嫖,因为地址是免费的。当然也提高了隐私。随着隐私和安全性的关注增加,越来越多的蓝牙设备开始使用随机地址来减少被追踪的风险。这在蓝牙低功耗(BLE)技术中尤为常见。
  3. 广播:

    1. 广播是指从机(服务器)每经过一个时间间隔发送一次广播数据包,这个时间间隔称为广播间隔,这个广播动作叫做广播事件,只有当从机处于广播状态时,主机(客户端)才能发现该从机(服务器)。

    2. 在每个广播事件中,广播包会分别在37、38和39三个信道上依次广播,如下图所示。

      蓝牙6

    3. 广播数据包一般包含可读的设备名称、设备是否可连接等信息。

  4. 扫描:

    1. 扫描是主机监听从机广播数据包和发送扫描请求的过程,主机通过扫描,可以获取到从机的广播包以及扫描回应数据包,主机可以对已扫描到的从机设备发起连接请求,从而连接从机设备并通信。
  5. 通讯:

    1. 主从之间的通信是通过GATT的Profile来完成的,Profile可以理解为配置、数据格式等。

    2. 从机作为GATT的Server端,用来定义和存储Profile。Profile包含一个或者多个Service,每个Service又包含一个或者多个Characteristic,Characteristic是主从通信的最小单元。

    3. 主机作为GATT的Client端,用来发现和获取从机的Service和Characteristic,从而与之通信。

      蓝牙7

      • 关于服务 Service和特征值Characteristic的概念。每个服务和特征值都有自己的唯一标识 UUID,标准UUID为128位,蓝牙协议栈中一般采用16位,也就是两个字节的UUID格式。
      • 一个从机设备包括一个或者多个服务;一个服务中又可以包括一条或者多条特征值,每个特征值都有自己的属性 Property,属性的取值有:可读 Read、可写 Write、通知 Notify、指示Indicate。

补充:

  • 蓝牙透传模式:是蓝牙通信中的一种重要工作模式,也被称为透明传输模式。在这种模式下,蓝牙模块就像一条无形的数据管道。从一端输入的数据,会原封不动地传输到另一端,而不需要对数据进行复杂的解析或者处理(除了蓝牙协议栈自身必要的处理)。例如,设备 A 发送一串字节流,通过蓝牙透传模式,设备 B 接收到的就是完全相同的字节流,就如同这两个设备直接用一根线连接起来进行数据传输一样。

参考链接: