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

    文章

    7890

    浏览量

    263951
  • 蓝牙
    +关注

    关注

    114

    文章

    5765

    浏览量

    169782
  • 调试
    +关注

    关注

    7

    文章

    572

    浏览量

    33893
  • Log
    Log
    +关注

    关注

    0

    文章

    14

    浏览量

    11311
  • HCI
    HCI
    +关注

    关注

    0

    文章

    29

    浏览量

    12935

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

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

收藏 人收藏

    评论

    相关推荐

    CC256x与HCI命令应用说明

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

    如何利用经典蓝牙的bt_spp_acceptor实现蓝牙透传功能?

    利用经典蓝牙的bt_spp_acceptor实现蓝牙透传功能?
    发表于 06-24 07:53

    esp32支持经典蓝牙吗?

    kconfig里面经典蓝牙依赖IDF_TARGET_ESP32,只有esp32支持经典蓝牙吗? \"depends_on\": \"
    发表于 06-13 06:54

    经典蓝牙的LMP的工作原理解析

    蓝牙协议中,为了更加灵活以及容易实现多种特性,使用了多协议,多层级的设计,LMP即link manager protocol(链路管理器协议)就是蓝牙协议中的一个重要组成部分,本文将对经典
    的头像 发表于 06-12 09:01 1809次阅读
    <b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>的LMP的工作原理解析

    ESP32-C6无法开启uart hci怎么解决?

    开发板:ESP32-C6-DevKitM-1 board esp-idf:V5.2 我们想用esp-idf里的hci示例把ESP32-C6 的uart口作为hci io,来与pc传递hci
    发表于 06-06 06:16

    解析经典蓝牙设备连接过程

    随着越来越多的经典蓝牙设备应用在我们的生活和工作中,该类设备的使用场景和相关设计也更加丰富。与此同时,泰凌微电子作为蓝牙芯片的源头厂商,在经典蓝牙
    的头像 发表于 06-05 09:11 1963次阅读
    解析<b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>设备连接过程

    如何使用支持标准蓝牙HCI命令的定制BLE模块(如 DA14531)来代替ModusToolbox支持的蓝牙模块?

    如何使用支持标准蓝牙 HCI 命令的定制 BLE 模块(如 DA14531)来代替 Modus Toolbox 支持的蓝牙模块? 我正在使用 Modus Toolbox 3.2 和 CY8C62x5 MCU 进行开发。
    发表于 06-03 07:05

    经典蓝牙模块和BLE蓝牙模块点对点连接方式上的差异

    随着科技的发展,蓝牙技术已经成为了我们生活中不可或缺的一部分。在众多的蓝牙模块中,经典蓝牙模块和BLE蓝牙模块是最常用的两种。它们在很多方面
    的头像 发表于 05-28 11:58 1341次阅读

    调试蓝牙模块时,我们常说的AT指令是什么?

    调试蓝牙模块时,我们常说的AT指令是什么?AT指令是蓝牙模块与电脑或其他设备进行通信的一种方式,它是基于蓝牙协议栈的命令集,用于控制蓝牙
    的头像 发表于 05-24 15:01 1751次阅读

    什么是经典蓝牙模块?

      什么是经典蓝牙模块? 前面我们已经就蓝牙模块的概念做了了解,随着时间的推移,产品越来越智能,需要的蓝牙模块也就越来越广泛,本篇文章我们就一起了解下什么是
    的头像 发表于 05-24 14:52 449次阅读
    什么是<b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>模块?

    蓝牙模块选经典蓝牙还是低功耗蓝牙

      经典蓝牙(classic Bluetooth)和低功耗蓝牙(Bluetooth low energy,简称BLE或者LE),两者有什么区别?为什么他们都叫“蓝牙”?Bluetoot
    的头像 发表于 05-23 17:57 1088次阅读
    <b class='flag-5'>蓝牙</b>模块选<b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>还是低功耗<b class='flag-5'>蓝牙</b>?

    经典蓝牙的特性有哪些?泰凌微电子SoC芯片在经典蓝牙领域的应用

    经典蓝牙技术的历史可追溯到上世纪90年代,是一种成熟开放的短距离无线通信技术。其基于蓝牙技术联盟定制的全球性规范,目前已经发展到最新的蓝牙5.4版本。
    的头像 发表于 05-22 10:35 784次阅读
    <b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>的特性有哪些?泰凌微电子SoC芯片在<b class='flag-5'>经典</b><b class='flag-5'>蓝牙</b>领域的应用

    蓝牙模块CYW20706上下载应用程序到串行闪存失败了的原因?

    我尝试在蓝牙模块CYBT-343026-01(CYW20706)上下载应用程序到串行闪存,但失败了。 第一步是按照 AIROC™ HCI UART 控制协议文档(见下文)的指示向模块发送
    发表于 03-01 11:59

    鸿蒙开发之【蓝牙HCI蓝牙hld】

    蓝牙的命名来源于一个丹麦国王的名字。蓝牙的核心是短距离无线电通讯,它的基础来自于跳频扩频(FHSS)技术。
    的头像 发表于 01-30 17:37 1141次阅读

    Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析

    同时提供对应蓝牙问题报告下面的 log,否则可能会因为 log信息不足无法定位问题.所以请务必学会抓取下列蓝牙 log 的方法.
    发表于 11-28 10:58