爲了方便大家學習,現與我愛藍牙網聯合推出【QCC300x/CSR867x/QCC30xx/QCC51xx開發板】。
⭐⭐⭐⭐⭐【本例程對應源碼和固件已加入會員羣資料庫】⭐⭐⭐⭐⭐
開發板會員QQ羣號:725398389(憑訂單號入羣,贈獨家學習資料)
技術交流QQ羣號:743434463
——————————正文分割線———————————–
1. 引言
今年Q1剛發佈的QCC3040是高通的QCC514x/QCC304x系列中的主力型號,其主打的mirror tws功能較上一代relay tws相比有如下優點:
- 手機上只會顯示一個耳機設備,而不是兩個耳機設備
- 耳機在切換主從時更自然流暢,主從耳機耗電更均衡
雖然上述優點早已在蘋果的airpods上體現,但高通只花了1年多的時間就開發出了完整的解決方案,並解決了專利問題,實在是令人佩服。相信高通的mirrow tws方案可以炸開蘋果的tws耳機技術壁壘,使非蘋果系的耳機方案向前邁進一大步。
本週剛拿到我愛藍牙網的QCC3040開發板,我已迫不及待地開始部署官方的earbuds例程。參考官方文檔《ADK 20.1 Overview》部署的過程中,遇到了很多問題,好在有技術交流羣和我愛藍牙網論壇的幫助,使我快速排除了各種問題,順利跑通了例程並適配到開發板。
爲了讓大家少走一些不必要的彎路,我將部署流程、調試流程、故障解決方案分享出來,大家可以嘗試着做一遍,儘早體驗到mirror tws的獨特魅力。
2. 軟件環境
- PC: win10
- MDE: (C:\weiyun\ 思 度 科 技 \QCC30xx_QCC51xx 開 發 板 資 料 \3. 開 發 環 境\qualcomm_mde.win.2.4_installer_2.4.0.158.zip)
- ADK Tool: (C:\weiyun\ 思 度 科 技 \QCC30xx_QCC51xx 開 發 板 資 料 \4. 官 方ADK\ADK20.1\adk_toolkit.win.1.0_installer_1.0.1.19.zip)
- Project: (C:\weiyun\ 思 度 科 技 \QCC30xx_QCC51xx 開 發 板 資 料 \4. 官 方ADK\ADK20.1\qcc514x-qcc304x-src-1-0_qtil_standard_oem_earbud.rar)
3. 硬件環境
- Debugger Adapter: TRBI200 或 USB
- Platform: 我愛藍牙網 QCC30XX/51XX 開發板 * 2 + QCC3040模塊 * 2
- Chip: QCC3040
4. 準備步驟
- 開發板連接好 TRB 和 USB 供電線,選擇 USB 供電
- 安裝好 TRB 或 USB 驅動
a) 參考 C:\weiyun\思度科技\QCC30xx_QCC51xx 開發板資料\10.開發板教程\3.USB 驅動安裝
b) 參 考 C:\weiyun\ 思 度 科 技 \QCC30xx_QCC51xx 開 發 板 資 料 \6.debug 工 具\usbtrb\80-cc094-1_ab_transaction_bridge_and_usb_debug_interface_user_guide.pdf) - SYS_CTRL 開關撥到導通位置(SYS_CTRL 燈亮)
- Project 解壓後路徑爲 C:\qtil\qcc514x-qcc304x-src-1-0_qtil_standard_oem_earbud
5. 部署流程
5.1. 打開官方例程
- 打開 mde2.4,選擇 open project
- 選擇 earbud.x2w
- 選擇 ADK tool 1.0.1.19 x64
5.2. 修改工程以適配開發板
- 修改工程屬性,屏蔽電池溫度檢測
- 修改 ui_prompts.c,使能開機提示音
- 修改 kymera_config.h,使能外部 PA 控制腳 PIO3,開機可聽到 power on 提示音
5.3. 編譯 earbud 工程
第一次編譯需要較長時間,請耐心等待
5.4. 燒錄固件到 primary 耳機
- 選擇調試器
- Deploy 固件,等待完成
5.5. 生成 secondary 耳機的固件
- 修改藍牙地址以區分 primary 和 secondary 設備
- build dev_cfg 工程
- build earbud 工程,等待完成
5.6. 燒錄固件到 secondary 耳機
同步驟 5.4。
5.7. 測試固件
耳機插入 AUX OUT 接口,按開發板復位鍵,可聽到 power on 提示音。
6. 調試流程
6.1. 修復 live_log故障
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xbb in position 0: ordinal not in range(128)
- 修 改 C:\qtil\qcc514x-qcc304x-src-1-0_qtil_standard_oem_earbud\adk\tools\packages\tabs\pydbg_tab.py
# Python 2 and 3
from __future__ import print_function
import os
import sys
from xml.etree import ElementTree
import argparse
import glob
from workspace_parse.workspace import Workspace
# 插入下述代碼
import sys
reload(sys)
sys.setdefaultencoding('gbk')
- 修改 C:\qtil\ADK_Toolkit_1.0.1.8_x64\apps\fw\tools\pydbg.py
import os
import sys
import sys
reload(sys)
sys.setdefaultencoding('gbk')
6.2. 修復 acat 故障
python: can’t open file ‘C:/qtil/qcc514x-qcc304x-src-1-0_qtil_standard_oem_earbud/adk/bin/qcc514x_qcc304x/audio/tools/acat/ACAT.py’:
[Errno 2] No such file or directory ), 修 改 C:\qtil\qcc514x-qcc304x-src-1-
0_qtil_standard_oem_earbud\adk\tools\extensions\acat_tab\ext.xml,修改完成後,關閉 qmde 再打開。
6.3. 打開 win10 cmd 的 ANSI 配色功能
ANSI 轉義字符顯示爲亂碼[1m [35m] ,從 cmd.exe 輸入(也可以在 PowerShell 中使用):reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
6.4. 創建 pydbg 調試接口
- 在工程路徑下創建 pydbg 腳本,用於打開 log 窗口和輸入 apptest 命令窗口
這裏假設 primary 耳機用 USB,secondary 耳機用 TRB,可自行修改
:: Change variables for your system
set ELFDIR=C:\qtil\qcc514x-qcc304x-src-1-0_qtil_standard_oem_earbud\earbud\workspace\QCC3040-
AA_DEV-BRD-R2-AA\depend_debug_qcc514x_qcc304x
set TOOLS=C:\qtil\ADK_Toolkit_1.0.1.8_x64\apps\fw\tools
set PYTHONDIR=C:\qtil\ADK_Toolkit_1.0.1.8_x64\tools\python27
set DEVICE1=102
set DEVICE2=180210
start cmd.exe "/k %PYTHONDIR%\python %TOOLS%\pydbg.py -d usb:%DEVICE1%,trb:scar:%DEVICE2% -f
apps1:%ELFDIR%\earbud.elf"
start cmd.exe "/k %PYTHONDIR%\python %TOOLS%\pydbg.py -d usb:%DEVICE1%,trb:scar:%DEVICE2% -f
apps1:%ELFDIR%\earbud.elf"
- 運行腳本,打開兩個 cmd 窗口
- Cmd 窗口 1,輸入 system.apps1.live_log()後回車,可看到左右耳機的 log,A 是primary 耳機,B 是 secondary 耳機
- Cmd 窗口 2,輸入 pydbg 命令,使左右耳機完成配對,並開啓與手機的配對模式
i. 【左耳離開耳機盒】apps1A.fw.call.appTestPhyStateOutOfCaseEvent(),primary耳機開始搜索 secondary 耳機
ii. 【 右 耳 離 開 耳 機 盒 】 apps1B.fw.call.appTestPhyStateOutOfCaseEvent() ,secondary 耳機進入 tws 配對狀態,primary 耳機搜索到後,建立 tws 配對
iii. 【測試左耳 tws role 是否爲主】apps1A.fw.call.appTestIsPrimary(),返回 true 說明 A 是 primary 角色
iv. 【耳機進入手機可配對模式】apps1B.fw.call.appTestPairHandset(),聽到提示音 pairing,這裏 apps1A 也可以
v. 手機可搜索到 LE-3040,配對成功後聽到提示音 connected,可播放音樂、打電話
7. 總結
新的ADK20.1的進步很明顯,從雙耳log混合顯示功能到pydbg命令行操作功能等種種跡象可以看到,高通方案有在努力降低開發難度,對提升方案的普及度很有幫助。
雖然mirrow tws的例程已經部署成功了,但對mirror tws的實現原理和技術細節相關的知識還比較匱乏,需要專門研究,有成果後會再給大家分享。