SmartCross 需要稳定的蓝牙、WiFi 连接,在播放音频时才不会卡顿。为此,我尝试了一些市面上能买到的模块。下面是各个型号模块的实验记录。
RTL8723DS
- 售价:12 元
- 蓝牙版本:4.2
- WiFi:802.11n,150Mbps
- 接口:SDIO+UART
该模块可以在 Linux 上工作,但是有一个致命问题:在 Linux 上会间隙性丢包,类似 这篇帖子 中的介绍。这种 5 秒的中断对于 AirPlay 是致命的(会导致音频中断),我无法解决这个问题,因此暂时放弃。
ESP-Hosted
- 售价:12.50 元
- 蓝牙版本:4.2
- WiFi:802.11n,72Mbps
- 接口:SDIO
ESP32 中可以运行 esp-hosted 固件,通过 SDIO 接口向主机提供网卡+蓝牙服务。不过,其 WiFi 并未实现 Linux 中的标准 nl80211 接口,而是将 ESP32 虚拟成一个有线网卡,然后通过自定义命令连接 WiFi。此固件实测速度能跑到 15Mbps,不太理想;而且不稳定,有时会断流,无法正常使用。蓝牙未测试。
RTL8821CU USB Dongle
- 售价:58 元
- 蓝牙版本:4.2
- WiFi:802.11ac 433Mbps(1×1)
- 接口:USB2.0
该网卡 WiFi 表现良好,关闭节能选项后不会出现 ping 值波动,速度也满足要求。但不知道为何,蓝牙基本没有信号。问题应该不出在 Linux 驱动,因为在 Windows 上也有同样的问题。可能是蓝牙天线没有接出来。不满足要求。
RTL8821CU 模块
- 售价:35 元
- 参数同上
该模块蓝牙信号正常,WiFi 信号也正常。但是有一个致命的问题:蓝牙配对不稳定,有时会出现连不上的情况,推测是因为蓝牙共存(COEX) 工作不正常。不过,蓝牙连上后,基本就稳定了,播放音乐不会出现卡顿。
该模块的 WiFi 在 2.4GHz 状态下工作时,与手机直接通信,速度可以达到 50Mbps;在播放蓝牙音频时,速度跌到 10Mbps 左右,推测是因为蓝牙共存导致的(模块只有单个天线,蓝牙和 WiFi 共享天线)。5GHz 的速率不受蓝牙影响,能跑到 200Mbps。
RTL8822BU USB Dongle
- 售价:68 元
- 蓝牙版本:4.2
- WiFi:802.11ac 866Mbps(2×2)
- 接口:USB3.0
该模块工作非常完美,一切功能都正常。并且,2.4GHz 速度不会特别受到蓝牙影响,在播放蓝牙音频时也能保持在 50Mbps。因此,后续考虑更换 RTL8822BU 模块。不过,8822BU 模块被厂家告知即将停产,计划换用 8822CU 模块。
值得一提的是,Linux 内核自带的 btusb 模块中,对 Realtek 协议的支持不包含 BTCOEX。如果要使用蓝牙和 WiFi 共存调度的功能,必须使用厂家提供的蓝牙驱动。然而,厂家提供的驱动中,有一个宏(RTB_SOFTWARE_MAILBOX
)没有定义过,所以蓝牙共存相关的代码也没开启。在 这个 commit 中 将此宏打开后,蓝牙功能工作正常。蓝牙共存的工作状态可以用 cat /proc/net/rtl88x2bu/wlan0/btcoex
命令看到。
一些买不到 / 不好用的模块
AP6212:能买到(大致 18 元?),但是作为一个模块,居然不内置晶振,需要我外接晶振,我觉得这个很过分。另外,据 Icenowy 说,这个模块里面的芯片有 A0 和 A1 版本,其中 A0 版本在 Linux 下面驱动有问题。这么坑,我不想用了。
AP6255:看起来比较完美,但太贵(80 元)。
FN-LINK 8724B-SR:基于 QCA6174A 的方案。高通的方案估计驱动会好一点,但是这个厂家不理我,没办法。
本作品使用基于以下许可授权:Creative Commons Attribution-ShareAlike 4.0 International License.