W1700K SDR
将 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 自己固件的运行轨迹,逐寄存器解码其初始化和校准过程——并从主机接收命令(本振频率、采样率、捕获、数据流、增益、滤波器)。参见 docs/architecture.md 和 docs/roadmap.md。
它能做什么
| 采样率 | 每个频段 40、80、160 或 320 Msps 的 14 位复数 IQ,与本振和滤波器无关;频段 2 上还支持 640/2(640 Msps 的隔点采样:±155 MHz 内平坦,但 160–320 MHz 外的信号会混叠进来) |
| 频段 | 2.4 GHz(MT7976)、5 GHz 和 6 GHz(两颗 MT7977);切换频段只需对运行中的数据流做一次寄存器写入 |
| 调谐 | 无信道概念:本振可以是频段合成器能锁定的任意 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 录制数据流 |
截图

320 Msps、flatten 后的 2.4 GHz:Wi-Fi 帧和较短的跳频突发,底噪在频段边缘保持平稳。Stream 面板显示链路承载 9.75 Gbit/s,一半分片被打包,每个采样都经过变换。

5170–5330 MHz 的两个繁忙的 80 MHz Wi-Fi 信道,以 flatten 后的 320 MHz 视图呈现。

放大到 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(射频启动和频段设置、数据流、射频控制)和 WA(打包器) |
host/w1700k/ | 主机控制:固件加载、数据流、以固件命令形式进行的射频控制;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(HW 1.x)或 W1700K2(HW 2.1)、一个接在其控制台排针上的 3.3 V USB 串口适配器、一根接到 lan3 端口的以太网线用于安装,以及主机上一块接到 wan 端口(10GBASE-T;X710 配铜缆 SFP+ 模块可行)的 10 GbE 网卡用于 IQ 数据流。两个版本运行相同的镜像。大多数设备搭载 W25N04KV NAND;部分 W1700K2 搭载 W25N04LV(ID ef 8b 23),已支持但从未在实机上运行过:init/install 遇到它会停下,直到你传入 --i-dont-care-about-nand-corruption,并要求你提供它的原始转储(init/rawdump)给维护者。
make # 全部构建,来自公开源码(约 10 分钟加上下载时间)
make check # 测试套件
sudo init/host/link up IFACE # 接到 lan3 的网卡上配置 192.168.1.10/24
sudo init/host/tftp-forward enable IFACE
init/install # 备份 NAND、安装、保存射频校准数据
sudo init/host/link up IFACE10G 10.77.0.10/24 9216 # 10 GbE 数据流链路
host/stream/build/w1700k-stream & # 数据流服务,供本主机的所有消费者使用
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。不需要下载任何厂商固件。
使用前须知
- 我们的固件仅支持接收。 它不运行任何 MediaTek 的发射校准,并保持 MAC 的发射路径禁用;在 5250 MHz 进行的无缝观察在整个负载期间未见任何发射,而 MediaTek 的固件会发射满功率突发。尽管如此,不要在没有衰减器的情况下将天线端口直接接入灵敏仪器。
- 我们的 ROM 补丁不写 eFuse。 MediaTek 自 2025 年起的 ROM 补丁在首次运行时会永久烧录一个 eFuse 门位(使用 MediaTek 自己的驱动也是如此);运行过一次的设备就会带有该位。
- 安装会替换原厂操作系统。
init/install首先将 NAND 数据复制到主机;请保留该副本。init/restore将其写回并使设备回到原厂固件。 - 访问未公开的 MT7996 或 AN7581 地址可能导致 SoC 挂起或射频卡死,直到断电重启。
include/hw/标记了所有已知的危险。
许可证
MIT,但 Linux 驱动和内核补丁(GPL-2.0-only)、U-Boot 补丁(GPL-2.0+)、驱动的用户空间头文件(GPL-2.0 WITH Linux-syscall-note)以及源自 MediaTek mt76 驱动的文件(BSD-3-Clause-Clear)除外。参见 LICENSE。