ESP32チップ内部にSDR機能が眠っていた

Espressif SystemsのESP32は、Wi-FiやBluetooth機能で広く知られるマイクロコントローラーですが、このたび未公開の隠れたSDR機能が発見されました。この新発見により、ファームウェアが固定機能モデムをバイパスし、Raw IQベースバンドサンプルを直接キャプチャできることが明らかになりました。これは外部のRTL-SDRやSubGHzトランシーバー、外部オーディオADCといった追加ハードウェアなしに、チップ内部のモデムADC信号経路を利用する画期的な方法です(出典)。

この発見は、ESP32を低コストのSDRプラットフォームとして利用する道を拓き、2.4 GHz帯の任意の信号を受信可能にするものです。

ESP32-C5チップでは5 GHz帯にも対応し、開発者にとって新たな可能性が広がります。ESP32がSDRとして機能することは、以前にもESP32を多数結合したフェーズドアレイアンテナ「ESPARGOS」のプロジェクトで言及されていましたが、今回のように内部機能として発見されたのは注目に値します(出典)。

WebブラウザでSDRを体験できるデモを提供

この画期的なSDR機能を、ほぼすべてのESP32開発ボードとデスクトップWebブラウザを使って試せるデモが公開されています。Webインターフェースでは、キャプチャされたIQサンプルのパワースペクトルとウォーターフォール図を視覚的に確認できます。

試すためのステップは以下の通りです。

  1. ESP-SDRファームウェアをボードに書き込む(対応チップはESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-S2, ESP32-S3, ESP32-S31)。
  2. ボードのUSBを抜き差しし、ESP-WebSDRを開いてデバイスを選択すると、ライブスペクトルが表示されます。

Web Serial対応ブラウザがあれば、すぐにでもSDRの世界に触れることができます。これは開発者にとって、非常に手軽に新機能を体験できる良い機会ではないでしょうか。

内部モデムのデバッグ機能を活用した仕組み

この機能は、EspressifのエンジニアがモデムのテストやデバッグのためにIQサンプリングパスを残していたものと推測されています。チップごとにキャプチャメカニズム、トリガーモード、メモリ割り当ては異なりますが、基本的な考え方は共通です(出典)。

特別に用意されたデバッグレジスタがモデムのサンプルダンプエンジンを設定し、Raw IQサンプルをチップの内部SRAMに直接書き込みます。これにより、通常のWi-Fi処理をバイパスします。ファームウェアはSRAMの一部を予約し、ヒープが使用できないようにすることで、モデムがRaw IQデータをそのメモリに書き込むことを可能にしています。

ESP32-C61の例では、SRAMをリングバッファとして2つのバンクに分割します。1つのバンクはモデムがRaw IQサンプルを書き込むために一時的に占有され、もう1つのバンクはCPUが完了したサンプルをホストへの転送用バッファにコピーするために使用されます。ファームウェアはハードウェアの書き込みポインタを監視し、モデムが次のバンクに移動したことを検出します(出典)。

キャプチャ設定の概要

項目 詳細
チューニング 2.2–2.7 GHz (ESP32-C5は4.8–6.0 GHzも)
サンプルレート 最大80 MSa/s
バンド幅 約13–54 MHz (アナログRXバンド幅)
ゲイン制御 自動または手動

IQサンプルは32ビットワードで、Iはビット19-10、Qはビット9-0に格納されます。これにより、ESP32は公式サポート範囲を超える2.7 GHzまでの信号(LTEバンド7や5G NRバンドn7など)もキャプチャできるとのことです。

エンジニア目線で見ると:潜在能力と実用化への課題

このESP32の隠れたSDR機能は、個人開発者やスタートアップにとって非常に魅力的な技術だと感じます。特に、追加ハードウェアなしでSDR機能を実現できるという点は、PoC(概念実証)やプロトタイプ開発のコストを大幅に削減できる可能性を秘めているのではないでしょうか。

個人的には、普段使っているPythonやTypeScriptのプロジェクトに、Pythonバインディングがあればぜひ組み込んでみたいです。Raspberry Piのような他の低コストボードと比べて、ESP32はWi-FiとBluetoothを内蔵しているため、ワイヤレス通信とSDR機能を組み合わせたエッジデバイスの開発に強みを発揮しそうです。

ただし、課題もいくつか見受けられます。主記事にもあるように、Raw IQデータのホストへの転送は低デューティサイクルで行われるため、PC接続の汎用SDRとして連続的な高帯域幅データ転送には不十分だと考えられます(出典)。これは、あくまでスナップショット的なスペクトラム分析や特定イベントの検出には使えるものの、リアルタイムでの広帯域モニタリングやデータロギングには限界があることを示唆しています。

また、ドキュメント化されていない機能であるため、Espressif社の今後のファームウェアアップデートで挙動が変わったり、最悪の場合利用できなくなるリスクも考慮する必要があります。この点はオープンソースコミュニティによる継続的なサポートが鍵となるでしょう。

クラウド連携を考えるなら、AWS IoT CoreやGCP Cloud IoT Coreのようなサービスと組み合わせて、エッジで収集したSDRデータをクラウドで分析する、といったアーキテクチャも面白いかもしれません。個人のプロダクトとしては、特定の無線信号を検出して通知するIoTデバイスなどに応用できそうな予感がします。