プログラミング
WiFi 7ルーターを320Mspsのソフトウェア無線受信機に改造する
Turn a WiFi 7 Router into a 320Msps Software Defined Radio Receiver (github.com)
要約
Gemtek W1700K Wi-Fi 7ルーターを改造し、広帯域ソフトウェア無線(SDR)受信機として利用するプロジェクト「W1700K SDR」が公開されました。このルーターのMediaTek MT7996無線チップは、最大320 Mspsの14ビットIQデータをキャプチャし、Airoha AN7581 SoCが10 GbE経由でストリーミングします。Linuxホスト上で、ブラウザを通じてライブスペクトラムとウォーターフォール表示が可能で、受信機の制御も行えます。この改造では、ルーターのカスタムファームウェアが使用され、MediaTekのコードは一切含まれていません。
全文翻訳
W1700K SDRは、Gemtek W1700K Wi-Fi 7ルーターを広帯域ソフトウェア定義受信機に変換します。ルーターのMediaTek MT7996無線チップは、最大320 Mspsの生14ビットIQデータをキャプチャし、Airoha AN7581 SoCが10 GbE経由でストリーミングします。Linuxホストは、ブラウザ上でライブスペクトラムとウォーターフォールとして表示し、受信機の制御も隣に表示します。これは、デシメーションのロールオフがストリームで補正された(「フラット化」された)320 Mspsの2.4 GHz帯全体をライブで表示するものです。毎サンプル262,144点のFFTを毎秒100スペクトル(この録画は毎秒50フレームで実行されています)行います。MT7996は、MediaTekのコードを一切使用せず、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の1サンプルおきのデータ:±155 MHzまでフラットですが、160–320 MHz離れた信号は折り返します)。
帯域
2.4 GHz(MT7976)、5 GHz、6 GHz(MT7977 x2)。帯域の切り替えは、実行中のストリーム内のレジスタ書き込みで行われます。
チューニング
チャンネルはありません。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。
トランスポート
無線はSoC DRAM内の1 GiBリングにDMA転送します。カーネルは8 KiBスライスごとに1つのUDPデータグラムとして、ゼロコピーで10 GbEポートに送信します。320 Mspsでは、リンクに収めるためにスライスの半分が無線自身のコアでサンプルあたり28ビットにパックされます(ロスレス、自動)。
ホスト
w1700k-streamはエクスポートを受信し、ホスト上のすべてのコンシューマーにIQストリームを提供します(共有メモリ、コンプレックスint16、ギャップタグ付き)。オプションで、デシメーションのロールオフの補正(「フラット化」)をサンプル自体に適用します。w1700k-spectrum: 毎サンプルごとに毎秒100フレームの262,144点FFT、ブラウザUI、ライブコントロール。sdr-recvはストリームを録画します。
スクリーンショット
320 Mspsの2.4 GHz、フラット化:Wi-Fiフレームと、帯域端までレベルが保たれたフロア上の短いホッピングバースト。ストリームパネルは、スライスの半分がパックされた9.75 Gbit/sのリンクを示し、すべてのサンプルが変換されています。フラット化された320 MHzビューで、5170–5330 MHzの2つのアクティブな80 MHz Wi-Fiチャンネル。5250 MHz周辺の24 MHzにズーム:2つのチャンネルの端とそれらの間のガードギャップが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ポートへのイーサネットケーブル、IQストリーム用のWANポート(10GBASE-T; X710と銅SFP+モジュールが動作します)に接続されたホスト上の10 GbE NICが必要です。
make # 公開ソースからすべて(ダウンロードプラス約10分)
make check # テストスイート
sudo init/host/link up IFACE # LAN3に接続されたNIC上の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ゲートビットを1つ永続的にプログラムします(MediaTek自身のドライバーでも同様)。一度でも実行したユニットには、そのビットが設定されています。
インストールは、ストックオペレーティングシステムを置き換えます。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)、およびMediaTekのmt76ドライバーから派生したファイル(BSD-3-Clause-Clear)を除く)。LICENSEを参照してください。