blue


行,我给你按你那张图的风格,用 Markdown + 分层图 + 工程视角,把 BLE(低功耗蓝牙)体系结构完整讲清楚,而且重点回答你之前那个问题:能不能绕过 GATT 直接用底层通信


一、蓝牙体系结构(Markdown 图)

┌──────────────────────────────────────────────┐
│                  Host(主机)                │
│                                              │
│  ┌───────────────┬───────────────┐          │
│  │   GATT        │      GAP      │          │
│  │(数据模型)    │(连接/广播)   │          │
│  ├───────────────┼───────────────┤          │
│  │     ATT       │      SMP      │          │
│  │(属性协议)    │(安全管理)    │          │
│  └───────────────┴───────────────┘          │
│              L2CAP(逻辑链路层)             │
│                                              │
└──────────────────────────────────────────────┘
                     │
                     │ HCI(Host Controller Interface)
                     │
┌──────────────────────────────────────────────┐
│              Controller(控制器)             │
│                                              │
│        Link Layer(LL,链路层)              │
│        - 连接管理 / 调度 / 重传 / 加密        │
│                                              │
│        Physical Layer(PHY,物理层)         │
│        - 调制 / 频率 / 发射功率 / 编码        │
│                                              │
│        Radio(射频) + Antenna(天线)       │
│                                              │
└──────────────────────────────────────────────┘

二、各层详细拆解(嵌入式工程视角)

1️⃣ Host 层(你写代码的地方)

🔹 GATT(最常用)

  • 定义数据结构(服务 + 特征值)

  • 类似:

    struct {
        service {
            characteristic (value)
        }
    }
    
  • 本质:应用层协议

👉 你写的 BLE 代码基本都在这层


🔹 ATT(GATT 的底层)

  • 数据单位:Attribute(属性)

  • 操作:

    • Read
    • Write
    • Notify
    • Indicate

👉 GATT = ATT 的封装


🔹 GAP(连接管理)

负责:

  • 广播(Advertising)

  • 扫描(Scanning)

  • 建立连接(Connection)

  • 角色:

    • Central(主)
    • Peripheral(从)

👉 没它,设备连不上


🔹 SMP(安全)

  • 配对(Pairing)
  • 加密(Encryption)
  • 密钥交换(LTK)

👉 BLE 安全全靠它


🔹 L2CAP(关键!!!)

你问的重点就在这:

作用:

  • 多路复用(多个协议共享链路)
  • 分包 / 重组
  • QoS 管理

👉 所有上层数据最终都走 L2CAP


2️⃣ HCI(分界线)

这是一个非常关键的边界

Host(软件)  ←→  Controller(硬件)

常见接口:

  • UART
  • USB
  • SPI

👉 在一些芯片(比如手机):

  • Host 在 CPU
  • Controller 在蓝牙芯片

👉 在 ESP32:

  • Host + Controller 在同一个芯片里

3️⃣ Controller 层(芯片内部)

🔹 Link Layer(LL)

核心能力:

  • 建立连接
  • 时隙调度(TDMA)
  • 重传(ARQ)
  • 加密(链路级)

👉 真正控制无线通信的核心


🔹 PHY(物理层)

负责:

  • 调制(GFSK)

  • 速率:

    • 1M
    • 2M
    • Coded(125K / 500K)

👉 决定距离 / 速率


🔹 Radio

  • 真正发射无线信号

三、数据通信流程(重点!)

🔁 一次完整数据发送路径

应用层
  ↓
GATT(你调用 notify/write)
  ↓
ATT(封装成 attribute 数据)
  ↓
L2CAP(分包)
  ↓
HCI(发给控制器)
  ↓
LL(调度发送)
  ↓
PHY(编码调制)
  ↓
Radio(发射)

接收反过来:

Radio → PHY → LL → HCI → L2CAP → ATT → GATT → 应用

四、重点回答你那个问题(核心)

❓ 能不能像 TCP/UDP 一样直接用底层?

你问的是:

能不能绕过 GATT,直接用 ATT / L2CAP 通信?

✅ 答案分三层说清楚:


✅ 1️⃣ 可以绕过 GATT,用 ATT

👉 很多协议就是这么干的

但:

  • ATT 本质还是 受限协议
  • 数据模型固定(attribute)

👉 不够自由


✅ 2️⃣ 可以直接用 L2CAP(重点!)

✔ BLE 5.0 之后支持:

🔹 L2CAP Credit Based Channel(LE CoC)

特点:

  • 类似 TCP
  • 支持流式数据
  • 不用 GATT

👉 这是最接近 socket 的东西


⚠️ 但现实问题:

很多芯片:

芯片 支持 L2CAP CoC
手机
ESP32 ❌(基本不支持)
一些BLE芯片

👉 所以你会感觉:

“BLE 好像只能用 GATT”


❌ 3️⃣ 不能直接用 LL / PHY

原因:

  • 被芯片厂封死
  • 属于 Controller 层
  • 不开放 API

👉 就像你不能直接操作 WiFi 的 OFDM 一样


五、总结一句话(给你工程判断用)

👉 BLE 通信分三种层次:

简单开发 → GATT(99%场景)
进阶玩法 → L2CAP(少数芯片支持)
底层控制 → LL / PHY(不可用)

六、给你个工程建议(很实用)

如果你想做:

🎧 音频 / IMU / 高速数据

建议:

  • ❌ 不要死磕 GATT

  • ✅ 用:

    • BLE + 自定义协议(notify优化)

    • 或直接上:

      • Bluetooth Classic
      • WiFi





📡 BLE 蓝牙低功耗体系架构详解(附层级图)

在这里插入图片描述

BLE(蓝牙低功耗)的体系架构分为三大核心部分:Controller(控制器)HCI(主机控制器接口)Host(主机),从上到下实现了“应用逻辑 → 数据传输 → 物理通信”的完整链路。下面逐层拆解,帮你彻底搞懂每一层的作用~


一、Controller(控制器):蓝牙的“硬件执行层”

这一层直接和硬件打交道,负责最底层的无线信号收发和链路控制,分为两个子层:

1. 物理层(PHY,Physical Layer)

  • 作用:蓝牙通信的“物理基础”,负责定义无线信号的传输规则。
  • 核心功能
    • 规定BLE的工作频段(2.4GHz ISM频段,划分40个信道,其中3个广播信道+37个数据信道)。
    • 定义调制方式(BLE用GFSK调制,BLE 5.0后新增2Mbps高速模式)、发射功率、接收灵敏度等硬件参数。
    • 处理信号的编码、调制、解调,把数字数据转换成电磁波发送出去,同时把收到的电磁波还原成数字数据。
  • 类比:就像快递的“运输卡车”,负责把包裹(数据)从一个地方运到另一个地方,是所有通信的物理载体。

2. 链路层(LL,Link Layer)

  • 作用:PHY的“直接管理者”,负责建立、维护和断开蓝牙连接,是Controller的核心逻辑层。
  • 核心功能
    • 管理设备状态:广播、扫描、发起连接、连接建立、连接维护、断开连接等。
    • 控制数据传输:处理数据包的收发、确认、重传,保证数据可靠传输。
    • 实现跳频机制:在数据信道之间切换,避免干扰,提升通信稳定性。
    • 控制连接参数:比如连接间隔、从机延迟、监督超时,这些参数决定了连接的功耗和响应速度。
  • 类比:就像交通警察,指挥卡车(PHY)走哪条路、什么时候出发、遇到红灯(干扰)怎么处理,保证交通有序进行。

二、HCI(主机控制器接口):主机和控制器的“翻译官”

  • 全称:Host Controller Interface,是Host和Controller之间的标准通信接口。
  • 作用:解耦主机和控制器,让上层的Host协议不用关心底层硬件细节,也让不同厂商的控制器能和标准主机协议兼容。
  • 通信方式:通常通过UART、USB、SDIO等物理总线传输命令和数据,Host发送HCI命令控制Controller,Controller通过HCI事件反馈状态和数据。
  • 核心数据类型
    • 命令包:Host给Controller发指令(比如“开始广播”“发起连接”)。
    • 事件包:Controller给Host反馈状态(比如“连接成功”“收到数据”)。
    • 数据包:Host和Controller之间传输的业务数据。
  • 类比:就像两个说不同语言的人之间的翻译,Host说的“高层指令”被翻译成Controller能懂的“底层命令”,Controller的“硬件状态”也被翻译成Host能懂的“状态信息”。

三、Host(主机):蓝牙的“应用逻辑层”

这一层是开发者最常接触的部分,负责实现蓝牙的应用协议和用户逻辑,从下到上分为:

1. L2CAP(逻辑链路控制与适配协议)

  • 作用:Host的“数据分发中心”,是连接底层Controller和上层应用协议的桥梁。
  • 核心功能
    • 协议复用:把不同上层协议(ATT、SMP)的数据区分开,分别送到对应的模块。
    • 分段重组:如果数据太长,就拆分成多个L2CAP包发送,接收端再重组还原。
    • 流控和重传:部分模式下支持数据的可靠传输,避免数据丢失。
    • 定义逻辑信道:每个上层协议对应一个逻辑信道ID(CID),实现数据的定向传输。
  • 类比:就像快递的“分拣中心”,把不同目的地的包裹(不同协议的数据)分类、打包,再交给运输环节。

2. ATT(属性协议)

  • 作用:定义了蓝牙设备之间数据交互的基本模型,是GATT的底层支撑。
  • 核心概念
    • 属性(Attribute):蓝牙设备对外暴露的数据单元,每个属性都有唯一的句柄(Handle)、类型(UUID)和值(Value)。
    • 客户端/服务器模型:发起数据读写的是客户端(Client),提供数据的是服务器(Server)。
    • 操作指令:定义了读、写、通知、指示等数据交互方式。
  • 类比:就像快递的“包裹标准”,规定了包裹怎么写地址(UUID)、怎么寄(读写指令),保证收发双方都能看懂。

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

  • 作用:基于ATT构建的“数据服务框架”,是BLE应用开发的核心。
  • 核心结构
    • 服务(Service):一组相关属性的集合,代表一个功能(比如心率服务、电池服务),有唯一的服务UUID。
    • 特征(Characteristic):服务里的具体数据项,比如心率值、电池电量,包含特征值、特征描述符等。
    • 描述符(Descriptor):对特征的补充说明,比如数据格式、单位、权限等。
  • 核心角色
    • GATT Server:提供服务和特征的设备(比如智能手环,对外提供心率数据)。
    • GATT Client:访问服务和特征的设备(比如手机,读取手环的心率数据)。
  • 类比:就像快递的“业务场景模板”,比如“生鲜快递”“文件快递”,规定了不同业务下包裹的类型、格式和交互方式,我们平时说的“蓝牙服务”“蓝牙特征”,就是在GATT里定义的。

4. SMP(安全管理协议)

  • 作用:负责蓝牙连接的安全机制,实现设备配对、加密和认证。
  • 核心功能
    • 配对流程:定义了设备之间交换安全信息的过程(比如传统配对、LE Secure Connections配对)。
    • 密钥生成:生成连接加密密钥,对传输的数据进行加密,防止被窃听。
    • 认证与授权:验证设备身份,防止非法设备连接,控制数据的读写权限。
    • 绑定:把配对信息保存下来,下次连接时不用重新配对。
  • 类比:就像快递的“安全校验系统”,验证收发双方的身份,给包裹上加密锁,防止包裹被别人拆开、篡改。

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

  • 作用:定义了设备的角色、广播、扫描、连接的通用规则,是BLE设备“对外交互的入口”。
  • 核心角色
    • 广播者(Broadcaster):发送广播包的设备,不建立连接(比如信标设备)。
    • 观察者(Observer):接收广播包的设备,不建立连接(比如手机扫描信标)。
    • 外设(Peripheral):广播并接受连接的设备(比如智能手环、蓝牙传感器)。
    • 中心设备(Central):扫描并发起连接的设备(比如手机、电脑)。
  • 核心流程:定义了设备怎么广播、怎么被发现、怎么发起连接、连接参数协商等通用交互规则。
  • 类比:就像快递的“收发规则”,规定了谁是寄件人(外设)、谁是收件人(中心设备)、怎么通知对方有包裹(广播)、怎么建立联系(连接),是设备之间“打招呼”的通用规则。

🔗 整体工作流程(简化版)

  1. 外设(Peripheral):在GAP层配置广播参数,通过Controller的LL层发送广播包,PHY层转换成电磁波发送出去。
  2. 中心设备(Central):通过Controller的PHY层接收电磁波,LL层解析广播包,HCI层把数据传给Host的GAP层,发现外设。
  3. 中心设备发起连接请求,双方通过LL层建立连接,HCI层把连接状态传给Host。
  4. 连接建立后,双方通过L2CAP层分发数据,GATT层定义服务和特征,中心设备通过ATT层读写外设的数据。
  5. 安全通信时,SMP层完成配对和加密,保证数据传输安全。

💡 补充说明:

  • 在实际开发中,很多蓝牙SoC(比如ESP32、nRF52)会把Controller和Host都集成在芯片里,开发者主要在Host层开发GATT服务和应用逻辑。
  • 不同蓝牙版本(BLE 4.0/4.2/5.0/5.3)的架构基本不变,主要是PHY层和LL层的功能增强(比如更远的传输距离、更高的速率、更多的广播信道)。

这是为你绘制的 BLE 蓝牙低功耗体系架构结构图,和原图结构一致,同时优化了排版和色彩,更清晰直观👇


结构说明(对应图中层级)

  1. Host(主机层)
    • 最上层是应用逻辑的核心,从下到上:L2CAPATT/GATTSMP/GAP,负责数据分发、服务定义、安全配对和设备交互规则。
  2. HCI(主机控制器接口)
    • 中间的“桥梁层”,负责主机和控制器之间的命令、数据、事件传输,解耦了上层协议和底层硬件。
  3. Controller(控制器层)
    • 最下层的硬件执行层,分为 Link Layer (LL)Physical Layer (PHY),负责连接管理、无线信号收发和数据传输的物理实现。

下面用纯 Markdown 文本,还原 BLE 体系架构的层级结构,清晰直观👇

┌─────────────────────────────────────────────────────────────┐
│                         Host(主机层)                       │
│  ┌─────────────┐   ┌─────────────┐                           │
│  │    GATT    │   │     GAP     │                           │
│  ├─────────────┤   ├─────────────┤                           │
│  │     ATT    │   │     SMP     │                           │
│  └─────────────┘   └─────────────┘                           │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                       L2CAP                         │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘
                              ▲
                              │
              ┌─────────────────────────────────┐
              │      HCI(主机控制器接口)       │
              │ (Host Controller Interface)     │
              └─────────────────────────────────┘
                              ▲
                              │
┌─────────────────────────────────────────────────────────────┐
│                     Controller(控制器层)                   │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                 Link Layer (LL)                      │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │               Physical Layer (PHY)                   │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

简化层级版(更紧凑)

┌─────────────────────────────────────────┐
│ Host(主机)                             │
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ GATT/ATT│ │ GAP/SMP │ │   L2CAP     │ │
│ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────┘
              ▲
              │
    ┌───────────────────────┐
    │ HCI(主机控制器接口) │
    └───────────────────────┘
              ▲
              │
┌─────────────────────────────────────────┐
│ Controller(控制器)                     │
│ ┌─────────────────────────────────────┐ │
│ │ Link Layer (LL)                      │ │
│ ├─────────────────────────────────────┤ │
│ │ Physical Layer (PHY)                 │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘

带层级说明的版本

# BLE 体系架构(从上层到底层)
┌───────────────────────────────────────────────────────────┐
│  应用与服务逻辑(Host)                                   │
│  ┌─────────────┐   ┌─────────────┐                       │
│  │   GATT      │   │    GAP      │  ← 应用交互与角色定义 │
│  │  (属性配置) │   │(通用访问)   │                       │
│  ├─────────────┤   ├─────────────┤                       │
│  │   ATT       │   │    SMP      │  ← 数据模型与安全配对 │
│  │  (属性协议) │   │(安全管理)   │                       │
│  └─────────────┘   └─────────────┘                       │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                      L2CAP                          │ │
│  │          (逻辑链路控制与适配协议,数据分发与分段)   │ │
│  └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
                              ▲
                              │
      ┌─────────────────────────────────────────┐
      │   HCI(主机控制器接口,Host ↔ Controller 桥梁)  │
      └─────────────────────────────────────────┘
                              ▲
                              │
┌───────────────────────────────────────────────────────────┐
│  底层通信控制(Controller)                               │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                 Link Layer (LL)                    │ │
│  │        (链路层:连接管理、广播、跳频、重传控制)     │ │
│  ├─────────────────────────────────────────────────────┤ │
│  │               Physical Layer (PHY)                  │ │
│  │          (物理层:无线信号调制、收发、信道定义)    │ │
│  └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘

BLE蓝牙体系架构Markdown结构图(带详细说明)

纯Markdown文本绘制,清晰呈现层级关系,补充各层核心作用,重点完善Controller层说明:

# BLE 蓝牙低功耗体系架构(完整标注版)
┌───────────────────────────────────────────────────────────┐
│  Host(主机层)—— 应用逻辑核心,负责协议与应用实现       │
│  ┌─────────────┐   ┌─────────────┐                       │
│  │   GATT      │   │    GAP      │  ← 定义服务/特征、设备交互角色 │
│  │  (属性配置) │   │(通用访问)   │                       │
│  ├─────────────┤   ├─────────────┤                       │
│  │   ATT       │   │    SMP      │  ← 数据交互模型、设备配对加密 │
│  │  (属性协议) │   │(安全管理)   │                       │
│  └─────────────┘   └─────────────┘                       │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                      L2CAP                          │ │
│  │  (逻辑链路控制与适配) —— 数据分发、分段重组           │ │
│  └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
                              ▲
                              │  命令/数据/事件传输
      ┌─────────────────────────────────────────┐
      │   HCI(主机控制器接口)—— Host与Controller的桥梁  │
      └─────────────────────────────────────────┘
                              ▲
                              │  底层信号与连接控制
┌───────────────────────────────────────────────────────────┐
│  Controller(控制器层)—— 最下层的硬件执行层             │
│  核心职责:负责连接管理、无线信号收发和数据传输的物理实现 │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                 Link Layer (LL)                    │ │
│  │  (链路层) —— 建立/维护/断开连接、跳频、重传控制     │ │
│  ├─────────────────────────────────────────────────────┤ │
│  │               Physical Layer (PHY)                  │ │
│  │  (物理层) —— 2.4GHz频段、信号调制/收发、信道定义    │ │
│  └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘

# 补充说明
1.  Controller层(硬件执行层):作为整个体系的最底层,直接对接硬件,分为LL和PHY两个子层,是蓝牙通信的物理基础和连接核心
2.  Link Layer (LL):直接管理PHY层,核心负责连接的全生命周期(广播、扫描、连接建立/维护/断开),以及跳频、数据包重传等控制
3.  Physical Layer (PHY):定义蓝牙通信的物理参数,包括工作频段、调制方式、发射功率等,实现数字数据与电磁波的相互转换

紧凑简化版(保留核心标注,适配快速查看):

┌─────────────────────────────────────────┐
│ Host(主机)—— 应用与协议层             │
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ GATT/ATT│ │ GAP/SMP │ │   L2CAP     │ │
│ │ 服务/数据│ │ 安全/角色│ │ 数据分发    │ │
│ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────┘
              ▲
              │
    ┌───────────────────────┐
    │ HCI —— 主机与控制器桥梁 │
    └───────────────────────┘
              ▲
              │
┌─────────────────────────────────────────┐
│ Controller(控制器)—— 硬件执行层       │
│ 核心:连接管理、无线收发、物理实现     │
│ ┌─────────────────────────────────────┐ │
│ │ Link Layer (LL) —— 连接控制、跳频    │ │
│ ├─────────────────────────────────────┤ │
│ │ Physical Layer (PHY) —— 信号收发     │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘

(注:文档部分内容可能由 AI 生成)

Logo

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

更多推荐