从蓝牙耳机看软硬件

#Technomous

最近一段时间一直在研究蓝牙的协议栈,期间了解到了一个有趣的事情。

我们知道苹果的 AirPods 开创了真无线蓝牙耳机(TWS)的新纪元,目前 AirPods 占据了大部分的市场份额,不少国产厂商也纷纷跟进,但由于苹果注册了相关专利,所以大家都陷入了比较尴尬的境地。下面我们就通过蓝牙的技术原理来简单剖析一下。

蓝牙耳机的原理

为什么以前的蓝牙耳机都是一只耳呢?在蓝牙协议中,左右耳的蓝牙耳机与手机相连有两种方案,一种是把左右耳当做两个蓝牙设备与手机相连,另一种则是通过蓝牙的中继模式与手机相连,即采用其中一只耳机作为主设备与手机相连,另一只耳机的数据通过主耳机的中继模式来获取。

那么两种方案都有哪些技术难点呢?

第一种方案,如果把左右耳当做两个设备与手机相连,最难解决的问题两只耳的同步,因为对于手机而言,两只耳机只是单独的蓝牙设备,数据分开传输的话,是无法保证数据同时到达两只耳的。基于这个原因,早期的蓝牙耳机都是一只耳的。为什么无法保证数据同时到达呢?因为蓝牙和 WIFI 一样工作在 2.4G 的频段,我们平时在使用 WIFI 的时候,应该能感受到远近不同距离下信号的传输应该是不同的。这里多说一句,因为 2.4G 的 WIFI 和蓝牙工作在同样的频段,所以在 WIFI 强度大的地方,蓝牙会受到的干扰也会很大。

第二种方案,如果把其中一只耳朵作中继转发数据给另一只耳朵呢。这种方案的问题在于,作为中继的那只蓝牙耳机耗电非常多,可能一只耳朵电量还是 90%,而另一只耳朵的电量已经 40% 了。耗电这个问题其实是有一个解决方案的,那就是每隔一段时间交换两只耳机的地位,这样就能将两只耳机的耗电量维持在一个差不多的状态。目前除了苹果以外的大部分才上就是采用这种方案。由于副耳机是通过主耳机的中继模式转发数据的,显而易见,这种方案还有一个非常严重的延迟问题。

AirPods 的方案

其实苹果也是采取了第二种方案,但是苹果是如何解决延迟问题的呢?蓝牙耳机和手机在连接的初期,会产生一个密钥,这是用来解密数据的。也就是说,手机发送的数据,蓝牙耳机只有通过密钥才可以解密。得益于苹果的硬件优势,苹果通过两只耳机共享密钥的方式使得副耳机的数据不再需要主耳机的中继模式进行转发。而是直接监听主耳机和手机之间的通信。如果你稍微了解一下网络安全的话应该听说过中间人攻击(MitM)。

FreeBuds 的方案

由于苹果注册了专利,所以后来的厂商便无法采用苹果的方案来设计了。经过长时间的摸索,华为采取了第一种方案来进行实现。得益于华为在硬件方面的积累,华为基于最新的蓝牙 5.1 协议研发了麒麟 A1 芯片。这里提一下,最新的蓝牙 5.1 协议栈中其实包含了两套蓝牙协议栈,一个是传统的蓝牙协议栈,另一个是低功耗蓝牙(BLE)协议栈。后者其实是为了万物互联而设计的。功耗可以控制得非常低。言归正传,得益于硬件方面的积累,华为能够通过硬件的辅助实现双通道同步传输技术,可帮助两只耳直接从手机端获得左右声道的信号,与手机建立直接通信机制。

从硬件做软件

从上面分析可以看出,软件在很多方面其实是无能无力的,因为无法和硬件完美的配合,很多技术难点的攻克是心有余而力不足。

这让我想起了群晖,这是一家做 NAS 的公司。群晖在早期的时候,只做软件部分。但是随着后期的发展,他们硬件在很多方面都无法满足自己的需求。后来他们意识到,应该像苹果一样,自己设计硬件,根据软件的需求来设计契合自己需求的硬件。得益于这个正确的决断,如今的群晖在 NAS 领域已经占据了大部分的市场份额。