技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

关于 Bluetooth Stack 技术分析

项目背景与痛点

蓝牙技术广泛应用于各类设备间短距离无线通信之中,从手机到电脑,从可穿戴设备到汽车诊断系统,应用覆盖极为广泛。然而,尽管蓝牙应用广泛,高效且易维护的双模蓝牙协议栈实现却相对稀少。此项目正是针对这一痛点,提供了一个运行在多种平台(如 STM32 和 Linux)上的跨平台蓝牙协议栈——btstack。该项目致力于弥补现有蓝牙协议栈的不足,提供全面且可扩展的解决方案。

核心技术揭秘

技术架构

btstack 具有高度模块化的架构,经过精心设计,可以方便地在不同的硬件平台上应用,从而满足不同用户的需求。核心模块包括 HCI (主机控制器接口)、L2CAP (逻辑链路控制和分段协议) 以及各个上层应用协议,如 SDP(服务发现协议)、RFCOMM(串行线路仿真协议)、HFP(手持电话配置文件)、SPP(串行端口配置文件)等。下图表展示了双模蓝牙协议栈各组件间的关系与数据流动方向。

graph TD A[用户应用] --> B[协议栈] B --> C[HCI] C --> D[物理层] B --> E[L2CAP] E --> F{"BT Profile"} F -->|1| G[SDP] F -->|2| H[RFCOMM] F -->|3| I[HFP] F -->|4| J[SPP] F -->|5| K[A2DP] F -->|6| L[AVRCP] F -->|7| M[AVDTP] F -->|8| N[AVCTP] F -->|9| O[OBEX] F -->|10| P[PBAP]

实现原理

从技术实现角度,项目运用 C 语言编写,确保了跨平台的兼容性。HCI 层作为蓝牙协议栈的基础,决定了蓝牙设备间如何进行通信;而 L2CAP 层负责数据分段和重组、流量控制等功能。项目中 L2CAP 实现了分段、重组和基本的数据包管理功能,规范了数据流的传输。此外,btstack 良好的分层设计也意味着上层应用协议的扩展变得异常简单。

功能亮点与差异

相较于其他蓝牙协议栈,btstack 的设计意图非常明确,旨在最大限度发挥硬件潜力并提供更高的可移植性。它自带完整的单元测试,且有活跃的社区支持,为项目维护和功能扩展提供了强大后盾。其对不同协议的支持广泛,如 HFP、RFCOMM 等高级蓝牙应用协议,使得开发者可以更容易地在现有基础上进行二次开发。简而言之,该开源项目不仅提供了一揽子的解决方案,而且表现出了良好的扩展性,符合现代嵌入式系统的需求。

应用场景与落地建议

btstack 适用于需要低功耗且要求高性能的物联网设备、嵌入式开发平台以及智能设备间进行数据交换的场景。在部署此协议栈时,务必检查目标硬件是否符合最低要求并评估集成的可能性。同时,根据具体的应用场景选择合适的蓝牙协议,对安全性和数据传输速率有特定要求的项目,对上下层协议的选择也会有不同的倾向。

对于开发人员来说,应当注重于理解底层蓝牙硬件的特性,并利用此协议栈提供的丰富接口进行有针对性的开发。保持对项目更新的跟踪,对最新的协议及安全更新给予足够关注,从而提高在未来版本中集成新特性的能力。

综合评价

btstack 项目凭借其丰富的功能模块、良好的可移植性以及活跃的社区支持,已成为蓝牙协议栈领域一股不容忽视的力量。它在资源紧缺的嵌入式平台上的优势尤为明显,从技术架构来看,实现了模块化设计和跨平台兼容性,为需要在多种平台上使用蓝牙协议栈的开发团队提供了灵活高效的选择。尽管可能存在与其他商业级协议栈在性能上的差异,但从投入产出比来看,这对追求高性价比的开发者有着无可比拟的优势。

此外,btstack 在持续更新与维护的背景下未来可能性广阔。因此,如果要求项目能够提供丰富的底层蓝牙支持,并能兼顾开发效率和成本控制的项目来说,btstack 是一个值得考虑的选择。

关于

GitHub 原始描述(英文)

这是一个开源的双模蓝牙协议栈(bluetooth.stack)(btstack),可以运行在STM32,Linux.,包含HCI,L2CAP,SDP,RFCOMM,HFP,SPP,A2DP,AVRCP,AVDTP,AVCTP,OBEX,PBAP等协议,后续会继续维护,以达到商用的目的

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
873
价值分
347
活跃状态
活跃

语言占比

Assembly
Batchfile
C
C#
CSS
HTML
Makefile
Python

README

蓝牙协议栈 Bluetooth stack (English)

这是一个包含传统蓝牙跟低功耗蓝牙的协议栈,属于超轻量级蓝牙协议栈,用作学习蓝牙协议栈的人使用

CSR8311 CYW54591 BCM43430A
(AP6212A)
BCM4345C5
(AP6256)
ESP32
STM32F103 √ × × × x
STM32F407 √ × × × x
STM32F412 √ × × × x
STM32H750 √ × × × x
Linux √ √ √ √ √
Windows × × × × x
购买连接: 购买开发板连接(点击我) 暂未上线 暂未上线 暂未上线 购买开发板连接(点击我)

源码目录结构

目录文件夹 子目录文件夹 说明
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

工程使用方式

通用

在bt_config.h中配置你想要的功能,比如debug/profile enable/paring mode/chipset select/spec profile config…

STM32下使用

前提条件:1)Keil安装 2)STM32F1/STM32F4对应的pack包 3)Download工具(我们选择的是ST-LINK)

打开工程project下的对应的stm32f10x_bb_bt/stm32f10x_bb_bt/stm32f412_bb_bt直接编译下载即可

Linux下使用

前提条件:

1)安装alsa工具:sudo apt install alsa

1)USB转UART工具(H4 transport需要硬件流控)并且接线正确,根据丝印TX接TX,RX接RX,CTS接CTS,RTS接RTS,VCC5V,GND

2)一般需要给串口权限,比如sudo chmod 777 /dev/ttyUSB0(如果不是这个路径要修改code)

打开工程project下的linux_bt make一下,生成bt_demo后直接运行即可

交流社区:

1. CSDN技术文章专栏(点击我)

2. 论坛(点击我)

视频教程:

蓝牙协议栈教程(点击我)

平台介绍:

目前我们的蓝牙协议栈可以在STM32F103以及在Linux跑起来,蓝牙芯片是CSR8311,支持
PROTOCOL:HCI L2CAP RFCOMM SDP AVDTP AVCTP ATT SMP
PROFILE: HFP A2DP AVRCP PBAP SPP GATT
希望会有更多的人来加入进来一起协作开发profile以及蓝牙芯片的工作。

蓝牙协议栈架构:

评论

暂无评论