現在有許多TWS耳機透過充電盒的按鍵來實現部分功能,例如顯示電量、進入配對狀態、重置等操作。高通系列的TWS晶片也支援這項功能。透過充電腳的兩根線,可以實現高達1.5Mbps的數據傳輸,且耳機電路設計簡單,無需額外的硬體成本。此外,耳機和充電盒(基於STM32F0x)的實現程式碼已經完善,可以直接使用(充電盒參考程式碼位於adk-src-1-0_qtil_standard_oem_qcc309x\rdp)。
如果使用者未使用ST的MCU,該如何撰寫這部分協議呢?除了參考官方程式碼,開發過程中可能會遇到以下問題:
1.SN/NESN 不同步
在首次通信或耳機入盒後的通信中,需要對SN/NESN標誌進行重置。如果未重置,通信將無法正常回應。具體重置操作請參考文件《80-21985-1》的第3.3.3章節。
2. 誤讀ACK回應封包
每次充電盒向耳機發送資訊(無論是寫操作、讀操作、控制操作還是應答),耳機都會返回一個ACK封包。該ACK封包僅表示耳機已收到充電盒的資訊,但不包含充電盒所需的資訊,且耳機不會主動發起後續的資料封包。例如,當充電盒請求獲取耳機狀態時,耳機會先返回一個ACK封包,但不會繼續發送包含狀態資訊的資料封包。此時,充電盒需要發送一個空封包(POLL封包)給耳機,耳機才會返回包含狀態資訊的資料封包。充電盒收到該資料封包後需再發送一個ACK封包,耳機收到ACK封包後也需再返回一個ACK封包,至此整個交互過程才完整結束。需要注意的是,廣播訊息不會觸發ACK封包回應。具體操作請參考文件《80-21985-1》的5.2.6章節。
3. 如何取得耳機地址
在Earbud Status Request指令中,有兩種回應資料包格式,這取決於指令中的選用位設定。如果選用位未填資料,則返回簡單狀態資訊;如果選用位填0(目前協議僅支援填0),則返回包含耳機地址的資訊。該地址可用於限制和快速讓充電盒內的耳機進行配對。具體描述請參考文件《80-21985-1》的4.2.4和4.2.6章節。
以上是本期部落格文章的全部內容,若有疑問請在文章下方留言評論,或者聯繫我們,我們會盡量安排處理喔 (o´ω`o)و。感謝大家的瀏覽,我們下期再見!
FAQ 1:充電盒通訊協議是否支援自訂擴展?
A1:高通提供的通訊協議支持一定程度的自訂擴展,但需確保與耳機端的協議一致性,避免通訊失敗。
FAQ 2:如何調試充電盒與耳機的通信問題?
A2:建議使用邏輯分析儀或示波器監測通信信號,結合協議文件逐步排查問題,例如檢查SN/NESN同步、ACK封包回應等。
FAQ 3:文件《80-21985-1》可以在哪裡獲取?
A3:該文件為高通官方提供的技術資料,需透過高通官網渠道獲取。
FAQ 4:是否只用 UART 就可以測試?
A4:充電口有一個特定的電氣協議,單純使用UART無法調試協議,但如果耳機處於UART調試模式,則可以使用單純的UART來進行調試。
常見問題 5:是否可以使用其他MCU替代STM32F0x?
A5:可以,但需要根據目標MCU的特性重新實現協議棧,並確保通信時序和邏輯與官方代碼一致。
評論