泰凌TLSR9系列芯片支持經(jīng)典藍牙和低功耗藍牙5.3 各項核心規(guī)范,目前開發(fā)者可以基于泰凌提供的協(xié)議棧和參考設計,開發(fā)各種音頻相關產(chǎn)品,其中包括:雙模低延時TWS耳機、雙模低延時頭戴式耳機,雙模藍牙音響,雙模藍牙手表和穿戴類產(chǎn)品等。本文以泰凌雙模低延時頭戴式耳機為例,介紹開發(fā)產(chǎn)品時如何抓取、過濾、分析經(jīng)典藍牙相關Profile(以SPP為例),其他Profile也可通過類似分析SPP的方法進行分析。
在調試開發(fā)經(jīng)典藍牙相關產(chǎn)品的時候,往往需要分析Profile流程是否正確,發(fā)出的數(shù)據(jù)包格式是否正常。而市面上抓取BR/EDR數(shù)據(jù)的儀器往往比較昂貴,不像LE可以使用普通的Sniffer抓取。此時我們可以通過BT master 設備成生的HCI log 調試經(jīng)典藍牙。
1抓取HCI log
不同系統(tǒng)獲取HCI log的方式有差異,手機可直接在調試模式下生成。本文主要介紹在Windows 環(huán)境下通過USB 藍牙適配器抓取HCI log的方法。建議使用外部USB 藍牙適配器,在禁用主板上的藍牙適配器后,再使用Wire shark抓取外部的USB 藍牙適配器。
為方便演示,我們在編譯雙模低延時Headset工程前(以下統(tǒng)稱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 藍牙適配器;
*注意:這兩步很關鍵,否則可能抓取的數(shù)據(jù)無法解析,或者解析不完整。
執(zhí)行完如上兩步,可以看到藍牙適配器已枚舉完成(圖2)。
(圖2)
此時我們再雙擊 EVB上的SW5讓Headset成為可發(fā)現(xiàn)狀態(tài),在藍牙的搜索界面中,可以發(fā)現(xiàn)一個“Game Headset”的耳機設備。 連接完成后就可以在藍牙設置中看到 Game Headset “Telink Serial_Port Service”(如圖3)。
(圖3)
在連接上設備,枚舉到SPP串口后,可使用串口助手進行數(shù)據(jù)收發(fā)包。 對應的串口號為上(圖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”相關的所有數(shù)據(jù)包。
(圖4)
由于HFP都是基于rfcomm的,如果我們也同時希望查看rfcomm 協(xié)議,只需要在過濾器里面將 HFP與rfcomm通過 “||” 連接即可。 更詳細的使用方法可查看Wire shark的過濾器官方文檔說明。
3分析HCI 數(shù)據(jù)包
Wire shark中所抓取的HCI CMD 、EVENT、 ACL、Synchronous 、ISO 等,都在 Core spec上有具體的規(guī)范(詳可參考BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 4, Part E ),以其中一條為例,如(圖5)所示:
(圖5)
可以看到這是一包HCI ACL包,通過Core spec中描述的可知HCI數(shù)據(jù)包的前4個字節(jié)為ACL data packet的相關參數(shù)(圖6)。
(圖6)
而ACL packet Data部分的內容為L2CAP數(shù)據(jù)包,通過 DATA packet format(如圖7)(BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part A page 1034 ) 可知HCI ACL data部分前兩個字節(jié)為Length,后兩個字節(jié)為Channel ID。Channel ID是在L2CAP Connect時分配的,可以看到Wire shark已提示這是建立的PSM為RFCOMM的L2CAP。而基于L2CAP的上層協(xié)議,Wire shark此時也已經(jīng)解析完整了。
(圖7)
關于Core spec、Profile、Protocol相關的更多內容可以通過如下鏈接獲取到相關文檔。
4使用HCI log 調試SPP
對于SPP的調試,可以通過如下方式進行:
1、在電腦連接上Headset后,通過(圖3)得知SPP的串口號是 “COM8”;
2、使用串口工具打開“COM8”,波特率可以選擇 1000000或115200;
3、使用串口工具發(fā)送幾次“Telink SPP HCI debug Demorn”;
同時,我們也可以在TDB調試日志里面看到Headset收到的數(shù)據(jù)內容為:
這里的16進制數(shù)據(jù)轉換為ASCII碼后就是如上字符串。
4、抓取完HCI數(shù)據(jù)包后,通過 btrfcomm.channel == x 來過濾SPP包。這里的x是我們SPP的rfcomm channel,通過SDK代碼“#define SPP_CFG_SERVER_CHANNEL 0x04”得知 channel為4;
5、過濾后得到的數(shù)據(jù)如下(圖8)所示:
(圖8)
綜上,在對規(guī)范性文檔有一定了解的基礎上,配合HCI log,可以協(xié)助我們進行藍牙協(xié)議相關的開發(fā)工作。 最為簡單的就是流程對比,如果通過流程對比無果,再利用規(guī)范文檔對流程進行正確性判斷。 如何使用HCI log調試經(jīng)典藍牙的方法就講到這里,歡迎大家評論指正!
-
usb
+關注
關注
60文章
8047瀏覽量
268582 -
藍牙
+關注
關注
114文章
5947瀏覽量
172271 -
調試
+關注
關注
7文章
599瀏覽量
34317 -
Log
+關注
關注
0文章
15瀏覽量
11416 -
HCI
+關注
關注
0文章
29瀏覽量
13129
原文標題:【技術專欄】如何使用HCI log調試經(jīng)典藍牙?
文章出處:【微信號:telink-semi,微信公眾號:泰凌微電子】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
藍牙運行不穩(wěn)定的原因?
無法在imx8mm-c2板上啟動藍牙,為什么?
低功耗藍牙(BLE)與經(jīng)典藍牙(BR/EDR):技術對比與應用場景解析

HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試Evaluate and log
恩智浦解讀Zephyr log系統(tǒng)的使用 Zephyr的shell和log功能介紹

如何利用經(jīng)典藍牙的bt_spp_acceptor實現(xiàn)藍牙透傳功能?
esp32支持經(jīng)典藍牙嗎?
經(jīng)典藍牙的LMP的工作原理解析

解析經(jīng)典藍牙設備連接過程

如何使用支持標準藍牙HCI命令的定制BLE模塊(如 DA14531)來代替ModusToolbox支持的藍牙模塊?
經(jīng)典藍牙模塊和BLE藍牙模塊點對點連接方式上的差異
什么是經(jīng)典藍牙模塊?

藍牙模塊選經(jīng)典藍牙還是低功耗藍牙?

經(jīng)典藍牙的特性有哪些?泰凌微電子SoC芯片在經(jīng)典藍牙領域的應用

評論