大家好,我是杂烩君。
本次我们来介绍一个开源的双模蓝牙协议栈——btstack。
btstack简介
btstack一个包含传统蓝牙跟低功耗蓝牙的协议栈,属于超轻量级蓝牙协议栈,用作学习蓝牙协议栈的人使用。
与其他协议栈的对比

Github链接:
https://github.com/sj15712795029/bluetooth_stack

bluetooth_stack专注于嵌入式平台(如STM32),其代码结构精简高效,支持HCI层以上的核心协议(如L2CAP、ATT、GATT等),而底层依赖芯片自带协议栈(如CSR8311)。这种设计既降低了硬件适配成本,又保留了蓝牙协议的核心功能,特别适合资源受限的嵌入式场景。
btstack可以运行在STM32、Linux上。目前支持的平台:

源码目录结构:

目录文件夹 | 子目录文件夹 | 说明 |
---|---|---|
board | stm32f10x | STM32F103板载外设驱动 |
stm32f407 | STM32F407板载外设驱动 | |
stm32f412 | STM32F412板载外设驱动 | |
bsp | cortex-m3 | Cortex M3 Driver库(M3默认用标准库) |
cortex-m4 | Cortex M4 Driver库(M3默认用HAL库) | |
component | bluetooth | 蓝牙协议栈源码 |
cjson | json源码(目前用于跟上位机交互) | |
fs | file system文件系统,目前用于管理spi flash | |
memory_manager | 内存管理,目前用于管理STM32F407的SRAM | |
ringbuffer | 环形数组,用于蓝牙接收串口数据 | |
mcu_bt_tool | PC上位机,用于控制STM32开发板,以及接受STM32的状态回传 | |
project | stm32f10x_bb_bt | STM32F103裸机(BB:bare board)蓝牙工程 |
stm32f407_bb_bt | STM32F407裸机(BB:bare board)蓝牙工程 | |
stm32f412_bb_bt | STM32F412裸机(BB:bare board)蓝牙工程 | |
stm32h750_bb_bt | STM32H750裸机(BB:bare board)蓝牙工程 | |
linux_bt | Linux 蓝牙工程 | |
windows_bt | Windows蓝牙工程 | |
python_tool | convert_binayr_file_to_array.py | 把二进制文档转换为数据的python工具 |
corvert_opcode_to_ogf_ocf.py | 把HCI opcode转换为OGF,OCF |
目前包含HCI、L2CAP、SDP、RFCOMM、HFP、SPP、A2DP、AVRCP、AVDTP、AVCTP、OBEX、PBAP等协议。
蓝牙协议分层简介
协议缩写 | 全称 | 作用描述 | 关键特性 |
---|---|---|---|
HCI | Host Controller Interface | 主机与蓝牙控制器之间的通信桥梁 | 标准化命令接口,硬件无关性 |
L2CAP | Logical Link Control & Adaption | 数据包分片/重组、协议复用 | 支持CID通道标识,提供逻辑链路 |
SDP | Service Discovery Protocol | 设备间服务发现与属性查询 | 无连接协议,基于UUID匹配服务 |
RFCOMM | Radio Frequency Communication | 模拟串口通信(基于L2CAP) | 支持多路复用,兼容传统串口设备 |
HFP | Hands-Free Profile | 车载/耳机免提通话控制(依赖RFCOMM) | 支持音频传输与电话控制指令 |
SPP | Serial Port Profile | 基于RFCOMM的串口数据透传 | 替代传统有线串口 |
A2DP | Advanced Audio Distribution | 高质量音频流传输(如立体声音乐) | 使用AVDTP协议传输编码音频 |
AVRCP | Audio/Video Remote Control | 媒体播放控制(播放/暂停/音量) | 与A2DP配合使用,支持元数据传输 |
AVDTP | Audio/Video Distribution Transport | 定义音频流传输的建立、配置和管理 | 支持同步信道(SCO/eSCO) |
AVCTP | Audio/Video Control Transport | 传输AVRCP控制指令(基于L2CAP) | 提供可靠指令传输通道 |
OBEX | Object Exchange | 文件/对象传输(如vCard、图片) | 独立于传输层(支持RFCOMM/USB等) |
PBAP | Phone Book Access Profile | 同步手机通讯录(基于OBEX) | 支持vCard格式数据交换 |

-
分层结构:协议栈按功能划分为主机控制层、逻辑链路层、服务发现层、传输协议层和应用协议层。 -
依赖关系: -
RFCOMM/A2DP/AVRCP 依赖 L2CAP 提供的基础传输能力 -
AVDTP/AVCTP 是音视频专用的传输协议 -
OBEX/PBAP 可实现跨传输层的对象交换
-
-
应用场景: -
音频场景:A2DP + AVRCP + AVDTP -
数据传输:SPP + RFCOMM -
设备控制:HFP + PBAP
-
btstack资料
btstack作者是一位经验很丰富的蓝牙车载经验。其csdn博客上也有很多蓝牙相关的文章:
https://blog.csdn.net/xiaoxiaopengbo/category_10215137.html
除此之外,还有配套硬件、上位机与配套视频:


感兴趣的朋友可自行去了解:
https://github.com/sj15712795029/bluetooth_stack