蓝牙(bluetooth, BT)技术的一个典型应用领域是音频,两者相结合,产生了蓝牙无线耳机等非常普及且受欢迎的产品。我是做音频的,目前主要做智能手机和手表上audio DSP的音频软件开发。开发的产品都会涉及到蓝牙相关的功能,如打蓝牙电话和听蓝牙音乐等。本文就讲讲手机手表上音频里的蓝牙那点事。工作中开发到跟蓝牙相关的功能,跟蓝牙同学讨论,能听懂蓝牙相关的术语,定义好跟蓝牙交互的接口。先声明一下,是从一个音频软件工程师的角度看蓝牙,只是了解,不精通哦。
BT从架构上分成BT Host和BT Controller两部分,两者之间通过HCI(Host Controller Interface)交互,具体如下图。
BT Host里主要是蓝牙协议栈,包括多个蓝牙协议,如播放蓝牙音乐用的A2DP等。BT Controller里主要是基带(baseband,简称BB)和射频(RF)等。
BT可分为传统蓝牙(Classic BT)和低功耗蓝牙(BLE,BT Low Energy)。蓝牙系统由一个Host和一个或多个Controller组成。根据Host与Controller的组成关系,常见的蓝牙芯片也分为以下几种:
单模蓝牙芯片:单一传统蓝牙的芯片或者单一低功耗蓝牙的芯片,即1个Host结合1个Controller
双模蓝牙(BTDM,BT Dual Mode)芯片:同时支持传统蓝牙和低功耗蓝牙的芯片,即1个Host结合多个Controller
蓝牙跟音频结合,在智能手机或者手表上主要的应用场景就是听蓝牙音乐和打蓝牙电话。在这两种场景下把上面的架构框图细化就得到下图:
解释下相关名词术语。先看BT HOST里的:
A2DP: Advanced Audio Distribution Profile(高级音频分发规范),是为了实现高质量音频数据的无线传输。
AVDTP: Audio/Video Distribution Transport Protocol(音视频分发传输协议),是蓝牙协议栈中专门用于在蓝牙设备之间传输音频和视频流媒体数据的核心协议。
L2CAP: Logical Link Control and Adaptation Protocol(逻辑链路控制和适配协议),是蓝牙协议栈中位于基带层之上的核心协议。
再看BT Controller里的:
ACL和SCO是两种蓝牙物理链路。ACL(Asynchronous Connection-Less)是异步无连接的链路,用于传输非实时数据,如音乐数据。ACL采用了一种分时复用的方式来共享信道,数据在时隙中被发送。SCO(Sync Connection-Oriented)是同步定向连接的链路,用于传输实时的数据,如语音数据。在建立连接时就分配了固定的时隙来传输数据。语音通话选择SCO的原因主要有两点,一是链路简单,建链快,从而低延时。二是传输数据量小。
播放蓝牙音乐时,手机手表上的音频PCM数据要通过蓝牙传输给耳机首先要做蓝牙编码。共有4种编码方式,包括SBC(Subband Coding,子带编码)、AAC(Advanced Audio Coding*,*高级音频编码) 、APTx(高通公司主推的编码)和LDAC(索尼公司主推的编码技术)。其中SBC是必须支持,其他是可选支持。PCM数据做完蓝牙编码后得到码流,再经过BT HOST里的A2DP、AVDTP以及L2CAP等协议,通过HCI接口把数据送给BT Controller。最终通过BT Controller的空口把数据发给蓝牙耳机的BT Controller。在蓝牙耳机里就是一个逆过程。BT Controller把数据通过HCI送给BT Host。再经过L2CAP、AVDTP、A2DP、解码等得到PCM数据,最终播放出来。上面的过程可以用下图表示:
在打蓝牙电话时,音频PCM数据在蓝牙传输时同样需要编解码。如音频PCM数据是8K采样,就会用CVSD(Continuous Variable Slope Delta Modulation, 连续可变斜率增量调制)编解码,如音频PCM数据是16K采样,就会用mSBC(modified SBC,改进的SBC)编解码。再经过HCI接口与BT Controller交互数据,BT Controller也是通过空口与耳机双向交互语音数据。可以用下图表示:
对于智能手机和手表来说,BT Host通常在AP上,BT Controller则在蓝牙芯片上。根据蓝牙芯片是否内置以及ADSP上是否有UART接口,可分成如下组合。
1, 蓝牙芯片外置,ADSP没有UART接口
框图如下:
播放蓝牙音乐时,AP上的BT Host与BT controller通过UART交互数据。打蓝牙电话时,ADSP与BT controller通过PCM bus做数据交互。
2, 蓝牙芯片外置,ADSP有UART接口
框图如下:
播放蓝牙音乐时,把BT Host的部分功能(比如SBC编码、A2DP等)放在ADSP实现,ADSP与BT controller通过UART交互数据。这样可以让AP长时间的睡下去,能明显的降播放蓝牙音乐的功耗。这种方式也叫A2DP offload。 打蓝牙电话时,ADSP与BT controller通过PCM bus做数据交互。
3, 蓝牙芯片内置,ADSP没有UART接口
框图如下:
播放蓝牙音乐时,把BT Host的部分功能(比如A2DP等)放在ADSP实现,ADSP与BT controller通过IPC交互数据。这样也可以让AP长时间的睡下去,能明显地降播放蓝牙音乐的功耗。这是另外一种方式的A2DP offload。 打蓝牙电话时,ADSP与BT controller通过IPC做数据交互。