蓝牙系统整体架构详解

《蓝牙技术学习与实践》系列博客总导航

一、为什么要理解蓝牙系统架构?

学习蓝牙时,我们经常会遇到 Host、Controller、HCI、Link Layer、GAP、GATT、PHY 等术语。如果只记住这些名称,很容易把协议、软件模块和硬件模块混为一谈。

理解整体架构,可以先回答三个问题:

  1. 谁负责制定通信规则和管理数据?------主要由 Host 中的协议与配置模块负责。
  2. 谁负责真正执行底层无线通信?------主要由 Controller 负责。
  3. 谁负责把数字数据变成无线电信号,再把无线信号还原成数字数据?------由 Controller 中的射频收发电路及相关基带/物理层电路完成。

从系统角度看,蓝牙不是一个单独的无线芯片或一个单独的软件协议,而是由协议栈、控制逻辑、射频硬件以及应用程序共同组成的系统。

二、蓝牙系统的整体组成

一个典型蓝牙设备可以抽象为以下几个部分:

  • 应用层(Application):实现产品功能,例如耳机播放音乐、键盘发送按键、手环上报传感器数据。
  • Host:实现较高层的蓝牙协议和设备管理功能。
  • Controller:负责较底层的链路控制、时序、信道访问以及无线收发控制。
  • 无线收发硬件(RF):完成 2.4 GHz 射频信号的发射与接收。
  • Host 与 Controller 之间的接口:通常通过 HCI(Host Controller Interface)连接;在不同产品中,接口可以是芯片内部接口,也可以是 UART、USB、SPI 等物理传输方式。

2.1 整体架构示意图

#mermaid-svg-8h3NkYdJsf0v8xal{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8h3NkYdJsf0v8xal .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8h3NkYdJsf0v8xal .error-icon{fill:#552222;}#mermaid-svg-8h3NkYdJsf0v8xal .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8h3NkYdJsf0v8xal .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8h3NkYdJsf0v8xal .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8h3NkYdJsf0v8xal .marker.cross{stroke:#333333;}#mermaid-svg-8h3NkYdJsf0v8xal svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8h3NkYdJsf0v8xal p{margin:0;}#mermaid-svg-8h3NkYdJsf0v8xal .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8h3NkYdJsf0v8xal .cluster-label text{fill:#333;}#mermaid-svg-8h3NkYdJsf0v8xal .cluster-label span{color:#333;}#mermaid-svg-8h3NkYdJsf0v8xal .cluster-label span p{background-color:transparent;}#mermaid-svg-8h3NkYdJsf0v8xal .label text,#mermaid-svg-8h3NkYdJsf0v8xal span{fill:#333;color:#333;}#mermaid-svg-8h3NkYdJsf0v8xal .node rect,#mermaid-svg-8h3NkYdJsf0v8xal .node circle,#mermaid-svg-8h3NkYdJsf0v8xal .node ellipse,#mermaid-svg-8h3NkYdJsf0v8xal .node polygon,#mermaid-svg-8h3NkYdJsf0v8xal .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8h3NkYdJsf0v8xal .rough-node .label text,#mermaid-svg-8h3NkYdJsf0v8xal .node .label text,#mermaid-svg-8h3NkYdJsf0v8xal .image-shape .label,#mermaid-svg-8h3NkYdJsf0v8xal .icon-shape .label{text-anchor:middle;}#mermaid-svg-8h3NkYdJsf0v8xal .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8h3NkYdJsf0v8xal .rough-node .label,#mermaid-svg-8h3NkYdJsf0v8xal .node .label,#mermaid-svg-8h3NkYdJsf0v8xal .image-shape .label,#mermaid-svg-8h3NkYdJsf0v8xal .icon-shape .label{text-align:center;}#mermaid-svg-8h3NkYdJsf0v8xal .node.clickable{cursor:pointer;}#mermaid-svg-8h3NkYdJsf0v8xal .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8h3NkYdJsf0v8xal .arrowheadPath{fill:#333333;}#mermaid-svg-8h3NkYdJsf0v8xal .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8h3NkYdJsf0v8xal .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8h3NkYdJsf0v8xal .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8h3NkYdJsf0v8xal .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8h3NkYdJsf0v8xal .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8h3NkYdJsf0v8xal .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8h3NkYdJsf0v8xal .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8h3NkYdJsf0v8xal .cluster text{fill:#333;}#mermaid-svg-8h3NkYdJsf0v8xal .cluster span{color:#333;}#mermaid-svg-8h3NkYdJsf0v8xal div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8h3NkYdJsf0v8xal .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8h3NkYdJsf0v8xal rect.text{fill:none;stroke-width:0;}#mermaid-svg-8h3NkYdJsf0v8xal .icon-shape,#mermaid-svg-8h3NkYdJsf0v8xal .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8h3NkYdJsf0v8xal .icon-shape p,#mermaid-svg-8h3NkYdJsf0v8xal .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8h3NkYdJsf0v8xal .icon-shape .label rect,#mermaid-svg-8h3NkYdJsf0v8xal .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8h3NkYdJsf0v8xal .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8h3NkYdJsf0v8xal .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8h3NkYdJsf0v8xal :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 应用层

音频、键盘、传感器、控制逻辑
Host

GAP、GATT/ATT、SMP、L2CAP 等
HCI

命令、事件、数据
Controller

链路层/基带、链路管理、调度
RF 射频收发器

发射、接收、频率合成
天线

这张图表达的是逻辑关系,而不是所有芯片的物理布局。实际产品中,Host 和 Controller 可能运行在同一颗芯片上,也可能分别位于主处理器和蓝牙控制器芯片中。

三、Host:蓝牙协议栈的上层部分

Host 可以理解为蓝牙系统中负责"较高层通信规则和设备功能"的部分。它通常运行在主处理器或蓝牙 SoC 的处理器内核上,以软件协议栈的形式实现。

Host 负责的内容因蓝牙技术类型和协议栈实现而有所不同。BLE Host 常见模块包括:

模块 主要职责
GAP(Generic Access Profile) 定义设备发现、广播、连接建立等通用访问行为和角色规则
GATT(Generic Attribute Profile) 定义基于属性的服务与特征数据组织和访问方式
ATT(Attribute Protocol) 提供属性读、写、通知、指示等基础协议操作
SMP(Security Manager Protocol) 处理配对、安全密钥分发及相关安全过程
L2CAP(Logical Link Control and Adaptation Protocol) 为上层提供逻辑通道、数据承载和分段/重组等能力
上层配置文件或服务 规定特定用途的数据模型和交互流程

需要注意:GATT 建立在 ATT 之上;GAP、GATT、SMP、L2CAP 是不同职责的协议或架构模块,并不是简单串行排列的"几个应用层"。

3.1 Host 主要做什么?

以 BLE 温度传感器为例:

  1. 应用程序决定设备需要提供温度数据。
  2. Host 中的 GATT Server 将温度数据组织为服务(Service)和特征(Characteristic)。
  3. GAP 相关功能配置设备如何广播,使附近设备能够发现它。
  4. 连接建立后,Host 配合 ATT/GATT 处理手机对温度特征的读取,或通过通知向手机发送更新。
  5. 如需安全保护,Host 中的 SMP 参与配对和密钥管理。

因此,Host 更关注"数据代表什么、设备应该如何交互、连接后允许进行哪些协议操作"。

四、Controller:蓝牙底层控制部分

Controller 负责执行更靠近无线链路的一系列工作。它将 Host 下发的命令和数据转换为底层链路操作,并把接收到的数据和状态反馈给 Host。

在 BLE 中,Controller 的核心通常包括:

  • Link Layer(LL,链路层):负责广播、扫描、连接事件、信道使用、链路状态和数据包收发规则等。
  • PHY(Physical Layer,物理层):规定无线信号的调制、编码、速率和空中接口等物理特性。
  • 基带与时序控制逻辑:负责数据包处理、定时、信道切换和收发时序等。
  • 射频控制:控制射频电路完成指定信道上的发射和接收。

经典蓝牙 BR/EDR 的 Controller 也有相应的基带、链路控制和射频部分;其具体协议模块名称和工作方式与 BLE 并不完全相同。因此,不能把 BLE 的 Link Layer 结构原样套用到经典蓝牙。

4.1 Controller 主要做什么?

仍以 BLE 温度传感器为例:

  1. Host 配置广播参数和广播数据。
  2. Controller 按照配置,在指定时间和信道上发送广播包。
  3. 手机发起扫描时,Controller 接收并检测空中的广播包。
  4. 建立连接后,Controller 按照连接事件的时序、信道跳转和链路层规则收发数据。
  5. Controller 将接收的数据和链路状态通过 HCI 交给 Host。

Controller 更关注"数据如何按无线链路规则发送出去,以及如何从空中可靠地接收回来"。

五、无线收发部分:把数字数据变成无线信号

无线收发部分通常称为 RF(Radio Frequency,射频)前端或射频收发器,是蓝牙设备真正连接无线电世界的硬件部分。

典型射频链路可以简化为:
#mermaid-svg-OMTm5DEd2CuQDNix{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OMTm5DEd2CuQDNix .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OMTm5DEd2CuQDNix .error-icon{fill:#552222;}#mermaid-svg-OMTm5DEd2CuQDNix .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OMTm5DEd2CuQDNix .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OMTm5DEd2CuQDNix .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OMTm5DEd2CuQDNix .marker.cross{stroke:#333333;}#mermaid-svg-OMTm5DEd2CuQDNix svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OMTm5DEd2CuQDNix p{margin:0;}#mermaid-svg-OMTm5DEd2CuQDNix .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OMTm5DEd2CuQDNix .cluster-label text{fill:#333;}#mermaid-svg-OMTm5DEd2CuQDNix .cluster-label span{color:#333;}#mermaid-svg-OMTm5DEd2CuQDNix .cluster-label span p{background-color:transparent;}#mermaid-svg-OMTm5DEd2CuQDNix .label text,#mermaid-svg-OMTm5DEd2CuQDNix span{fill:#333;color:#333;}#mermaid-svg-OMTm5DEd2CuQDNix .node rect,#mermaid-svg-OMTm5DEd2CuQDNix .node circle,#mermaid-svg-OMTm5DEd2CuQDNix .node ellipse,#mermaid-svg-OMTm5DEd2CuQDNix .node polygon,#mermaid-svg-OMTm5DEd2CuQDNix .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OMTm5DEd2CuQDNix .rough-node .label text,#mermaid-svg-OMTm5DEd2CuQDNix .node .label text,#mermaid-svg-OMTm5DEd2CuQDNix .image-shape .label,#mermaid-svg-OMTm5DEd2CuQDNix .icon-shape .label{text-anchor:middle;}#mermaid-svg-OMTm5DEd2CuQDNix .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OMTm5DEd2CuQDNix .rough-node .label,#mermaid-svg-OMTm5DEd2CuQDNix .node .label,#mermaid-svg-OMTm5DEd2CuQDNix .image-shape .label,#mermaid-svg-OMTm5DEd2CuQDNix .icon-shape .label{text-align:center;}#mermaid-svg-OMTm5DEd2CuQDNix .node.clickable{cursor:pointer;}#mermaid-svg-OMTm5DEd2CuQDNix .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OMTm5DEd2CuQDNix .arrowheadPath{fill:#333333;}#mermaid-svg-OMTm5DEd2CuQDNix .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OMTm5DEd2CuQDNix .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OMTm5DEd2CuQDNix .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OMTm5DEd2CuQDNix .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OMTm5DEd2CuQDNix .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OMTm5DEd2CuQDNix .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OMTm5DEd2CuQDNix .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OMTm5DEd2CuQDNix .cluster text{fill:#333;}#mermaid-svg-OMTm5DEd2CuQDNix .cluster span{color:#333;}#mermaid-svg-OMTm5DEd2CuQDNix div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OMTm5DEd2CuQDNix .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OMTm5DEd2CuQDNix rect.text{fill:none;stroke-width:0;}#mermaid-svg-OMTm5DEd2CuQDNix .icon-shape,#mermaid-svg-OMTm5DEd2CuQDNix .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OMTm5DEd2CuQDNix .icon-shape p,#mermaid-svg-OMTm5DEd2CuQDNix .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OMTm5DEd2CuQDNix .icon-shape .label rect,#mermaid-svg-OMTm5DEd2CuQDNix .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OMTm5DEd2CuQDNix .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OMTm5DEd2CuQDNix .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OMTm5DEd2CuQDNix :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 待发送数字数据
调制与发射处理
功率放大器
天线
低噪声放大器
接收与解调处理
恢复出的数字数据

发射时,设备根据蓝牙物理层规定处理数字数据,生成射频信号,并通过功率放大和天线辐射出去。接收时,天线获取微弱的无线信号,射频接收电路进行放大、滤波和下变频等处理,再由后续电路完成解调和数据恢复。

实际 RF 芯片还可能包含频率合成器、混频器、滤波器、模数/数模转换器以及校准电路等。具体实现会因芯片架构而异。

5.1 RF 与 Controller 是什么关系?

RF 与 Controller 不是互相替代的关系:

  • Controller 决定何时收发、使用哪个信道、采用什么链路参数,并处理链路层数据。
  • RF 电路根据 Controller 的控制完成真实的射频发射和接收。
  • PHY 横跨数字基带处理与射频实现等部分,不能简单地认为 PHY 就等于 RF 芯片。

可以把 Controller 理解为"无线通信的执行与控制者",把 RF 理解为"完成无线信号收发的硬件通道"。

六、Host 与 Controller 之间的 HCI 接口

HCI(Host Controller Interface,主机控制器接口)是 Host 和 Controller 之间标准化的逻辑接口。它定义了双方如何交换命令、事件和数据。

常见的 HCI 交互类型包括:

类型 方向(典型情况) 用途
HCI Command Host → Controller Host 要求 Controller 执行操作,例如设置广播参数、启动扫描
HCI Event Controller → Host Controller 报告状态或操作结果,例如命令完成、连接建立
HCI ACL Data Host ↔ Controller 承载异步连接数据
HCI ISO Data Host ↔ Controller 在支持相关功能的系统中承载等时数据

HCI 是逻辑协议接口,不等于某一种固定的物理连线。它可以通过 UART(常见于 H:4 等传输封装)、USB、SPI 等方式承载,也可以在同一芯片内部通过厂商定义的接口或共享内存等方式实现。

6.1 一个简单的工作例子:启动 BLE 广播

RF/天线 Controller HCI Host 应用程序 RF/天线 Controller HCI Host 应用程序 #mermaid-svg-VabXqDdepghxQEXM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VabXqDdepghxQEXM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VabXqDdepghxQEXM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VabXqDdepghxQEXM .error-icon{fill:#552222;}#mermaid-svg-VabXqDdepghxQEXM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VabXqDdepghxQEXM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VabXqDdepghxQEXM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VabXqDdepghxQEXM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VabXqDdepghxQEXM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VabXqDdepghxQEXM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VabXqDdepghxQEXM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VabXqDdepghxQEXM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VabXqDdepghxQEXM .marker.cross{stroke:#333333;}#mermaid-svg-VabXqDdepghxQEXM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VabXqDdepghxQEXM p{margin:0;}#mermaid-svg-VabXqDdepghxQEXM .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VabXqDdepghxQEXM text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-VabXqDdepghxQEXM .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-VabXqDdepghxQEXM .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-VabXqDdepghxQEXM .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-VabXqDdepghxQEXM .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-VabXqDdepghxQEXM #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-VabXqDdepghxQEXM .sequenceNumber{fill:white;}#mermaid-svg-VabXqDdepghxQEXM #sequencenumber{fill:#333;}#mermaid-svg-VabXqDdepghxQEXM #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-VabXqDdepghxQEXM .messageText{fill:#333;stroke:none;}#mermaid-svg-VabXqDdepghxQEXM .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VabXqDdepghxQEXM .labelText,#mermaid-svg-VabXqDdepghxQEXM .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-VabXqDdepghxQEXM .loopText,#mermaid-svg-VabXqDdepghxQEXM .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-VabXqDdepghxQEXM .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-VabXqDdepghxQEXM .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-VabXqDdepghxQEXM .noteText,#mermaid-svg-VabXqDdepghxQEXM .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-VabXqDdepghxQEXM .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VabXqDdepghxQEXM .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VabXqDdepghxQEXM .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-VabXqDdepghxQEXM .actorPopupMenu{position:absolute;}#mermaid-svg-VabXqDdepghxQEXM .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-VabXqDdepghxQEXM .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-VabXqDdepghxQEXM .actor-man circle,#mermaid-svg-VabXqDdepghxQEXM line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-VabXqDdepghxQEXM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 请求开始广播 发送设置参数/广播数据等命令 传递 HCI Command 返回命令完成事件 上报执行结果 发送启用广播命令 传递启用命令 按时序和信道发射 射频硬件执行收发 通过事件报告相关状态

示意流程省略了具体命令顺序、控制器内部处理和广播事件细节。它主要帮助理解:应用提出需求,Host 组织协议操作,HCI 传递控制信息,Controller 执行底层动作,RF 完成空中收发。

七、Host 和 Controller 的部署方式

蓝牙系统的逻辑架构相对稳定,但物理部署方式可以不同。

7.1 单芯片集成

很多蓝牙 SoC 将处理器、存储器、Host 协议栈、Controller 和 RF 集成在同一颗芯片中。模块之间通过芯片内部总线或软件接口通信。

优点是体积小、功耗和成本容易优化,常见于耳机、键盘、手环和物联网传感器等设备。

7.2 主机处理器 + 独立蓝牙控制器

在另一种架构中,Host 运行在手机、电脑或嵌入式主处理器上,Controller 则位于独立蓝牙芯片中,两者通过 UART、USB 或其他接口连接。

例如,操作系统中的蓝牙协议栈可能承担 Host 的大部分工作,而蓝牙芯片承担 Controller 和 RF 的工作。

7.3 为什么要分层?

Host 与 Controller 分层有利于:

  • 职责清晰:上层协议和底层无线链路可以分别开发、调试。
  • 硬件复用:同一类 Controller 可以配合不同 Host 平台使用,前提是接口和功能兼容。
  • 便于移植:协议栈可以移植到不同处理器或操作系统。
  • 降低复杂度:应用开发者通常不需要直接控制射频寄存器或实现链路层时序。

但分层并不意味着所有产品都必须使用两颗芯片。逻辑上的 Host/Controller 分工可以存在于同一颗 SoC 内部。

八、经典蓝牙与 BLE 架构上的共性和差异

经典蓝牙 BR/EDR 与 BLE 都可以从 Host、Controller 和 HCI 的角度理解,但它们的具体协议模块、链路行为和数据承载方式存在差异。

对比项 经典蓝牙 BR/EDR 低功耗蓝牙 BLE
系统分层 有 Host、Controller 等层次 有 Host、Controller 等层次
底层链路 基带与链路控制等机制 BLE Link Layer
典型上层协议 L2CAP、SDP、RFCOMM、音频相关协议等 L2CAP、ATT、GATT、SMP 等
典型用途 传统音频、串口类数据、外设连接等 传感器、低功耗外设、广播与属性数据交互等
无线工作方式 面向 BR/EDR 的时隙、跳频和链路机制 面向 BLE 的广播、扫描、连接事件和信道机制

这张表是入门级概括。实际设备可能同时支持 BR/EDR 和 BLE(双模设备),但两种模式的协议路径并不因此完全合并。

九、用一个完整场景串联各个模块

假设手机要读取 BLE 温度传感器的数据:

  1. 传感器应用层准备温度值,并定义要对外提供的服务和特征。
  2. 传感器 Host通过 GAP 相关功能配置广播,并通过 GATT/ATT 组织温度数据。
  3. 传感器 HCI将 Host 的控制命令和数据交给 Controller(如果 Host 与 Controller 分离)。
  4. 传感器 Controller控制链路层执行广播;RF 电路将广播信号发射到空中。
  5. 手机 RF 与 Controller接收并处理广播,手机 Host 获得设备发现信息。
  6. 手机与传感器建立连接后,双方 Controller 按链路层规则交换数据。
  7. 手机 Host 通过 ATT/GATT 读取温度特征;传感器 Host 返回相应属性值。
  8. 数据经过 Controller 和 RF 传输到手机,最终由手机应用显示温度。

从这个过程可以看出,蓝牙通信不是"应用直接把数据发给天线",而是多个层次分工协作的结果。

十、初学者容易混淆的几个概念

10.1 Host 不等于主机设备

Host 是蓝牙架构中的协议栈部分,不是指手机、电脑这类"主机设备"的日常称呼。一个蓝牙外设内部也可以运行 Host。

10.2 Controller 不等于整个蓝牙芯片

Controller 是逻辑功能集合。某些芯片只实现 Controller,另一些 SoC 则把 Host、Controller 和 RF 集成在一起。

10.3 HCI 不等于 UART

HCI 定义 Host 与 Controller 之间交换什么信息;UART 是一种物理/传输接口。UART 可以承载 HCI,但 HCI 并不限定只能使用 UART。

10.4 PHY 不完全等于 RF

PHY 定义物理层通信规则和信号特性,涉及数字基带与射频实现;RF 是完成射频信号收发的硬件电路部分。

10.5 GAP、GATT 不属于 Controller 的典型核心模块

在 BLE 常见架构中,GAP、GATT、ATT、SMP 等属于 Host 侧协议架构;Link Layer 和 PHY 则属于 Controller 侧的核心部分。不同芯片厂商可能在内部做不同程度的集成或优化,但不应因此混淆标准架构中的职责。

十一、总结

蓝牙系统可以从三个核心部分来理解:

  • Host:负责较高层协议、设备发现与连接管理、安全过程、数据组织和上层服务。
  • Controller:负责底层链路控制、时序、信道访问和数据包收发。
  • RF 无线收发部分:负责真实无线信号的发射与接收。

Host 与 Controller 之间通常通过 HCI 交换命令、事件和数据。它们既可以分布在不同芯片上,也可以集成在同一颗 SoC 中。

掌握这套架构后,再学习 GAP、GATT、ATT、SMP、L2CAP、Link Layer、PHY 等具体协议时,就能明确每个模块处于系统的哪个位置、承担什么职责,以及它们之间如何协作。

相关推荐
Linux-lucky2 小时前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
金色光环4 小时前
【DSP学习】C2000_ADC中断_笔记
笔记·学习
Дерек的学习记录4 小时前
Unreal Engine 5:第三人称运动系统和人物动画
开发语言·学习·ue5
zhangrelay4 小时前
mrpt杂乱笔记-26-10-31
笔记·学习
衡石科技4 小时前
让多轮问数保持口径一致:Data Agent 的上下文、偏好与学习开关
人工智能·学习·安全
東隅已逝,桑榆非晚6 小时前
算法2. 双指针法-复写零
c++·笔记·学习·算法
Star(up up up)6 小时前
Docker系列---Docker容器基本命令(新手小白保姆级实操教程)
运维·学习·程序人生·青少年编程·docker·容器·dubbo
无心水6 小时前
22、数学与经济管理(运筹学) 核心考点与学习笔记
人工智能·笔记·学习·架构师·软考·软考架构师·软考系统架构师
小弥儿7 小时前
38K星的开源项目 t3code:给 Claude Code 和 Codex 装一个手机遥控器
学习·智能手机·开源·github