Het artikel beschrijft hoe de Gemtek W1700K Wi-Fi 7-router kan worden omgevormd tot een breedbandige software-defined receiver (SDR). Door gebruik te maken van de MediaTek MT7996-radio en eigen firmware, kan het apparaat ruwe 14-bit IQ-data vastleggen met snelheden tot 320 Msps.
Belangrijke technische kenmerken:
- Data-transport: De verzamelde data wordt via een 10 GbE-verbinding naar een Linux-host gestreamd, waar het via een browser-UI als live spectrum en waterfall-diagram wordt weergegeven.
- Frequentiebereik: Het systeem ondersteunt de 2.4 GHz, 5 GHz en 6 GHz banden.
- Software-stack: Het project maakt gebruik van een eigen firmware-stack (zonder MediaTek-code) en bevat specifieke tools voor streaming (
w1700k-stream), spectrumanalyse (w1700k-spectrum) en opnames (sdr-recv).
De installatie vereist specifieke hardware, zoals een USB-seriële adapter en een 10 GbE NIC, en vervangt het standaardbesturingssysteem van de router. Er wordt gewaarschuwd dat de firmware uitsluitend voor ontvangst is (receive-only) en dat er risico's zijn verbonden aan het wijzigen van hardware-registers en eFuses.
W1700K SDR
De MediaTek MT7996-radio van de router legt ruwe 14-bit IQ-data vast met een snelheid tot 320 Msps. De Airoha AN7581 SoC streamt deze data via 10 GbE naar een Linux-host, waar het in de browser wordt weergegeven als een live spectrum en waterfall-diagram, met de bedieningselementen van de ontvanger ernaast.
De volledige 2.4 GHz-band kan live worden gevolgd bij 320 Msps, waarbij de roll-off van de decimatie in de stream is gecorrigeerd ("flatten"). Er wordt een FFT van 262.144 punten per sample uitgevoerd, met 100 spectra per seconde (opnames kunnen op 50 frames per seconde draaien).
De MT7996 draait uitsluitend eigen firmware: een ROM-patch, WM en WA die vanuit deze repository zijn gebouwd, zonder MediaTek-code. De radio wordt vanaf een koude start opgestart op basis van initialisatie- en kalibratiegegevens van MediaTek, die register voor register zijn gedecodeerd aan de hand van een trace van de oorspronkelijke MediaTek-firmware. Commando's (LO, sample rate, capture, stream, gain, filter) worden door de host aangestuurd. Voor meer details zie docs/architecture.md en docs/roadmap.md.
Functionaliteiten
Sample rates (Bemonsteringssnelheden)
- 40, 80, 160 of 320 Msps van 14-bit complex IQ op elke band, onafhankelijk van de LO en het filter.
- Op band 2 is ook 640/2 mogelijk (om de andere sample van 640 Msps: vlak tot ±155 MHz, maar signalen tussen 160–320 MHz vallen binnen/fold-in).
Frequentiebanden
- 2.4 GHz (MT7976), 5 GHz en 6 GHz (twee MT7977's).
- Het wisselen van banden gebeurt via een register-schrijfopdracht binnen een actieve stream.
Afstemming (Tuning)
- Er zijn geen vaste kanalen: de lokale oscillator (LO) kan worden ingesteld op elke frequentie waarop de synthesizer van een band lockt.
- Unit A: 2.081–2.748, 4.647–7.509 en 4.707–7.576 GHz.
- Stappenraster: 2.98 Hz (voor 2.4 GHz) of 11.9–14.3 Hz.
- Her-afstemmen is mogelijk tijdens de stream (duurt ongeveer 1 ms).
Front-end
- AGC (Automatic Gain Control) of handmatige LNA/baseband gain.
- Analoog filter van 20–320 MHz.
Transport
- De radio gebruikt DMA naar een 1 GiB ring-buffer in het SoC-DRAM.
- De kernel verzendt elke 8 KiB slice als één UDP-datagram (zero-copy) via de 10 GbE-poort.
- Bij 320 Msps worden de helft van de slices op de cores van de radio zelf gepakt naar 28 bits per sample-paar om binnen de link-capaciteit te passen (verliesvrij en automatisch).
Host-systeem
w1700k-stream: Ontvangt de export en serveert de IQ-stream aan alle consumenten op de host (shared memory, complex int16, gap-tagged). Optioneel kan een correctie ("flatten") voor de roll-off van de decimatie worden toegepast op de samples zelf.
w1700k-spectrum: Voert een 262.144-punts FFT uit bij 100 frames/s over elke sample, inclusief een browser-UI en live bediening.
sdr-recv: Registreert de stream.
Visuele weergaven
- 2.4 GHz bij 320 Msps (flattened): Wi-Fi frames en kortere hopping-bursts op een vloer die vlak blijft tot aan de randen van de band. Het Stream-paneel toont een link die 9.75 Gbit/s transporteert, waarbij de helft van de slices is gepakt en elke sample is getransformeerd.
- 5170–5330 MHz (flattened 320 MHz view): Twee drukke 80 MHz Wi-Fi kanalen. Inzoom op 24 MHz rond 5250 MHz toont de randen van de twee kanalen en de guard-gap daartussen, in 1.22 kHz bins.
Repository-structuur
| Pad | Beschrijving |
platform/ | Wat er op de SoC draait: U-Boot, Linux 6.18 met board-patches, een read-only BusyBox root. |
kernel/w1700k_sdr/ | De MT7996-driver (firmware download, DMA-ring, 10 GbE export, firmware command mailbox) en de clients aan de unit-zijde. |
firmware/ | De MT7996-firmware: de ROM-patch, de WM (radio bring-up, band set-up, streams, RF-controle) en de WA (packer). |
host/w1700k/ | Host-controle: laden van firmware, streaming, RF-controle als firmware-commando's; w1700k serve voor de web-UI. |
host/stream/ | w1700k-stream: de centrale ontvanger van de export; IQ-stream in shared memory en roll-off correctie. |
host/spectrum/ | De spectrum/waterfall webserver. |
host/recv/ | sdr-recv: de stream-recorder. |
init/ | Installatie vanaf stock-firmware, updates en recovery. |
include/hw/ | Register-referentie: alle bekende MT7996, A-die en AN7581 registers als C-headers. |
docs/ | Architectuur en roadmap. |
Aan de slag
Vereisten
- Een W1700K-router.
- Een 3.3 V USB-seriële adapter op de console-header.
- Een Ethernet-kabel verbonden met de
lan3-poort voor installatie.
- Een 10 GbE NIC op de host, verbonden met de
wan-poort (10GBASE-T; een X710 met een koperen SFP+ module werkt).
Installatie en uitvoering
make # Alles bouwen vanuit publieke bronnen (~10 min + downloads)
make check # De testsuite uitvoeren
sudo init/host/link up IFACE # 192.168.1.10/24 op de NIC verbonden met lan3
sudo init/host/tftp-forward enable IFACE
init/install # NAND back-up maken, installeren, radio-kalibratie opslaan
sudo init/host/link up IFACE10G 10.77.0.10/24 9216 # De 10 GbE stream link
host/stream/build/w1700k-stream & # De stream starten voor alle consumenten op deze host
host/spectrum/build/w1700k-spectrum --controller "host/bin/w1700k serve" --listen 0.0.0.0:8073
Open vervolgens http://HOST:8073/ en druk op ▶. Bij de eerste start wordt de radio-firmware geladen en de radio geactiveerd (ongeveer 2 seconden). Zonder browser kunnen dezelfde operaties worden uitgevoerd via: host/bin/w1700k load|start|band|tune|gain|filter|stop|status.
Bouwvereisten
- C/C++ compiler,
make, git, Python 3.10+.
- De gebruikelijke Buildroot-vereisten.
clang, ld.lld, llvm-objcopy en llvm-readobj (voor RISC-V firmware).
openssl (voor encryptie van de firmware-container).
libfftw3-dev en zlib voor de stream-service en de spectrum-server.
- Er is geen vendor-firmware nodig of wordt er gedownload.
Belangrijke waarschuwingen
- Ontvangstmodus: Onze firmware is receive-only. MediaTek-transmissie-kalibraties worden niet uitgevoerd en het transmissiepad van de MAC blijft uitgeschakeld. Desondanks: sluit een antennepoort nooit rechtstreeks aan op een gevoelig instrument zonder een attenuator.
- eFuse: Onze ROM-patch schrijft geen eFuse. Let op: MediaTek ROM-patches vanaf 2025 programmeren permanent één eFuse-gate-bit bij de eerste run (ook bij gebruik van de eigen MediaTek-driver). Een unit die dit ooit heeft gedaan, heeft deze bit gezet.
- Installatie: De installatie vervangt het standaard besturingssysteem.
init/install maakt eerst een kopie van de volledige NAND naar de host; bewaar deze kopie. Voor het herstellen van de stock-versie is een raw NAND-writer nodig, die niet in deze repository is opgenomen.
- Hardware-risico's: Het benaderen van niet-gedocumenteerde MT7996- of AN7581-adressen kan de SoC laten vastlopen of de radio blokkeren tot een power-cycle. In
include/hw/ zijn alle bekende risico's gemarkeerd.
Licentie
MIT, met uitzondering van:
- De Linux-driver en kernel-patches (GPL-2.0-only).
- U-Boot-patches (GPL-2.0+).
- De user-space header van de driver (GPL-2.0 WITH Linux-syscall-note).
- Bestanden afgeleid van MediaTek's
mt76 driver (BSD-3-Clause-Clear).
Zie het LICENSE-bestand voor details.
W1700K SDR
De MediaTek MT7996-radio van de router legt ruwe 14-bit IQ-data vast met een snelheid tot 320 Msps. De Airoha AN7581 SoC streamt deze data via 10 GbE naar een Linux-host, waar het in de browser wordt weergegeven als een live spectrum en waterfall-diagram, met de bedieningselementen van de ontvanger ernaast.
De volledige 2.4 GHz-band kan live worden gevolgd bij 320 Msps, waarbij de roll-off van de decimatie in de stream is gecorrigeerd ("flatten"). Er wordt een FFT van 262.144 punten per sample uitgevoerd, met 100 spectra per seconde (opnames kunnen op 50 frames per seconde draaien).
De MT7996 draait uitsluitend eigen firmware: een ROM-patch, WM en WA die vanuit deze repository zijn gebouwd, zonder MediaTek-code. De radio wordt vanaf een koude start opgestart op basis van initialisatie- en kalibratiegegevens van MediaTek, die register voor register zijn gedecodeerd aan de hand van een trace van de oorspronkelijke MediaTek-firmware. Commando's (LO, sample rate, capture, stream, gain, filter) worden door de host aangestuurd. Voor meer details zie docs/architecture.md en docs/roadmap.md.
Functionaliteiten
Sample rates (Bemonsteringssnelheden)
- 40, 80, 160 of 320 Msps van 14-bit complex IQ op elke band, onafhankelijk van de LO en het filter.
- Op band 2 is ook 640/2 mogelijk (om de andere sample van 640 Msps: vlak tot ±155 MHz, maar signalen tussen 160–320 MHz vallen binnen/fold-in).
Frequentiebanden
- 2.4 GHz (MT7976), 5 GHz en 6 GHz (twee MT7977's).
- Het wisselen van banden gebeurt via een register-schrijfopdracht binnen een actieve stream.
Afstemming (Tuning)
- Er zijn geen vaste kanalen: de lokale oscillator (LO) kan worden ingesteld op elke frequentie waarop de synthesizer van een band lockt.
- Unit A: 2.081–2.748, 4.647–7.509 en 4.707–7.576 GHz.
- Stappenraster: 2.98 Hz (voor 2.4 GHz) of 11.9–14.3 Hz.
- Her-afstemmen is mogelijk tijdens de stream (duurt ongeveer 1 ms).
Front-end
- AGC (Automatic Gain Control) of handmatige LNA/baseband gain.
- Analoog filter van 20–320 MHz.
Transport
- De radio gebruikt DMA naar een 1 GiB ring-buffer in het SoC-DRAM.
- De kernel verzendt elke 8 KiB slice als één UDP-datagram (zero-copy) via de 10 GbE-poort.
- Bij 320 Msps worden de helft van de slices op de cores van de radio zelf gepakt naar 28 bits per sample-paar om binnen de link-capaciteit te passen (verliesvrij en automatisch).
Host-systeem
w1700k-stream: Ontvangt de export en serveert de IQ-stream aan alle consumenten op de host (shared memory, complex int16, gap-tagged). Optioneel kan een correctie ("flatten") voor de roll-off van de decimatie worden toegepast op de samples zelf.
w1700k-spectrum: Voert een 262.144-punts FFT uit bij 100 frames/s over elke sample, inclusief een browser-UI en live bediening.
sdr-recv: Registreert de stream.
Visuele weergaven
- 2.4 GHz bij 320 Msps (flattened): Wi-Fi frames en kortere hopping-bursts op een vloer die vlak blijft tot aan de randen van de band. Het Stream-paneel toont een link die 9.75 Gbit/s transporteert, waarbij de helft van de slices is gepakt en elke sample is getransformeerd.
- 5170–5330 MHz (flattened 320 MHz view): Twee drukke 80 MHz Wi-Fi kanalen. Inzoom op 24 MHz rond 5250 MHz toont de randen van de twee kanalen en de guard-gap daartussen, in 1.22 kHz bins.
Repository-structuur
| Pad | Beschrijving |
platform/ | Wat er op de SoC draait: U-Boot, Linux 6.18 met board-patches, een read-only BusyBox root. |
kernel/w1700k_sdr/ | De MT7996-driver (firmware download, DMA-ring, 10 GbE export, firmware command mailbox) en de clients aan de unit-zijde. |
firmware/ | De MT7996-firmware: de ROM-patch, de WM (radio bring-up, band set-up, streams, RF-controle) en de WA (packer). |
host/w1700k/ | Host-controle: laden van firmware, streaming, RF-controle als firmware-commando's; w1700k serve voor de web-UI. |
host/stream/ | w1700k-stream: de centrale ontvanger van de export; IQ-stream in shared memory en roll-off correctie. |
host/spectrum/ | De spectrum/waterfall webserver. |
host/recv/ | sdr-recv: de stream-recorder. |
init/ | Installatie vanaf stock-firmware, updates en recovery. |
include/hw/ | Register-referentie: alle bekende MT7996, A-die en AN7581 registers als C-headers. |
docs/ | Architectuur en roadmap. |
Aan de slag
Vereisten
- Een W1700K-router.
- Een 3.3 V USB-seriële adapter op de console-header.
- Een Ethernet-kabel verbonden met de
lan3-poort voor installatie.
- Een 10 GbE NIC op de host, verbonden met de
wan-poort (10GBASE-T; een X710 met een koperen SFP+ module werkt).
Installatie en uitvoering
make # Alles bouwen vanuit publieke bronnen (~10 min + downloads)
make check # De testsuite uitvoeren
sudo init/host/link up IFACE # 192.168.1.10/24 op de NIC verbonden met lan3
sudo init/host/tftp-forward enable IFACE
init/install # NAND back-up maken, installeren, radio-kalibratie opslaan
sudo init/host/link up IFACE10G 10.77.0.10/24 9216 # De 10 GbE stream link
host/stream/build/w1700k-stream & # De stream starten voor alle consumenten op deze host
host/spectrum/build/w1700k-spectrum --controller "host/bin/w1700k serve" --listen 0.0.0.0:8073
Open vervolgens http://HOST:8073/ en druk op ▶. Bij de eerste start wordt de radio-firmware geladen en de radio geactiveerd (ongeveer 2 seconden). Zonder browser kunnen dezelfde operaties worden uitgevoerd via: host/bin/w1700k load|start|band|tune|gain|filter|stop|status.
Bouwvereisten
- C/C++ compiler,
make, git, Python 3.10+.
- De gebruikelijke Buildroot-vereisten.
clang, ld.lld, llvm-objcopy en llvm-readobj (voor RISC-V firmware).
openssl (voor encryptie van de firmware-container).
libfftw3-dev en zlib voor de stream-service en de spectrum-server.
- Er is geen vendor-firmware nodig of wordt er gedownload.
Belangrijke waarschuwingen
- Ontvangstmodus: Onze firmware is receive-only. MediaTek-transmissie-kalibraties worden niet uitgevoerd en het transmissiepad van de MAC blijft uitgeschakeld. Desondanks: sluit een antennepoort nooit rechtstreeks aan op een gevoelig instrument zonder een attenuator.
- eFuse: Onze ROM-patch schrijft geen eFuse. Let op: MediaTek ROM-patches vanaf 2025 programmeren permanent één eFuse-gate-bit bij de eerste run (ook bij gebruik van de eigen MediaTek-driver). Een unit die dit ooit heeft gedaan, heeft deze bit gezet.
- Installatie: De installatie vervangt het standaard besturingssysteem.
init/install maakt eerst een kopie van de volledige NAND naar de host; bewaar deze kopie. Voor het herstellen van de stock-versie is een raw NAND-writer nodig, die niet in deze repository is opgenomen.
- Hardware-risico's: Het benaderen van niet-gedocumenteerde MT7996- of AN7581-adressen kan de SoC laten vastlopen of de radio blokkeren tot een power-cycle. In
include/hw/ zijn alle bekende risico's gemarkeerd.
Licentie
MIT, met uitzondering van:
- De Linux-driver en kernel-patches (GPL-2.0-only).
- U-Boot-patches (GPL-2.0+).
- De user-space header van de driver (GPL-2.0 WITH Linux-syscall-note).
- Bestanden afgeleid van MediaTek's
mt76 driver (BSD-3-Clause-Clear).
Zie het LICENSE-bestand voor details.