现在有许多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来调试
FAQ 5:是否可以使用其他MCU替代STM32F0x?
A5: 可以,但需根据目标MCU的特性重新实现协议栈,并确保通信时序和逻辑与官方代码一致。
作者-声波电波就看今朝-点击此处查看更多系列技术博文