0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

泰凌微电子 ? 来源:泰凌微电子 ? 作者:泰凌微电子 ? 2023-03-22 10:24 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

泰凌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所示即可)。

wKgaomQaZy2AZk3aAARE5HvWJgc773.jpg

(图1)

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

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

2、插上USB 蓝牙适配器;

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

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

wKgaomQaZy2ASI97AAE2ulr_trA744.jpg

(图2)

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

wKgaomQaZy2AWF1HAACrUgJUqp8942.jpg

(图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”相关的所有数据包。

wKgZomQaZy2AcUz0AAFr78G_OKk302.jpg

(图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)所示:

wKgZomQaZy2AaUrWAAKGFnAVDwQ512.jpg

(图5)

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

wKgZomQaZy2AZmcPAAAljrf32jU748.jpg

(图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此时也已经解析完整了。

wKgaomQaZy2ASJVFAABI1vN9IJg236.jpg

(图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收到的数据内容为:

wKgZomQaZy2Ac3c4AAAPyojrw8Q064.jpg

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

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

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

wKgaomQaZy2AQCbWAAH0-r9dC6k733.jpg

(图8)

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    8271

    浏览量

    275085
  • 蓝牙
    +关注

    关注

    116

    文章

    6103

    浏览量

    174874
  • 调试
    +关注

    关注

    7

    文章

    615

    浏览量

    34877
  • Log
    Log
    +关注

    关注

    0

    文章

    16

    浏览量

    11588
  • HCI
    HCI
    +关注

    关注

    0

    文章

    29

    浏览量

    13376

原文标题:【技术专栏】如何使用HCI log调试经典蓝牙?

文章出处:【微信号:telink-semi,微信公众号:泰凌微电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Texas Instruments LOG300DEVM和LOG300RGTEVM评估模块数据手册

    Texas Instruments LOG300DEVM和LOG300RGTEVM评估模块 (EVM) 设计用于评估集成对数检波器、低噪声放大器 (LNA) 和输入频率检测器的性能,所有这些都集成在
    的头像 发表于 07-21 10:15 ?193次阅读
    Texas Instruments <b class='flag-5'>LOG</b>300DEVM和<b class='flag-5'>LOG</b>300RGTEVM评估模块数据手册

    求助,关于CYW920829M2EVK-02使用AIROC蓝牙测试和调试工具 1.3 测试 HCI 指令的问题求解

    第三章第五步,执行double-在设备管理器中查看检测到的端口名称为\'HCI UART\'而不是文档 描述 的\'Kitprog3 USB-UART\'、是驱动问题导致的 hci通讯异常么?
    发表于 07-02 06:24

    蓝牙模块CYBT-343151-02 .. HCI UART完全无响应是怎么回事?

    我将 CYW20706 硅基蓝牙模块(CYBT-343151-02)连接到定制板上的 MCU,其中我们的 MCU 通过 HCI uart 与 CYBT 模块连接。 我能够配对电脑中的蓝牙模块,但我
    发表于 06-30 08:23

    如何在CYW20706 evk 中运行 hci 模式?

    我想在 HCI 模式下运行 cyw920706 evk。 您能提供文档参考以便我可以执行一些 HCI 命令吗?
    发表于 06-30 08:03

    是否可以通过 AIROC 蓝牙测试和调试工具 v1.4 或 HCI 命令输出突发波形?

    我正在准备英飞凌蓝牙模块的射频测试。 是否可以通过 AIROC 蓝牙测试和调试工具 v1.4 或 HCI 命令输出突发波形?
    发表于 06-30 06:10

    CYBT353027 HCI与主机MCU通信,对AIROC? HCI UART消息无响应,为什么?

    我正在使用 CYBT 353027 Bluetooth?芯片和 NXP Kinetis K24 作为主机 MCU。 我们能够使用AIROC? -HCI_Control-Protocol 文档中概述
    发表于 06-26 06:20

    如何调试nRF5 SDK

    ,以及命令行方式等多种手段来调试你的代码。 1. 通过打log方式进行调试 nRF5 SDK支持UART和SWD J-Link(RTT)两种底层通信方式来打印日志,SDK14之后日志也可以通过
    的头像 发表于 06-24 08:59 ?269次阅读
    如何<b class='flag-5'>调试</b>nRF5 SDK

    解锁LuatOS-log库:全栈工程师的日志管理实战课!

    针对全栈开发者设计的实战教程,本文聚焦LuatOS平台log库的高效使用,从基础配置到高级调试策略,手把手教你搭建可扩展的日志系统,提升项目维护效率。 今天,我们一起来认识LuatOS的log
    的头像 发表于 05-12 15:23 ?972次阅读
    解锁LuatOS-<b class='flag-5'>log</b>库:全栈工程师的日志管理实战课!

    低功耗蓝牙经典蓝牙,到底怎么选?

    经典蓝牙(Bluetooth Classic)和低功耗蓝牙(Bluetooth Low Energy),两者有什么区别?为什么他们都叫“蓝牙”?Bluetooth Low Energy
    的头像 发表于 04-07 16:01 ?796次阅读
    低功耗<b class='flag-5'>蓝牙</b>和<b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>,到底怎么选?

    蓝牙运行不稳定的原因?

    /tty/ttymxc1/hci0/hci0:64(蓝牙) 这些消息非常不稳定地出现 - 每隔几秒钟到每隔几分钟 我们已经验证了 bluetooth 模块使用的 uart 没有与其他内容冲突。我们已尝试禁用电源管理。根据 dme
    发表于 03-31 06:34

    无法在imx8mm-c2板上启动蓝牙,为什么?

    = GP_BT_ENABLE; max-speed = <3000000>; }; }; [ 186.437564] 蓝牙HCI UART 驱动程序版本 2.3 [ 186.442064] 蓝牙
    发表于 03-31 06:07

    低功耗蓝牙(BLE)与经典蓝牙(BR/EDR):技术对比与应用场景解析

    蓝牙技术自1994年由爱立信提出以来,已成为无线通信领域的核心技术之一。随着物联网(IoT)和可穿戴设备的兴起,蓝牙技术分化为两大分支:经典蓝牙(Bluetooth Classic B
    的头像 发表于 03-27 16:06 ?4149次阅读
    低功耗<b class='flag-5'>蓝牙</b>(BLE)与<b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>(BR/EDR):技术对比与应用场景解析

    HarmonyOS NEXT 原生应用/元服务-ArkTS代码调试Evaluate and log

    Evaluate and log复选框,并在下方输入框输入要打印的表达式。 启动调试,使断点命中,切换到调试的 Console 窗口,表达式的打印结果将在这里展示。 本文主要参考与引用自HarmonyOS官方文档。
    发表于 03-14 16:49

    恩智浦解读Zephyr log系统的使用 Zephyr的shell和log功能介绍

    之前 我们从 0 开始新建了一个简单的 Zephyr 应用- 从0开始打造属于自己的HelloWorld ,本期就 带着大家熟悉一下 Zephyr 的 shell 和 log 系统。 首先给大家介绍
    的头像 发表于 02-27 09:19 ?1327次阅读
    恩智浦解读Zephyr <b class='flag-5'>log</b>系统的使用 Zephyr的shell和<b class='flag-5'>log</b>功能介绍

    CC256x与HCI命令应用说明

    电子发烧友网站提供《CC256x与HCI命令应用说明.pdf》资料免费下载
    发表于 09-11 09:37 ?0次下载
    CC256x与<b class='flag-5'>HCI</b>命令应用说明