bk99.de entertain the web since 1997

W1700K SDR: Ein Wi-Fi-7-Router als 320-MHz-Empfänger

Zusammenfassung

Das Projekt w1700k-sdr verwandelt den Wi-Fi-7-Router Gemtek W1700K in einen breitbandigen SDR-Empfänger, der bis zu 320 Millionen komplexe Abtastwerte pro Sekunde aus den Bändern 2,4, 5 und 6 GHz über 10 GbE an einen Linux-Rechner liefert. Dafür läuft auf dem MediaTek-Funkchip MT7996 ausschließlich selbst geschriebene Firmware, die aus Mitschnitten der Original-Firmware Register für Register nachgebaut wurde. Der Rechner zeigt Spektrum und Wasserfall im Browser, Frequenz, Verstärkung und Filter lassen sich im laufenden Betrieb ändern.

Was ist das?

Im W1700K arbeiten ein Airoha AN7581 mit vier Cortex-A53-Kernen, 2 GiB RAM und 10-GbE-Anschluss sowie der WLAN-Chip MediaTek MT7996 mit drei Funkteilen: einem MT7976 für 2,4 GHz und zwei MT7977 für 5 und 6 GHz. Ein WLAN-Chip liefert normalerweise nur fertig dekodierte Datenpakete. Der MT7996 hat aber eine Erfassungseinheit, die MediaTeks eigene Firmware für eine Spektrumfunktion nutzt, und genau diese Einheit liefert rohe IQ-Daten, also das digitalisierte Funksignal selbst.

Das Projekt nutzt sie als Dauerstrom: 14-Bit-IQ mit 40, 80, 160 oder 320 Msps auf jedem Band, frei abstimmbar statt an WLAN-Kanäle gebunden. Auf dem Linux-Rechner verteilt w1700k-stream die Daten an alle Programme, w1700k-spectrum berechnet daraus 100 Spektren pro Sekunde mit 262.144 Punkten, und sdr-recv zeichnet auf.

Wie es funktioniert

Der ROM-Code des MT7996 prüft weder die Sprungtabelle des Firmware-Patches noch, hinter einem umgebogenen CRC-Test, die nachgeladenen Programme. Deshalb läuft ab dem Patch nur noch Code des Projekts. Um den Funkteil ohne MediaTek-Code zu starten, wurde die Original-Firmware an einem kalt gestarteten Gerät über 69 Ladevorgänge mitgeschnitten, jeder Registerzugriff einzeln protokolliert und das Nötige in C neu geschrieben. Jedes Modul wurde Zugriff für Zugriff gegen diesen Mitschnitt geprüft, bevor es auf der Hardware lief.

Der Datenweg ist auf Durchsatz gebaut: Der Funkchip schreibt per DMA in einen Ringpuffer von 1 GiB, und der Kernel verschickt jeden 8-KiB-Block ohne Kopie als eigenes UDP-Paket. 320 Msps mit 32 Bit pro Abtastpaar ergeben 1,28 GB/s, eine 10-GbE-Leitung trägt aber nur rund 1,24 GB/s Nutzdaten. Darum packen die Rechenkerne des Funkchips die Hälfte der Blöcke verlustfrei auf 28 Bit pro Paar, die Leitung ist dann zu etwa 97 Prozent ausgelastet.

Warum ist das interessant?

Ein RTL-SDR-Stick zeigt rund 2,4 MHz auf einmal, ein HackRF One 20 MHz. Der W1700K erfasst 320 MHz und damit das ganze 2,4-GHz-Band in einem Bild: WLAN, Bluetooth und andere Funkverfahren im selben Wasserfall. Für die Suche nach Störungen, die Kanalplanung im eigenen Netz oder die Aufzeichnung kurzer Funkereignisse ist das eine Bandbreite, die sonst teure Laborgeräte brauchen.

Das Projekt zeigt außerdem, wie viel Messtechnik in Massenware steckt. Die Fähigkeit war im Chip vorhanden, nur hatte niemand außerhalb des Herstellers Zugriff darauf.

Grenzen und Risiken

Die Installation ersetzt das Betriebssystem des Routers und braucht eine serielle 3,3-V-Konsole sowie eine 10-GbE-Netzwerkkarte für 10GBASE-T. Zuerst sichert das Installationsskript den gesamten NAND-Speicher von 544 MiB; zurück zur Original-Firmware kommt man aber nur mit einem NAND-Programmiergerät, das das Projekt nicht mitliefert. Laut eigener Checkliste wurde das Projekt bisher nur auf dem Entwicklungsrechner gebaut, Installation und Wiederherstellung auf einem zweiten Gerät stehen noch aus.

Die Firmware sendet nicht: Sendekalibrierungen fehlen, der Sendepfad bleibt abgeschaltet. Sie schreibt auch keine eFuse, während MediaTeks Patches seit 2025 beim ersten Lauf dauerhaft ein eFuse-Bit setzen. Abstimmbar ist das erste Gerät von 2,081 bis 2,748 GHz und von 4,647 bis 7,576 GHz, und die Pegel sind bisher nicht in dBm kalibriert. Ein Messgerät im strengen Sinn ist der Empfänger damit noch nicht.

Ideen

  • Die Erfassungseinheit eines WLAN-Chips liefert rohe IQ-Daten für ein Breitband-SDR.
  • Eigene Firmware ersetzt MediaTeks Code vollständig und beschränkt sich auf den Empfang.
  • Registerzugriffe der Original-Firmware mitschneiden, verstehen und gezielt nachbauen.
  • Die Hälfte der Datenblöcke auf dem Funkchip packen, damit 320 Msps durch 10 GbE passen.
  • Ein Ringpuffer von 1 GiB überbrückt bei voller Rate etwa 0,8 Sekunden Stau.
  • Frequenz, Verstärkung, Filter und Band lassen sich während des Streams umschalten.

Einsichten

  • Massenware wie WLAN-Router enthält Funktechnik, die als Messwerkzeug weit mehr kann als vorgesehen.
  • Eine fehlende Signaturprüfung im ROM öffnet Bastlern dieselbe Tür wie Angreifern.
  • Der Weg funktioniert nur auf Chips ohne gesetzte Sicherheits-eFuses; wie lange solche Geräte erhältlich bleiben, ist offen.

Fakten

  • Der MT7996 liefert im Projekt 14-Bit-IQ mit 40, 80, 160 oder 320 Msps auf jedem Band.
  • 320 Msps mit 32 Bit pro Abtastpaar ergeben 1,28 GB/s, 10 GbE trägt rund 1,24 GB/s Nutzdaten.
  • Das Umstimmen der Frequenz dauert im laufenden Stream etwa 1 ms.
  • Ein kalter Funkchip ist mit der eigenen Firmware in etwa 2 Sekunden empfangsbereit.

Referenzen

Kritik

  • Alle Leistungsangaben stammen vom Projekt selbst und von einem einzigen Gerät; unabhängige Messungen gibt es bisher nicht.

Bemerkungen

  • Hinter dem Projekt steht das GitHub-Konto h0m3us3r, ein Klarname ist nicht angegeben.
  • Für diesen Beitrag wurde das Projekt nicht selbst installiert oder gemessen.

Empfehlungen

  • Die vollständige NAND-Sicherung vor allem anderen an zwei Orten ablegen.
  • Mit --expect-serial und --backup-only zuerst nur sichern und erst danach installieren.
  • Zwischen Antennenanschluss und empfindlichen Messgeräten immer ein Dämpfungsglied setzen.
  • Für den Einstieg ins SDR reicht ein RTL-SDR-Stick; der W1700K lohnt sich für die Breitbandanalyse von WLAN und dem 2,4-GHz-Band.

Projekt auf GitHub ansehen

Im Webarchiv suchen