littlebot
Published on 2025-04-13 / 1 Visits
0

【源码】基于C语言的精简蓝牙协议栈

项目简介

这是一个基于C语言开发的精简蓝牙协议栈,不包含OS部分,具有良好的移植性,支持多种芯片,且保留了好用的GATT Service接口模型,同时具备丰富的日志系统。

项目的主要特性和功能

  1. 轮询架构:不包含OS部分,移植非常方便。
  2. hci同步发送机制:在无OS情况下实现hci sync机制,参考STM32做法,虽增加一定porting难度,但大大降低了蓝牙HCI的使用成本。
  3. Zephyr GATT Service调用接口:保留了Zephyr项目中好用的GATT Service接口模型。
  4. 多芯片支持:支持多种厂商的不同芯片,可通过makefile配置CHIPSET选择。
  5. 日志系统丰富:支持多种debug方式,生成的日志文件保存在output/log目录下,方便分析。

安装使用步骤

编译环境搭建

目前仅支持Windows编译,最终生成exe可在PC上运行。需安装以下环境: - 安装Python3,用于Kconfig、代码格式化、RAM&ROM分析等。装好后运行python_require_env.py脚本安装所需的python环境: shell python python_require_env.py - 安装GCC环境,可参考Win7下msys64安装mingw工具链,笔者使用的是msys64 + mingw。

代码编译

项目由makefile组织编译,编译整个项目执行make all,调用make help可查看帮助。可调整以下参数: - APP:选择example中的例程,默认beacon。 - PORT:选择porting中的环境,即当前平台和HCI接口类型,默认windows_libusb_win32。 - CHIPSET:选择chipset中的芯片种类,默认csr8510_usb

示例编译指令: shell make all APP=beacon PORT=windows_libusb_win32 CHIPSET=csr8510_usb

HCI Dongle部署

USB设备使用

  • 下载Zadig
  • 菜单栏点击Options -> List All Devices。
  • 通过下拉选中当前连接的蓝牙dongle,更换设备driver为libusb-win32

UART设备使用

查看设备的串口号,在代码里配置好即可(后续准备放在Makefile中操作)。

Code Size分析环境搭建及编译

目前仅支持CM0编译,最终生成elf用于评估协议栈Code Size。在Windows环境基础上,还需安装Arm GNU Toolchain。切换到CM0/GCC目录下,调整Makefile中的Toolchain路径,执行make all。参考zephyr对生成的elf进行分析,会生成ram.json和rom.json,可导入到nordic的vscode环境下借助图形化工具分析。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】