把 Gemtek W1700K Wi-Fi 7 路由器改造成 320Msps 软件定义无线电接收机
Turn a WiFi 7 Router into a 320Msps Software Defined Radio Receiver
该项目把 Gemtek W1700K Wi-Fi 7 路由器改造成宽带软件定义接收机,其 MediaTek MT7996 射频以最高 320 Msps 采集 14-bit 原始 IQ,经 Airoha AN7581 SoC 通过 10 GbE 输出,Linux 主机在浏览器中实时显示频谱与瀑布图。
将 Gemtek W1700K Wi-Fi 7 路由器变成一台宽带软件定义接收机。 路由器的 MediaTek MT7996 射频以最高 320 Msps 捕获原始 14 位 IQ, 其 Airoha AN7581 SoC 通过 10 GbE 传输,Linux 主机在浏览器中将其显示为 实时频谱和瀑布图,接收机的控制界面就在旁边。
整个 2.4 GHz 频段以 320 Msps 实时呈现,抽取的滚降 已在流中校正(“flatten”):对每个采样做 262,144 点 FFT,每秒 100 个频谱(此录制以每秒 50 帧运行)。
MT7996 只运行我们自己的固件:一个 ROM 补丁,WM 和 WA 均从本 仓库构建,不含 MediaTek 代码。它自行从冷启动将射频拉起, 基于 MediaTek 自身固件的跟踪记录逐寄存器解码其初始化和校准, 并从主机接收命令(LO、采样率、捕获、流、增益、滤波器)。参见 docs/architecture.md 和 docs/roadmap.md。
功能
| 采样率 | 每个频段上 40、80、160 或 320 Msps 的 14 位复 IQ,独立于 LO 和滤波器;在频段 2 上还有 640/2(640 Msps 的每隔一个采样:平坦至 ±155 MHz,但 160–320 MHz 外的信号会折叠进来) |
| 频段 | 2.4 GHz(MT7976)、5 GHz 和 6 GHz(两个 MT7977);切换频段是在运行中的流内写寄存器 |
| 调谐 | 无信道:LO 是频段合成器能锁定的任意 Hz(单元 A:2.081–2.748、4.647–7.509 和 4.707–7.576 GHz),步进网格为 2.98 Hz(2.4 GHz)或 11.9–14.3 Hz;可在流中途重新调谐(约 1 ms) |
| 前端 | AGC 或手动 LNA/基带增益;模拟滤波器 20–320 MHz |
| 传输 | 射频 DMA 到 SoC DRAM 中的 1 GiB 环形缓冲区;内核将每个 8 KiB 切片作为一个 UDP 数据报零拷贝发送到 10 GbE 端口;在 320 Msps 时,一半切片在射频自身的核心上打包为每采样对 28 位以适应链路(无损、自动) |
| 主机 | w1700k-stream 接收导出并将 IQ 流提供给主机上的每个消费者(共享内存、复 int16、带间隙标记),并可选择对采样本身应用抽取滚降的校正(“flatten”);w1700k-spectrum:对每个采样做 262,144 点 FFT,每秒 100 帧,浏览器 UI,实时控制;sdr-recv 录制流 |
截图
2.4 GHz 在 320 Msps 下展平:Wi-Fi 帧和较短的跳频突发位于 一直平坦至频段边缘的底噪上。Stream 面板显示链路 承载 9.75 Gbit/s,一半切片被打包,每个采样都被变换。
在展平的 320 MHz 视图中,5170–5330 MHz 处两个繁忙的 80 MHz Wi-Fi 信道。
放大到 5250 MHz 周围 24 MHz:两个信道的边缘及其间的保护间隔, 在 1.22 kHz 频率分辨率下。
仓库
| 路径 | |
|---|---|
platform/ |
在 SoC 上运行的内容:我们的 U-Boot、带板级补丁的 Linux 6.18、只读 BusyBox 根文件系统 |
kernel/w1700k_sdr/ |
MT7996 驱动(固件下载、DMA 环形缓冲区、10 GbE 导出、固件命令邮箱)及其单元侧客户端 |
firmware/ |
我们的 MT7996 固件:ROM 补丁、WM(射频启动和频段设置、流、RF 控制)和 WA(打包器) |
host/w1700k/ |
主机控制:固件加载、流传输、作为固件命令的 RF 控制;w1700k serve 用于 Web UI |
host/stream/ |
w1700k-stream,主机唯一的导出接收器:为每个消费者提供共享内存中的 IQ 流,以及滚降校正 |
host/spectrum/ |
频谱/瀑布图 Web 服务器 |
host/recv/ |
sdr-recv,流录制器 |
init/ |
从原厂固件安装、更新、恢复 |
include/hw/ |
寄存器参考:所有已知的 MT7996、A-die 和 AN7581 寄存器,以 C 头文件形式提供 |
docs/ |
架构、路线图 |
快速上手
你需要一台 W1700K、一个接在其控制台排针上的 3.3 V USB 串口适配器、一根连接到其 lan3 端口用于安装的以太网线,以及主机上一块连接到其 wan 端口的 10 GbE 网卡(10GBASE-T;带铜缆 SFP+ 模块的 X710 即可)用于 IQ 流。
make # everything, from public sources (~10 min plus downloads) make check # the test suite sudo init/host/link up IFACE # 192.168.1.10/24 on the NIC cabled to lan3 sudo init/host/tftp-forward enable IFACE init/install # back up the NAND, install, save the radio calibration sudo init/host/link up IFACE10G 10.77.0.10/24 9216 # the 10 GbE stream link host/stream/build/w1700k-stream & # the stream, for every consumer on this host host/spectrum/build/w1700k-spectrum --controller "host/bin/w1700k serve" --listen 0.0.0.0:8073
然后打开 http://HOST:8073/ 并按 ▶。首次启动会加载射频固件并启动射频(约 2 秒)。不使用浏览器时,同样的操作可通过 host/bin/w1700k load|start|band|tune|gain|filter|stop|status 完成。
构建要求:C/C++ 编译器、make、git、Python 3.10+、常规的 Buildroot 前置依赖、clang、ld.lld、llvm-objcopy 和 llvm-readobj(RISC-V 固件)、openssl(固件容器加密),以及用于流服务和频谱服务器的 libfftw3-dev 和 zlib。无需下载或使用任何厂商固件。
使用前必读
- 我们的固件仅接收。它不运行联发科的任何发射校准,并保持 MAC 的发射路径禁用;在 5250 MHz 下进行无间隙监测,加载期间未观察到任何信号,而联发科的固件会发射全功率突发。不过,请勿在没有衰减器的情况下将天线端口直接连接到敏感仪器。
- 我们的 ROM 补丁不写入任何 eFuse。联发科自 2025 年起的 ROM 补丁在首次运行时就会永久烧写一个 eFuse 门控位(使用联发科自家驱动时也是如此);任何曾运行过它的设备该位都已被置位。
- 安装会替换原厂操作系统。
init/install会先将整个 NAND 复制到主机;请保留该副本。恢复原厂系统需要原始 NAND 写入器,本仓库不提供。 - 访问未记录的 MT7996 或 AN7581 地址可能导致 SoC 挂起或射频卡死,直到断电重启。
include/hw/标出了所有已知危险。
许可证
MIT,但 Linux 驱动和内核补丁(GPL-2.0-only)、U-Boot 补丁(GPL-2.0+)、驱动的用户空间头文件(GPL-2.0 WITH Linux-syscall-note)以及源自联发科 mt76 驱动的文件(BSD-3-Clause-Clear)除外。参见 LICENSE。
来源:Hacker News · github.com



