news 2026/10/16 21:02:13

蓝牙基础(六):蓝牙传输层 HCI 工作原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝牙基础(六):蓝牙传输层 HCI 工作原理

前言

在《蓝牙基础(二):蓝牙核心系统架构》中,我们有介绍到蓝牙分层架构设计的核心是:Host(主机)、Controller(控制器)与 HCI(Host Controller Interface,主机控制器接口)。

它们之间的关系、可以简单理解为:Host 是大脑,Controller 是身体,HCI 是它们之间的通信通道。

回到顶部

(一)HCI 简介

(1)蓝牙协议栈中的 HCI

image

Host(主机) :运行在主处理器上(如 MCU、Linux、Windows 等),主要负责上层协议和应用逻辑。

Controller(控制器):Controller 通常集成在一个蓝牙芯片中(有时称为 Bluetooth SoC),负责底层无线通信功能。

HCI(Host Controller Interface):HCI 是 Host 和 Controller 之间的 标准接口协议,它定义了两者如何交换命令、事件和数据。通信方式主要有:UART、USB、SPI、SDIO 等

以 USB 蓝牙适配器为例,插入电脑的那个 USB 蓝牙适配器是 Controller,PC 机系统是 Host,它们通过 USB HCI 协议进行数据通信。

image

它们对应的软件层次结构图如下:

image

这里的物理总线,除了 USB 总线,还可以是 SDIO、UART、SPI 等等。

这些总线对 HCI 数据包是透明的传输,也就是说,它不用理解 HCI 的语义,仅仅负责 HCI 包的传输。

这样就可以保证不同硬件接口、不同厂商的模块能共用主机栈,而不必改写高层协议

(2) 蓝牙数据流

要将一个用户数据,从一个蓝牙设备发送到另外一个蓝牙设备,数据从应用层用户数据开始,经过主机(Host)、控制器(Controller),最终经由射频(RF)模块发射出去,另一端再反向流回。

image

Host 负责逻辑和协议(决定发什么数据、什么时候发)。

Controller 负责时序和无线电(怎么发、用哪个信道、怎么跳频)。

HCI 是桥梁(命令/事件/数据的标准接口)。

Physical Bus 是管道(USB、UART、SDIO等传输媒介)。

它的完整数据流如下:

image

如果要对它们进行简化,可以简化成如下流程:

Host Side (PC)

──────────────────────────────────────────

L2CAP / RFCOMM

↓

HCI Library

↓

USB Stack → USB Host Controller →───┐

│

Controller Side (Bluetooth USB Device)

──────────────────────────────────────────

USB Device Controller ← Bluetooth USB Firmware

↓

Bluetooth LM / LC

↓

Bluetooth Radio → Over-the-air → Other Device

可以看到,数据数从 host 到 controller,必须经过 USB 协议栈。当然,如果是使用其它的通信总线,那就是其它总线对应的驱动。

(3) HCI 数据包

HCI 在协议中的位置如下:

image

通过 USB适配器 + Wireshark 抓取 蓝牙 HCI 数据包,信息如下:

image

通过 Wireshark 抓取到的蓝牙 HCI 的数据包,我们可以看到有抓到 USB、HCI_USB、HCI_CMD、HCI_EVT.. 这些协议的数据。

USB :这是最底层的总线协议,表示所有通过 USB 物理链路 传输的数据包。

HCI_USB :这是 Wireshark 的 USB-HCI 解码层。用于承接 USB 层和HCI 层之间的数据。它不是新的协议,而是 Wireshark 把 USB 层数据识别为 蓝牙 HCI over USB 的结果。

HCI_CMD、HCI_EVT:通过 HCI_USB 解析出来的真实的蓝牙HCI 数据包

截图最开始的一串USB数据包,是一个USB枚举流程,以便 Wireshark 识别所有的 USB 设备。

回到顶部

(二) HCI 数据类型

主机与控制器之间通过 HCI 传输层的数据主要有:HCI 命令包、HCI 事件包、HCI 数据包(ACL/ISO/SCO)。

类型

标识符

方向

用途

HCI Command Packet 0x01

Host → Controller

命令控制

HCI ACL Data Packet 0x02

双向

异步数据传输(L2CAP)

HCI Synchronous Data Packet 0x03

双向

实时音频传输(SCO/eSCO)

HCI Event Packet 0x04

Controller → Host

命令结果或事件通知

HCI ISO Data Packet 0x05

双向

BLE Isochronous 数据传输

(1)HCI Command Packet 命令包

数据方向:由 host 发往 controller。

host 通过命令包告诉 controller 要执行的操作,例如建立连接、设置参数、发射广播等。

数据包格式:

| Packet Indicator (1B) | Opcode (2B) | Parameter Total Length (1B) | Parameters (N bytes) |

Packet Indicator:固定为 0x01

Opcode:由 OCF(Command Field) + OGF(Group Field) 组成(16bit)

OGF:命令分组(如 Link Control, Controller & Baseband, etc.)

OCF:命令具体功能编号

Parameter Total Length:参数长度(0~255字节)

Parameters:命令的具体参数字段

(2)HCI Event Packet 事件包

数据方向:由 controller 发往 host

controller 返回执行命令的结果或状态通知,例如命令完成、设备连接成功、接收到广播等。

数据包格式:

| Packet Indicator (1B) | Event Code (1B) | Parameter Total Length (1B) | Parameters (N bytes) |

Packet Indicator:固定为 0x04

Event Code:事件类型(如 Command Complete、Disconnection Complete 等)

Parameter Total Length:参数长度

Parameters:具体事件参数

常见事件有:

事件名称

Event Code

说明

Command Complete

0x0E

命令执行完成

Command Status

0x0F

命令状态返回

Connection Complete

0x03

连接建立

Disconnection Complete

0x05

断开连接

(3)HCI ACL Data Packet 异步数据包

ACL(Asynchronous Connection-Less) 异步无连接数据包。用于传输 L2CAP 层 或上层的普通数据,如 ATT、SDP、RFCOMM 等。

数据包格式:

| Packet Indicator (1B) | Handle + PB + BC (2B) | Data Total Length (2B) | Data (N bytes) |

Packet Indicator:固定为 0x02

Handle (12 bits):连接句柄

PB(2 bits):Packet Boundary 标志,指示分片状态

BC(2 bits):Broadcast Flag(点对点或广播)

Data Total Length:数据总长度(最大 65535)

Data:L2CAP 层数据

(4)HCI Synchronous Data Packet 同步数据包

用于同步语音数据(例如 BR/EDR 语音连接)或其它同步时延敏感数据

用于传输 实时音频 数据(SCO 或 eSCO 链路)。

数据包格式:

| Packet Indicator (1B) | Handle + Packet Status Flag (2B) | Data Total Length (1B) | Data (N bytes) |

Packet Indicator:固定为 0x03

Handle:连接句柄

Packet Status Flag:包状态(如正确接收、数据丢失)

Data Total Length:数据长度(通常很短,如 60 字节以内)

Data:音频数据(CVSD, mSBC, etc.)

(5)HCI ISO Data Packet 等时性数据包

为 BLE Isochronous Channels 引入的新类型(自 Bluetooth 5.2 起支持)。

用于 BLE Audio(LE Audio)、广播音频、CIS/BIS 数据传输。

| Packet Indicator (1B) | Handle + PB + TS (2B) | Data Total Length (2B) | ISO Data Load (N bytes) |

Packet Indicator:固定为 0x05

Handle (12 bits):ISO 链路句柄(与 CIS_ID/BIS_ID 关联)

PB(2 bits):Packet Boundary 标志

TS(1 bit):是否包含时间戳

Data Total Length:ISO 数据长度

ISO Data Load:包含 ISO Header + Audio/Other Data

回到顶部

(三)HCI 中的 Handle 与 ID(Identifiers)

(1)Handle

在蓝牙协议中,Handle(句柄) 是用来标识一个逻辑连接(logical connection) 的编号。

它是控制器(Controller)为每个连接分配的一个唯一标识符,主机(Host)通过这个 Handle 来引用该连接。

在 HCI 层(Host Controller Interface),Handle 的主要作用包括:

区分不同的连接

蓝牙设备可能同时维护多个连接(比如同时连接耳机、手表等)。

每个连接都有独立的 Handle,用来区分是哪条链路的数据。

数据传输中的索引

在 HCI ACL Data Packet(异步数据包)、Synchronous Data Packet(同步数据包)、ISO Data Packet(ISOchronous包) 中,开头字段就包含了 Handle。

控制器根据 Handle 知道这帧数据属于哪个连接。

命令与事件匹配

当 Host 发送 HCI 命令(例如 HCI_Disconnect)时,需要提供对应的 Handle。

控制器在返回事件(Event)时也会带上这个 Handle,让 Host 知道是哪个连接断开了或状态变化。

Handle 在 HCI 层中的作用

+---------------------------+

| Host (HCI) |

+---------------------------+

|

| HCI Commands / Data

v

+---------------------------+

| Controller (HCI) |

+---------------------------+

| | |

Handle0 Handle1 Handle2

ACL#1 ACL#2 SCO#1

(2)ID(Identifiers)

HCI 的 ID 是在 LE Audio(低功耗音频)或 ISO 数据流 中使用的编号,它不是连接编号,而是音频流编号。

蓝牙里有两种 ISO 流:

CIS(Connected Isochronous Stream):用于点对点音频,比如耳机左右声道。

BIS(Broadcast Isochronous Stream):用于广播音频,比如一个扬声器广播音乐,多个耳机收听。

对应的 ID 就是:

名称

含义

用途

CIG_ID

CIS Group ID

标识一个“音频组”,比如“立体声”这一组。

CIS_ID

CIS Stream ID

标识组内某条具体的流,比如“左声道”。

BIG_ID

Broadcast Group ID

标识一个广播组,比如“公开音频频道”。

BIS_ID

Broadcast Stream ID

标识组内某条具体广播流,比如“英语声道”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 8:04:26

5分钟掌握GitHub入门教程优化:从零基础到高效协作

5分钟掌握GitHub入门教程优化:从零基础到高效协作 【免费下载链接】introduction-to-github Get started using GitHub in less than an hour. 项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-github 想要快速掌握GitHub的使用技巧&…

作者头像 李华
网站建设 2026/10/16 10:19:02

快速上手:Color Thief智能配色方案实战指南

快速上手:Color Thief智能配色方案实战指南 【免费下载链接】color-thief Grab the color palette from an image using just Javascript. Works in the browser and in Node. 项目地址: https://gitcode.com/gh_mirrors/co/color-thief 面对品牌视觉统一和网…

作者头像 李华
网站建设 2026/10/16 13:30:39

A16z 谈 AI 留存的「水晶鞋效应」:第一个月,决定了一切 都是一次认真“试鞋”的机会:这一次,能不能真的解决我手里的问题?

A16z 谈 AI 留存的「水晶鞋效应」:第一个月,决定了一切 原创 Cubo Group 矩阵魔方AI出海 2025年12月12日 19:45 陕西 在传统 SaaS 时代,有一条几乎没人怀疑的共识:产品早期留存差,是正常现象。 MVP 功能不全&#…

作者头像 李华
网站建设 2026/10/15 19:03:46

5、深入了解 Ubuntu 网络配置与 X Window 系统

深入了解 Ubuntu 网络配置与 X Window 系统 1. Ubuntu 无线网络配置 在过去,为 Linux 系统配置无线网络是一件非常繁琐的事情,需要执行许多复杂的步骤才能连接到无线网络。不过,现在情况有了很大的改善。Ubuntu 系统中包含了一个名为 Network Manager 的实用工具,它让连接…

作者头像 李华
网站建设 2026/10/16 16:39:53

分享几则中年夫妻关系的有益建议

著名演员何晴去世了,很震惊,她是我最喜欢的女演员,曾经出演过四大名著。分享几则中年夫妻关系的有益建议: 1、可以容忍对方的生活习惯。包括拉S放P、不叠被、不洗衣,但要管好自己,还是尽量别过份坦荡。 2、…

作者头像 李华
网站建设 2026/10/15 23:36:26

(108页PPT)园区大数据治理解决方案(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (108页PPT)园区大数据治理解决方案.pptx_智慧园区总体规划PPT资源-CSDN下载 资料解读:《园区大数据治理解决方案》 详细资料请看本解读文章的最后内容。 在数…

作者头像 李华