SmartCross 工作日志 #2 – WiFi+BT 模块测试记录

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 的方案。高通的方案估计驱动会好一点,但是这个厂家不理我,没办法。

CC BY-SA 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-ShareAlike 4.0 International License.