做 TWS 应用开发,到底需不需要懂协议栈

刚接触 TWS 应用开发时,我一直有一个疑问:蓝牙协议栈大部分已经由芯片原厂封装好了,平时做功能主要是调用 SDK 接口、处理事件和编写产品逻辑,还有没有必要专门学习协议栈? 刚入行的时候,我也尝试过从头学习蓝牙协议。当时下载了一份 Bluetooth Core Specification 6.0,打开后看到整整 3815 页,心里压力一下就上来了。里面有大量英文术语、状态、命令和数据包格式,我硬着头皮看了几天,还是很难把规范里的内容和手上的代码对应起来,最后没有坚持下去。 工作两年左右,我对协议栈内部仍然谈不上有多深入的理解,平时接触最多的还是应用层代码。所以我现在的看法是:**需要了解一些,但没必要一开始钻得特别深。**这篇文章只是记录我目前在项目中用到的一些认识。 一、我目前主要关注什么 以我目前的工作内容来说,HCI、L2CAP 以及各个 Profile 的内部状态机,我其实没有深入研究。日常开发更常见的是调用 SDK 接口、接收事件,再根据产品状态处理业务。 为了不把不同问题混在一起,我会先记住几个和工作直接相关的区别: ACL 连接和 Profile 连接不是一回事。 A2DP 负责音乐,AVRCP 负责播放控制和音量同步。 HFP 负责通话控制,SCO/eSCO 承载通话语音。 SPP 和 BLE GATT 常用于 App 数据通信。 接口调用成功,不一定代表异步操作已经完成,还要等待后续事件。 为了更直观地区分这些连接和业务,可参考蓝牙连接关系简化图: 图中把 GATT 单独放在 BLE 连接下。严格来说,协议内部的承载关系还要更细,这里只保留我在应用开发中经常接触到的部分。 我目前也就是先把这些常见概念分清。这样遇到异常时,至少知道先看哪一类状态,不至于一上来就把所有现象都归结成“蓝牙有问题”。 二、实际项目里,我能接触到什么 以我使用的中科蓝讯 bt8910 SDK 为例,工程里可以看到 A2DP、HFP、SPP 和 TWS 相关的配置及适配代码,但真正的核心实现主要由预编译的 libbtstack.a 提供。 应用层这边,A2DP 和 HFP 主要是调整部分参数、接收事件和处理业务回调;SPP 的 SDP Record 和数据收发回调可以看到并修改;GATT 可以添加 Service、Characteristic 和读写回调;TWS 这边则能做一些业务状态同步和主从切换处理。 ...