w1700k-sdr README

The project's README from github.com/h0m3us3r/w1700k-sdr. As one markdown file: README.md.

W1700K SDR

Turns a Gemtek W1700K Wi-Fi 7 router into a wideband software-defined receiver. The router's MediaTek MT7996 radio captures raw 14-bit IQ at up to 320 Msps, its Airoha AN7581 SoC streams it over 10 GbE, and a Linux host shows it as a live spectrum and waterfall in the browser, with the receiver's controls next to it.

The 2.4 GHz band live: spectrum and waterfall

The whole 2.4 GHz band at 320 Msps, live, with the decimation's roll-off corrected in the stream ("flatten"): a 262,144-point FFT of every sample, 100 spectra a second (this recording runs at 50 frames a second).

The MT7996 runs only our own firmware: a ROM patch, WM and WA built from this repository, with no MediaTek code. It brings the radio up from a cold power-on by itself, from MediaTek's initialisation and calibration decoded register by register against a trace of MediaTek's own firmware, and takes its commands (LO, sample rate, capture, stream, gain, filter) from the host. See docs/architecture.md and docs/roadmap.md.

What it does

Sample rates 40, 80, 160 or 320 Msps of 14-bit complex IQ on every band, independent of the LO and the filter; on band 2 also 640/2 (every other sample of 640 Msps: flat to ±155 MHz, but signals 160–320 MHz away fold in)
Bands 2.4 GHz (MT7976), 5 GHz and 6 GHz (two MT7977s); switching bands is a register write inside a running stream
Tuning No channels: the LO is any Hz a band's synthesizer locks at (unit A: 2.081–2.748, 4.647–7.509 and 4.707–7.576 GHz), on its grid of 2.98 Hz (2.4 GHz) or 11.9–14.3 Hz steps; retuned mid-stream (about 1 ms)
Front end AGC or manual LNA/baseband gain; analog filter 20–320 MHz
Transport the radio DMAs into a 1 GiB ring in SoC DRAM; the kernel sends every 8 KiB slice as one UDP datagram, zero-copy, on the 10 GbE port; at 320 Msps half the slices are packed to 28 bits per sample pair on the radio's own cores to fit the link (lossless, automatic)
Host w1700k-stream receives the export and serves the IQ stream to every consumer on the host (shared memory, complex int16, gap-tagged), with an optional correction ("flatten") of the decimation's roll-off applied to the samples themselves; w1700k-spectrum: 262,144-point FFT at 100 frames/s over every sample, browser UI, live controls; sdr-recv records the stream

Screenshots

The web UI at 2.4 GHz

2.4 GHz at 320 Msps, flattened: Wi-Fi frames and shorter hopping bursts on a floor that stays level to the band's edges. The Stream panel shows the link carrying 9.75 Gbit/s, half of the slices packed, and every sample transformed.

The web UI at 5 GHz

Two busy 80 MHz Wi-Fi channels at 5170–5330 MHz in a flattened 320 MHz view.

The two channels' edges zoomed to 24 MHz

Zoomed to 24 MHz around 5250 MHz: the two channels' edges and the guard gap between them, in 1.22 kHz bins.

Repository

Path
platform/ What runs on the SoC: our U-Boot, Linux 6.18 with board patches, a read-only BusyBox root
kernel/w1700k_sdr/ The MT7996 driver (firmware download, the DMA ring, the 10 GbE export, the firmware's command mailbox) and its unit-side clients
firmware/ Our MT7996 firmware: the ROM patch, the WM (radio bring-up and band set-up, streams, RF control) and the WA (packer)
host/w1700k/ Host control: firmware load, streaming, RF control as firmware commands; w1700k serve for the web UI
host/stream/ w1700k-stream, the host's one receiver of the export: the IQ stream in shared memory for every consumer, and the roll-off correction
host/spectrum/ The spectrum/waterfall web server
host/recv/ sdr-recv, the stream recorder
init/ Installation from stock, updates, recovery, return to stock
include/hw/ Register reference: every known MT7996, A-die and AN7581 register, as C headers
docs/ Architecture, roadmap

Getting started

You need a W1700K (HW 1.x) or W1700K2 (HW 2.1), a 3.3 V USB serial adapter on its console header, an Ethernet cable to its lan3 port for installation, and a 10 GbE NIC on the host cabled to its wan port (10GBASE-T; an X710 with a copper SFP+ module works) for the IQ stream. Both revisions run the same images. Most units carry a W25N04KV NAND; some W1700K2s carry a W25N04LV (ID ef 8b 23), which is supported but has never been run on a unit: init/install stops on one until you pass --i-dont-care-about-nand-corruption, and asks for a raw dump of it (init/rawdump) for the maintainers.

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

Then open http://HOST:8073/ and press ▶. The first start loads the radio firmware and brings the radio up (about 2 s). Without the browser, the same operations are host/bin/w1700k load|start|band|tune|gain|filter|stop|status.

Build requirements: a C/C++ compiler, make, git, Python 3.10+, the usual Buildroot prerequisites, clang, ld.lld, llvm-objcopy and llvm-readobj (RISC-V firmware), openssl (firmware container encryption), and libfftw3-dev and zlib for the stream service and the spectrum server. No vendor firmware is downloaded or needed.

Read before use

Licence

MIT, except the Linux driver and kernel patches (GPL-2.0-only), U-Boot patches (GPL-2.0+), the driver's user-space header (GPL-2.0 WITH Linux-syscall-note) and files derived from MediaTek's mt76 driver (BSD-3-Clause-Clear). See LICENSE.

w1700k-sdr (h0m3us3r/w1700k-sdr)

Searching Database…

Что это такое?W1700K SDR превращает Wi-Fi 7 роутер Gemtek W1700K в широкополосный программно-определяемый приёмник: радиомодуль MediaTek MT7996 в роутере снимает сырые 14-битные IQ-данные со скоростью до 320 Msps, SoC AN7581 передаёт их поток по 10 GbE, а Linux-хост показывает их в браузере как живой спектр и waterfall.
Я устанавливаю что-то на свой компьютер, или это прошивка, которая записывается в роутер?И то и другое: кастомная прошивка (патч ROM плюс программы WM и WA, без кода MediaTek) заменяет штатную прошивку радио/SoC роутера, а отдельное ПО для хоста (w1700k-stream, w1700k-spectrum, sdr-recv) запускается на Linux-ПК, чтобы принимать IQ-поток и показывать интерфейс в браузере.
Как это запустить?Подключите USB-переходник в COM-порт на 3,3 В к консольному разъёму W1700K, Ethernet-кабель к его порту lan3 для установки и сетевую карту 10 GbE на хосте к его порту wan, затем прошейте командой init/install; после этого просто откройте веб-интерфейс и нажмите play, чтобы загрузить и запустить прошивку приёмника.
Что нужно на машине для сборки, кроме самого роутера?Для сборки нужны компилятор C/C++, make, git, Python 3.10+, стандартные зависимости Buildroot, clang, ld.lld, llvm-objcopy и llvm-readobj для прошивки RISC-V, openssl для контейнера прошивки, а также libfftw3-dev и zlib для серверов stream и spectrum.
Безопасно ли прошивать, и можно ли всё вернуть обратно?Кастомная прошивка работает только на приём (передача остаётся выключенной) и никогда не записывает постоянный бит eFuse от MediaTek, но её установка полностью заменяет штатную систему роутера; init/install сначала делает резервную копию NAND, чтобы init/restore мог вернуть устройство к заводскому состоянию, а обращение к недокументированным регистрам может подвесить SoC до отключения питания.
Почему бы просто не использовать штатную прошивку от MediaTek?Всё, что работает на радиомодуле, написано с нуля для этого проекта (патч ROM, WM и WA), без какого-либо кода MediaTek. Начальная загрузка и калибровка радио были расшифрованы регистр за регистром по трассировке собственной прошивки MediaTek, поэтому никакие проприетарные блобы не скачиваются и не нужны во время работы.
Какие частоты дискретизации и диапазоны он может захватывать?Он захватывает комплексные 14-битные IQ-данные на 40, 80, 160 или 320 Msps в диапазонах 2,4, 5 и 6 ГГц с помощью радиомодулей MT7976/MT7977, плюс дополнительный режим 640/2 Msps на band 2. LO можно настроить на любую частоту, на которой захватывается синтезатор диапазона, и перестраивать на ходу примерно за 1 мс.
Если что-то сломается, можно ли вернуться на заводскую прошивку?Да — init/install перед прошивкой сохраняет исходные данные NAND на хост, а init/restore записывает эту копию обратно и возвращает устройство к заводской прошивке MediaTek.
Насколько быстро обновляется живой спектр?w1700k-spectrum выполняет FFT на 262 144 точки по каждому массиву сэмплов со скоростью 100 спектров в секунду, со сглаженной («flattened») коррекцией ската децимации прямо в потоке, и рисует картинку в браузере в реальном времени рядом с органами управления приёмника.
Creator
h0m3us3r
Size
20.8 MB
Stars
824
Updated
CommitOct 13
Age
6d
Commits · 90 Days