BTStack是一款开源的蓝牙协议栈,它具有很高的可配置性和极小的内存占用量,非常适合小型的、资源有限的设备,例如8或16位嵌入式系统。
支持以下Protocols和Profiles:
Protocols: L2CAP (incl. LE Data Channels), RFCOMM, SDP,BNEP, AVDTP, AVCTP, ATT, SM (incl. LE Secure Connections).
Profiles: GAP, IOP, HFP, HSP, SPP, PAN, A2DP, AVRCPincl. Browsing, GATT.
Beta Stage: HID, HOGP, PBAP.
In Development: BLE Mesh and more.
可以通过(H2) HCI USB、(H4) HCI UART + TI'seHCILL、(H5) HCI Three-Wire UART.等方式与HCI蓝牙模块进行连接。
本文主要初步体验一下BTStack,包括工具的安装以及蓝牙的简单测试。
需要注意的是,BTStack如果用于商业用途,是需要收费的!
需要的工具:
Windows电脑一台;
MSYS2软件安装包;
BTStack源码包;
HCI蓝牙dongle(这里用的是CSR8510A10 dongle)。
1. MSYS2的安装。
首先,根据自己的电脑下载MSYS2软件包。
双击运行安装,指定安装目录,比如d:\msys64:
安装完毕后,修改以下文件,增加两个镜像服务器:
开始菜单,找到MSYS2 MinGW 64-bit运行:
在界面下逐条执行以下命令安装:
pacman -Syu
pacman -Su
pacman -Smingw-w64-x86_64-gcc
pacman -S make
pacman -S vim
pacman -S git
pacman -S python
pacman -S winpty
如有提示缺少文件,可以忽略,如有错误,也可尝试关闭MSYS2后再尝试。
2. 下载、编译BTStack。
下载地址:https://github.com/bluekitchen/btstack
下载后解压到某个文件夹,然后进入该文件夹:
# cd port/windows-winusb
用vim修改btstack_config.h文件(当然也可用windows下的记事本等工具修改),命令:vim btstack_config.h
确保以下一行内容已经存在,没有的话自行添加一下:
#define ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
关于#define ENABLE_SCO_OVER_HCI,如果是windows7系统,这将这行注释掉,如果是windows8或者更高,应该可以不注释掉(未验证)。
然后用make命令进行编译:
3. 安装CSR8510A10 dongle驱动。
我们使用的dongle为CSR8510A10,看BTStack中,也有一些其他品牌的芯片的内容,估计这些芯片也可能是可以使用的:
先将CSR8510A10的dongle插入到PC机上,如果没有安装过其他驱动的话,系统应该会安装自带驱动,也就是识别到了一个蓝牙设备。
我的电脑已经装过CSR的软件了,所以CSR8510A10会自动安装CSR的驱动:
需要更新为Windows下的万能USB驱动—WinUSB,需要用到一个驱动安装软件zadig-2.4.exe,下载地址为:https://zadig.akeo.ie/
打开后找到List All Device:
将原先的CSR驱动替换为WinUSB驱动
成功后在设备管理器中看到以下设备:
驱动更换OK。
4. 初体验BTStack
启动MSYS2 MinGW 64-bit工具,切换到前面编译软件的目录“port/windows-winusb”。
先来测试一下BLE功能,随便选一个程序,比如gatt_counter.exe:
这个时候,用手机的rightblue就可以找到le_counter这个设备了:
顺便也测试一下传统蓝牙,用a2dp_sink_demo.exe来模拟一个蓝牙耳机,与手机连接,并尝试在手机上播放音乐:
可以看到所有的操作都有提示,并且最后播放的音乐会存在avdtp_sink.wav中,听了一下这个文件,效果还可以(废话么,数字音乐啊~)。
总体下来,感觉这个BTStack挺强大的,对于学习蓝牙协议栈应该有不小的帮助。