如何使用HCI log调试经典蓝牙?

来源:泰凌微电子 #泰凌微电子# #蓝牙# #HCI log#
1.8w

泰凌TLSR9系列芯片支持经典蓝牙和低功耗蓝牙5.3 各项核心规范,目前开发者可以基于泰凌提供的协议栈和参考设计,开发各种音频相关产品,其中包括:双模低延时TWS耳机、双模低延时头戴式耳机,双模蓝牙音响,双模蓝牙手表和穿戴类产品等。本文以泰凌双模低延时头戴式耳机为例,介绍开发产品时如何抓取、过滤、分析经典蓝牙相关Profile(以SPP为例),其他Profile也可通过类似分析SPP的方法进行分析。

在调试开发经典蓝牙相关产品的时候,往往需要分析Profile流程是否正确,发出的数据包格式是否正常。而市面上抓取BR/EDR数据的仪器往往比较昂贵,不像LE可以使用普通的Sniffer抓取。此时我们可以通过BT master 设备成生的HCI log 调试经典蓝牙。

抓取HCI log

不同系统获取HCI log的方式有差异,手机可直接在调试模式下生成。本文主要介绍在Windows 环境下通过USB 蓝牙适配器抓取HCI log的方法。建议使用外部USB 蓝牙适配器,在禁用主板上的蓝牙适配器后,再使用Wire shark抓取外部的USB 蓝牙适配器。

为方便演示,我们在编译双模低延时Headset工程前(以下统称Headset),需要先使能 MY_BT_SPP_ENABLE,再将SPP的Service class ID设置为 0x1101(修改为图1所示即可)。

(图1)

修改完成后,将生成好的固件烧录到EVB(C1T213A20_V1.3),再进行如下动作:

1、打开Wire shark,将USBPcap1 设置为“Capture from newly connected device”;

2、插上USB 蓝牙适配器;

*注意:这两步很关键,否则可能抓取的数据无法解析,或者解析不完整。

执行完如上两步,可以看到蓝牙适配器已枚举完成(图2)。

(图2)

此时我们再双击 EVB上的SW5让Headset成为可发现状态,在蓝牙的搜索界面中,可以发现一个“Game Headset”的耳机设备。连接完成后就可以在蓝牙设置中看到 Game Headset “Telink Serial_Port Service”(如图3)。

(图3)

在连接上设备,枚举到SPP串口后,可使用串口助手进行数据收发包。对应的串口号为上(图3)所示COM8。

在进行音频播放、录音等一系列操作后,可以通过Wire shark 获取到完整的HCI log。在正常使用时,一般是直接导出手机中的HCI log,此处仅为演示方便。

2 过滤HCI log

抓取到HCI log后,使用Wire shark查找对应Profile的日志,我们可以用到Wire shark的过滤器过滤Profile。常用的过滤关键字有 bta2dp、btatt、btavctp、btavdtp、btavrcp、bthfp、btsdp、btspp 等。

以HFP为例,当需要查看HFP中AG与HF的AT命令流程,可以通过 “bthfp” 过滤。如下(图4)所示,在过滤器中输入“bthfp”再回车,即可显示“HFP”相关的所有数据包。

(图4)

由于HFP都是基于rfcomm的,如果我们也同时希望查看rfcomm 协议,只需要在过滤器里面将 HFP与rfcomm通过 “||”连接即可。更详细的使用方法可查看Wire shark的过滤器官方文档说明。

3 分析HCI 数据包

Wire shark中所抓取的HCI CMD 、EVENT、 ACL、Synchronous 、ISO 等,都在 Core spec上有具体的规范(详可参考BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 4, Part E ),以其中一条为例,如(图5)所示:

(图5)

可以看到这是一包HCI ACL包,通过Core spec中描述的可知HCI数据包的前4个字节为ACL data packet的相关参数(图6)。

(图6)

而ACL packet Data部分的内容为L2CAP数据包,通过 DATA packet format(如图7)(BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part A page 1034 ) 可知HCI ACL data部分前两个字节为Length,后两个字节为Channel ID。Channel ID是在L2CAP Connect时分配的,可以看到Wire shark已提示这是建立的PSM为RFCOMM的L2CAP。而基于L2CAP的上层协议,Wire shark此时也已经解析完整了。

(图7)

关于Core spec、Profile、Protocol相关的更多内容可以通过如下链接获取到相关文档:

https://www.bluetooth.com/specifications/specs/ 

使用HCI log 调试SPP

对于SPP的调试,可以通过如下方式进行:

1、在电脑连接上Headset后,通过(图3)得知SPP的串口号是 “COM8”;

2、使用串口工具打开“COM8”,波特率可以选择 1000000或115200;

3、使用串口工具发送几次“Telink SPP HCI debug Demo\r\n”;

同时,我们也可以在TDB调试日志里面看到Headset收到的数据内容为:

这里的16进制数据转换为ASCII码后就是如上字符串。

4、抓取完HCI数据包后,通过 btrfcomm.channel == x 来过滤SPP包。这里的x是我们SPP的rfcomm channel,通过SDK代码“#define SPP_CFG_SERVER_CHANNEL 0x04”得知 channel为4; 

5、过滤后得到的数据如下(图8)所示:

(图8)

综上,在对规范性文档有一定了解的基础上,配合HCI log,可以协助我们进行蓝牙协议相关的开发工作。最为简单的就是流程对比,如果通过流程对比无果,再利用规范文档对流程进行正确性判断。如何使用HCI log调试经典蓝牙的方法就讲到这里,欢迎大家评论指正!

关 于 泰 凌

泰凌微电子致力于为客户提供一站式的低功耗高性能无线连接SoC芯片解决方案,包括经典蓝牙,蓝牙低功耗,蓝牙Mesh,Zigbee,Thread,Matter,Apple HomeKit,Apple“查找(Find My)”,和私有协议等低功耗2.4GHz多协议无线连接系统级芯片和丰富的固件协议栈。公司产品广泛应用于智能照明,智能家居/楼宇,智能遥控,无线外设,智能零售,穿戴设备,无线音频,智能玩具,物流追踪,智慧城市等各类消费和商业应用场景中。

责编: 爱集微
来源:泰凌微电子 #泰凌微电子# #蓝牙# #HCI log#
THE END
关闭
加载

PDF 加载中...