说明
目前市面上支持LE Audio的USB dongle很少,如果要在Ubuntu Sim上调试LE Audio,基本只能用蓝牙官方PTS Dongle,但目前国内很难买到。本文介绍一种破解PTS Dongle的方法,以及如何在ubuntu上用bluez + zephyr调试LE Audio。
官方Dongle
蓝牙SIG认证的PTS Dongle有下图两种:左边的只能过蓝牙4.2认证,LE/BR/EDR都支持,用的是CSR的芯片,99美元;右边的可以支持蓝牙5.2的认证,但只支持BLE不支持BR/EDR,用的是Nordic的芯片。LE Audio需要右边Laird Connectivity这款Dongle。
(官方链接 https://store.bluetooth.com/)
破解方法
蓝牙官方的PTS Dongle是用的是Nordic 52840方案,和Nordic的nRF52840 Dongle非常相似,只不过加了个USB外壳,理论上是可以直接把PTS的 Firmware直接刷入nRF52840 Dongle来使用
-
购买nRF52840 Dongle。Nordic官方的nRF52840 Dongle淘宝上很多卖的,100元左右,缺点是不带外壳。也可以在淘宝上找其他带外壳的52840 Dongle,价格也便宜。
-
安装PTS Firmware Upgrade Software。SIG官网下载速度很慢,上传到这里暂时无法在文档外展示此内容
-
插上Dongle,运行PTS Firmware Upgrade Software
-
点击Next软件会搜索连接的dongle,如下图
-
接着点击“Next”,登陆SIG账号(如果没有SIG账号需要用公司邮箱申请)
-
此时直接用这个软件升级会失败,原因是我们买的dongle和PTS dongle的bootloader不同过不了校验,但这个过程会把PTS Firmware下载到本地,我们可以找出来烧录进去
-
找到PTS Firmware,通常在\AppData\Local\PTSFirmwareUpgradeSoftware 路径下
-
安装nrfutil,执行下面命令刷机
.\nrfutil dfu usb-serial -pkg b15baf09-b224-446a-bd51-c16467c1762c.bin -p COM4
-
刷机成功后就可以当作PTS Dongle来做BQB认证测试了!!!
调试方法
PTS Dongle除了可以做BQB认证外,也可以作为controller在Ubuntu/Vela/Zephyr等系统或仿真器上调试蓝牙Host功能,而且由于是蓝牙SIG官方的Firmware兼容性比其他dongle更好
-
安装依赖项
sudo apt install automake libtool libelf-dev elfutils libdw-dev libjson-c-dev libical-dev libreadline-dev libfftw3-dev
-
下载编译bluez
git clone https://github.com/bluez/bluez.git
git clone git://git.kernel.org/pub/scm/libs/ell/ell.git
cd bluez
./bootstrap-configure --disable-android --disable-midi
make
sudo make install
-
运行btattach
sudo btattach -B /dev/ttyACM0 -S 3000000 -R & //ttyACM0表示串口号
sudo systemctl stop bluetooth
hciconfig -a
-
使用 btproxy 工具打开并监听 UNIX socket
cd ~/bluez
sudo tools/btproxy -u -i 0 & //0表示HCI端口号
-> Listening on /tmp/bt-server-bredrsudo
sudo btmon -Tw btsnoop.cfa //抓取hci log
-
下载zephyr代码,参考https://docs.zephyrproject.org/latest/develop/getting_started/index.html# 搭建zephyr的编译环境
-
编译qemu仿真器下的zephyr le audio应用
west build -b qemu_x86 ~/zephyrproject/zephyr/tests/bluetooth/shell/ --pristine -- -DOVERLAY_CONFIG=audio.conf
-
执行west build -t run 运行zephyr,然后在shell终端执行下面命令初始化le audio,发送le audio广播
bt init
audio init
mcc init
vcs init
bt adv-create conn-nscan ext-adv name
bt adv-data discov
bt adv-start
-
用支持LE Audio的手机连接调试
(如果能买到蓝牙官方的PTS Dongle,建议还是优先选择官方的Dongle)