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

泰凌tlsr9系列芯片支持经典蓝牙和低功耗蓝牙5.3 各项核心规范 ,目前开发者可以基于泰凌提供的协议栈和参考设计,开发各种音频相关产品,其中包括:双模低延时tws耳机、双模低延时头戴式耳机,双模蓝牙音响,双模蓝牙手表和穿戴类产品等。 本文以泰凌双模低延时头戴式耳机为例,介绍开发产品时如何抓取、过滤、分析经典蓝牙相关profile(以spp为例) ,其他profile也可通过类似分析spp的方法进行分析。
在调试开发经典蓝牙相关产品的时候,往往需要分析profile流程是否正确,发出的数据包格式是否正常。而市面上抓取br/edr数据的仪器往往比较昂贵,不像le可以使用普通的sniffer抓取。此时我们可以通过bt master 设备成生的hci log 调试经典蓝牙。
1抓取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相关的更多内容可以通过如下链接获取到相关文档。
4使用hci log 调试spp
对于spp的调试,可以通过如下方式进行:
1、在电脑连接上headset后,通过(图3)得知spp的串口号是 “com8”;
2、使用串口工具打开“com8”,波特率可以选择 1000000或115200;
3、使用串口工具发送几次“telink spp hci debug demorn”;
同时,我们也可以在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调试经典蓝牙的方法就讲到这里,欢迎大家评论指正!


沃尔沃新型电动铰接式公交车,可降低80%的能耗
技嘉公布多款4K游戏显示器 微软发布新款 Surface Laptop4
变压器和稳压器的区别
艾可意欲在无人驾驶洗地机器人行业推出跟小米一样的革命
移动终端未来天线设计概述
如何使用HCI log调试经典蓝牙?
基于CMOS图像传感器实现快速实时的自适应曝光电路设计
遇到气动薄膜调节阀泄露时该如何处理
摄影爱好者的情怀之作,OPPO Find X3 Pro摄影师版正式发布
芯华章助力集成电路EDA设计精英挑战赛
《崛起的超级智能:互联网大脑如何影响科技未来》由中信出版社出版
芯片设计小经验—异步电路跨时钟域小结
德力西电气CDLD6H指示灯新鲜出炉
国产机器人发展加速 “机器换人”亟需人力资源升级
日本2nm芯片计划:联合美国对抗三星台积电
低温问题会成为阻碍电动汽车规模化的致命弱点吗?
基本放大电路是什么 基本放大电路有哪三种组态
国芯思辰|地芯科技16位 100kSPS模数转换器GAD7683(替代AD7683)助力PCR仪
美国能源部:LED是影响环境最低的高效节能照明
视频质量评测标准——VMAF