今天我们来学习一下esp32的蓝牙协议栈,话不多说。

一、蓝牙协议栈简介

        蓝牙协议栈主要分为四层,应用层(Application),主机层(Host),主机控制器接口(HCI),控制器层(Controller),四层都是封装好的,只留下与上下层交互的接口。他们的关系如下图:

下面是各个层的介绍:(豆包生成)

Controller(控制器层)

这是协议栈的底层,直接与硬件交互,负责无线通信的物理和链路层面。

1. Physical Layer (PHY) 物理层

  • 作用:负责无线电波的发送和接收,是 BLE 通信的物理基础。
  • 核心功能:
    • 工作在 2.4GHz ISM 频段,使用 GFSK 调制。
    • 定义了传输速率(1Mbps、2Mbps 等)、发射功率、接收灵敏度等参数。
    • 处理无线信号的调制 / 解调、信道编码 / 解码。

2. Link Layer (LL) 链路层

  • 作用:在 PHY 之上,管理无线链路的建立、维护和数据传输。
  • 核心功能:
    • 管理设备的广播(Advertising)、扫描(Scanning)、连接建立(Connection)。
    • 负责数据帧的封装 / 解封装、链路控制(如连接参数更新、跳频)。
    • 管理设备地址(公共地址 / 随机地址)和链路状态(待机、广播、扫描、连接等)。

Host Controller Interface (HCI) 主机控制器接口

  • 作用:是 Host 和 Controller 之间的标准化 “桥梁”,定义了两者之间的通信协议。
  • 核心功能:
    • 提供命令(Command)、事件(Event)和数据(Data)的统一格式。
    • Host 通过 HCI 命令控制 Controller(如启动广播、建立连接)。
    • Controller 通过 HCI 事件向 Host 上报状态(如收到广播包、连接成功)。
  • 传输介质:可以是物理接口(UART、USB、SPI)或软件虚拟接口(如 ESP32 内置协议栈的 HCI 是软件调用)。

Host(主机层)

这是协议栈的核心逻辑层,负责处理 BLE 的高层协议和数据交互。

1. L2CAP (Logical Link Control and Adaptation Protocol) 逻辑链路控制与适配协议

  • 作用:为上层协议提供多路复用、数据分段和重组服务。
  • 核心功能:
    • 多路复用:将不同的上层协议(如 ATT、SMP)复用到同一个物理链路。
    • 分段 / 重组:将大的数据块拆分为适合 LL 层传输的小数据包,或反之。
    • 流量控制和错误处理。

2. ATT (Attribute Protocol) 属性协议

  • 作用:定义了客户端(Client)和服务器(Server)之间读写 “属性” 的规则。
  • 核心功能:
    • 每个 “属性” 由 UUID、值、权限等组成,是 GATT 的基础。
    • 支持的操作:发现、读取、写入、通知、指示等。

3. GATT (Generic Attribute Profile) 通用属性配置文件

  • 作用:在 ATT 之上,定义了 BLE 设备间数据交换的结构化方式,是 BLE 应用的核心。
  • 核心功能:
    • 组织数据为 服务(Service)特征(Characteristic)描述符(Descriptor)
    • 例如:心率监测服务包含心率测量特征,手机通过 GATT 读取该特征值获取心率数据。

4. SMP (Security Manager Protocol) 安全管理协议

  • 作用:负责 BLE 连接的安全功能,确保通信的保密性和完整性。
  • 核心功能:
    • 配对(Pairing):建立安全连接的过程,生成密钥。
    • 绑定(Bonding):存储配对信息,下次连接时无需重新配对。
    • 加密(Encryption)和身份验证(Authentication),防止数据被窃听或篡改。

5. GAP (Generic Access Profile) 通用访问配置文件

  • 作用:是 BLE 设备与外界交互的 “门面”,负责设备发现和连接管理。
  • 核心功能:
    • 设备发现:控制设备如何广播(如 Beacon 模式)、如何被扫描到。
    • 连接管理:发起 / 接受连接、管理连接参数。
    • 设备标识:设置设备名称、外观(Appearance)、广播数据等。

Application(应用层)

  • 作用:基于 Host 层的协议,实现具体的业务逻辑,是开发者编写应用代码的地方。
  • 核心功能:
    • 传感器数据采集、控制指令发送、数据处理与展示。
    • 直接与用户交互(如手机 App 扫描并连接 BLE 设备)。

作为新人,我们主要运用主机层提供的各种API,所以只需要对主机层的协议进行学习,其他层的协议内容了解即可。

二、蓝牙工作流程

虽然有上面对各个层进行介绍,但是那些名词还是很抽象,我们通过分析蓝牙的工作流程进一步了解

BLE 蓝牙工作流程
├── 1. 设备广播
│   ├── 应用层:定义广播数据
│   ├── 主机层:GAP配置广播参数,L2CAP封装数据
│   ├── HCI:传递广播启动命令
│   └── 控制器层:LL生成广播帧,PHY在广播信道发送信号
├── 2. 扫描与连接建立
│   ├── 扫描阶段:Controller监听广播包 → Host解析数据 → App选择设备
│   └── 连接阶段:Host发起请求 → HCI传递命令 → Controller建立链路
├── 3. 安全配对与绑定
│   ├── 应用层:触发配对,选择安全策略
│   ├── 主机层:SMP生成密钥,L2CAP传输安全信令
│   └── 控制器层:使用密钥进行加密与认证
├── 4. GATT 数据交互
│   ├── 服务发现:App请求 → Host执行发现流程
│   └── 数据读写:App发起操作 → Host执行ATT → Controller传输加密数据
└── 5. 连接断开与待机
    ├── Host处理断开请求 → HCI传递命令 → Controller释放资源
    └── App决定后续状态(重新广播/低功耗待机)

1.广播

设备广播时通过GAP层配置广播的参数和格式,L2CAP封装广播数据(转成LL层能识别的数据格式),HCI层主机给控制器下发广播命令,LL层生成一些广播帧,PHY层(即硬件层)将数字信号转为射频信号并发射出去。

(后续再更新)

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐