ESPARGOS - ESP-SDR: Raw IQ Capture met Espressif's ESP32-chips

Waar anderen voorheen een externe RTL-SDR of SubGHz-transceiver hebben aangesloten op een ESP32, of externe audio-ADC's hebben gebruikt voor IQ-samples, tappen wij direct in op de interne modem-ADC-signaalketen van de chip. Hierdoor is er geen extra hardware nodig.

Dit opent de mogelijkheid om de ESP32 te gebruiken als een goedkoop software-defined radio (SDR) platform, dat in staat is om willekeurige signalen in de 2,4 GHz-band (en de 5 GHz-band op de ESP32-C5) te ontvangen. Het raw IQ-pad omzeilt de vaste Wi-Fi-modem, waardoor software direct toegang krijgt tot de baseband-samples.

Probeer het in je browser (Web Serial)

Je kunt deze functionaliteit testen in een (desktop)webbrowser met bijna elk ESP32-ontwikkelbord. De webinterface toont het vermogensspectrum en een watervaldiagram van de vastgelegde IQ-samples (bij een zeer lage duty cycle). Gebruik hiervoor een browser die Web Serial ondersteunt.

Stappenplan:

  1. Flash de ESP-SDR firmware op je board

Verbind je board via USB (indien beschikbaar via de native/debug-poort) en installeer de SDR-firmware met de flasher. Ondersteunde chips: de originele ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-S2, ESP32-S3 en ESP32-S31.

  1. Verken het live radiospectrum

Koppel het board na het flashen vijf seconden los en sluit het opnieuw aan. Open ESP-WebSDR en selecteer je apparaat om het live spectrum te bekijken.

Hoe het werkt

Het is aangenomen dat engineers van Espressif het IQ-samplingpad hebben laten zitten voor het testen en debuggen van de modem, bijvoorbeeld voor on-wafer testing in de fabriek. Hoewel het exacte capture-mechanisme, de trigger-modi en de geheugenallocatie per chip verschillen, is het basisprincipe hetzelfde: speciale debug-registers configureren de sample-dump engine van de modem om raw IQ-samples direct in het interne SRAM van de chip te schrijven, waarbij de normale Wi-Fi-verwerking wordt omzeild.

De firmware reserveert SRAM zodat de heap dit niet kan gebruiken, waarna de modem de raw IQ-data in dat geheugen schrijft.

Voorbeeld: De ESP32-C61

Bij de ESP32-C61 werkt het mechanisme als volgt:

  • Het SRAM in de ESP32 is georganiseerd in banken.
  • De firmware gebruikt twee van deze banken en organiseert ze als een ringbuffer.
  • Eén bank is tijdelijk in bezit van de modem, die de raw IQ-samples schrijft, terwijl de andere bank in bezit is van de CPU, die de voltooide samples kopieert naar een buffer voor verzending naar de host.
  • De firmware volgt de hardware write pointer om te detecteren wanneer de modem overgaat naar de volgende bank.

IQ-sampleformaat

Het exacte formaat van de IQ-samples is configureerbaar. In de huidige implementatie neemt elk complex sample één 32-bit word in het geheugen in beslag:

  • Bits 19–10: I-component (signed 10-bit integer, -512 tot +511).
  • Bits 9–0: Q-component (signed 10-bit integer, -512 tot +511).
  • Bits 27–20: Rapportage van de receiver gain-instelling (index in de gain-tabel).
  • Bits 31–28: Waarschijnlijk de interne status van de finite state machine van de automatische gain control (AGC).

Capture-instellingen

InstellingSpecificaties
Tuning2,2–2,7 GHz en 4,8–6,0 GHz (5 GHz alleen op ESP32-C5). Stabiliteitslimieten verschillen per chip.
Sample rateTot 80 MSa/s (Raw complex IQ capture in geheugen, overdracht naar host bij een lage duty cycle).
Bandbreedte~13–54 MHz (Analoge RX-bandbreedte, afhankelijk van chip en filterinstellingen).
Gain controlAutomatisch (interne hardware AGC) of handmatig (vast geselecteerde receiver gain).

Met ESP-SDR kan de ESP32 zelfs IQ-data vastleggen buiten het officieel ondersteunde tuningbereik. De ESP32-C61 kan bijvoorbeeld signalen tot 2,7 GHz vastleggen, wat sommige LTE- en 5G NR-cellulaire banden omvat, zoals LTE-band 7 en 5G NR-band n7 rond 2,6 GHz.

Hoe we dit hebben ontdekt

Het startpunt was de adctrig-functie in de librftest-bibliotheek van Espressif. Met behulp van LLM's (Large Language Models) is deze functie via reverse engineering geanalyseerd om te begrijpen hoe de hardware wordt geconfigureerd voor het vastleggen van raw IQ-samples. Deze bevindingen vormden de basis voor de implementatie van ESP-SDR.

Wat dit betekent voor ESPARGOS

Zonder hardwaremodificaties kan ESPARGOS One nu fase-coherent raw IQ-samples vastleggen. Gebruikers van ESPARGOS One kunnen de firmware updaten naar de nieuwste versie van de dev-branch om deze functionaliteit te activeren.

Op dit moment is de "IQ Signal Analyzer" demo-applicatie beschikbaar, en er wordt gewerkt aan aanvullende demo's, waaronder een aangepaste real-time augmented reality-demo voor willekeurige signalen.

Vergelijking: ESPARGOS One vs. Browser-demo (ESP-WebSDR)

De IQ-sampling op ESPARGOS One is krachtiger dan de browser-gebaseerde demo:

  • Hogere throughput / duty cycle: ESPARGOS One gebruikt een interne SPI-transportinterface, die veel sneller is dan de UART-interface van ESP-WebSDR.
  • Signaaltrigger: In plaats van alle samples te streamen (wat vaak stilte is), kan ESPARGOS One zo worden geconfigureerd dat er alleen samples worden gestreamd wanneer een signaal wordt gedetecteerd.

Naast de bestaande demo's gebaseerd op Wi-Fi Channel State Information (CSI), kan ESPARGOS One nu worden gebruikt als een goedkoop acht-kanaals SDR-platform voor de 2,4 GHz ISM-band.

Voordelen van raw IQ capture boven CSI:

  • Localiseren van willekeurige signalen: Het is nu mogelijk om niet alleen Wi-Fi-signalen, maar alle signalen in de 2,4 GHz ISM-band te lokaliseren. Dit omvat Bluetooth, Bluetooth Low Energy, Zigbee en Wi-Fi-formaten die voorheen niet ondersteund werden voor CSI-capture (bijv. 802.11b en Wi-Fi met meerdere spatial streams).
  • Array gain: Signaalverwerking en decodering kunnen centraal worden uitgevoerd, wat de prestaties bij zwakke signalen verbetert.
  • Speciale waveforms: ESPARGOS One kan worden gebruikt met waveforms die geschikter zijn voor specifieke toepassingen, zoals pulse compression radar. Sommige voorverwerking voor dergelijke toepassingen kan direct op de chip gebeuren, waardoor de throughput minder beperkend is.

Let op: De aanvullende mogelijkheden van raw IQ-sampling zijn nog niet volledig opgenomen in de documentatie, demo's, handleiding of datasheet van de ESPARGOS-bibliotheek.

Beperkingen en high-speed opties

Bij 80 MSa/s en 32 bits per sample schrijft de modem 2.560 Mbit/s naar het SRAM. De bottleneck is het weghalen van deze samples van de chip, aangezien de output-verbindingen veel trager zijn. De standaard serial burst-capture profielen transporteren IQ-samples bij een lage duty cycle, wat voldoende is voor een live spectrum en watervaldiagram in de browser.

Voor continue IQ-receptie is de ESP32-S31 beschikbaar met de volgende opties:

  • High-speed USB: Tot 20 MSa/s via de native USB-poort.
  • Gigabit Ethernet: Tot 40 MSa/s over een gigabit-netwerk.

SoapyESPSDR: GNU Radio & Gqrx

SoapyESPSDR is een open-source, receive-only SoapySDR-driver voor de ESP32-S31. Hiermee kunnen continue IQ-samples naar desktopapplicaties worden gestuurd om signalen te beluisteren in Gqrx, samples op te nemen of een eigen demodulator te bouwen in GNU Radio. (Experimenteel: firmware en driver zijn beschikbaar, signaalkwaliteit is mogelijk nog niet optimaal).

Installatie SoapyESPSDR:

  1. Flash de streaming firmware op een ESP32-S31 Function-CoreBoard via de USB-debugpoort of UART-adapter.
  2. Installeer SoapyESPSDR op een Linux-computer en verbind het board via de native high-speed USB-poort of Ethernet.

Meer informatie en firmware

  • ESP-SDR firmware: Broncode van de firmware en build-instructies.
  • SoapyESPSDR driver: Installatie en setup voor desktop SDR-applicaties.
  • ESP-WebSDR browser interface: Browser-gebaseerde spectrumviewer en firmware-flasher.

De firmware van ESPARGOS One blijft voorlopig closed source, maar er wordt overwogen dit open-source te maken nu deze IQ-functionaliteit openbaar is.

Veelgestelde vragen (FAQs)

Kan de ESP32 ook willekeurige signalen verzenden? Ja, dit is mogelijk. Op ESPARGOS One is zelfs fase-coherente transmissie mogelijk. Vanwege het risico op misbruik wordt er momenteel geen transmitter-implementatie aangeboden.

Is dit een backdoor in de ESP32-chip? Nee, dit is een functie van de modem die niet in de publieke datasheet is gedocumenteerd. Het is geen beveiligingslek, maar een ongedocumenteerde mogelijkheid voor SDR-toepassingen. Echter, als gevoelige data onversleuteld over de ISM-banden wordt verzonden, kan dit een beveiligingsrisico vormen; het probleem ligt dan bij de onversleutelde transmissie.

Werkt de SDR-modus ook met GNU Radio / gqrx / SDR# / CubicSDR? Ja, via de ESP32-S31 en SoapyESPSDR kunnen deze applicaties worden verbonden voor continue IQ-receptie tot 20 MSa/s (USB) of 40 MSa/s (Ethernet). Andere ESP32-modellen maken gebruik van de browser-viewer met standaard burst/FFT firmware-profielen.

Welke ESP32-chips worden ondersteund? Momenteel: de originele ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-S2, ESP32-S3 en ESP32-S31. Uitbreiding naar meer modellen is waarschijnlijk, maar vereist per chip een eigen implementatie.

Kan er een externe mixer worden toegevoegd voor een breder frequentiebereik? Ja, een externe mixer kan signalen uit andere frequentiebanden vertalen naar het zend- en ontvangstbereik van de ESP32. Er zijn reeds multi-channel prototype hardware-oplossingen hiervoor beschikbaar.

Erkenningen

Gebruiker h0m3us3r maakte als eerste deze functionaliteit voor de ESP32-S3 bekend op Reddit, inclusief firmware-broncode, enkele dagen voor deze aankondiging. Zij bereiken een aanhoudende throughput van 80 MSa/s door een extra FPGA te gebruiken voor de overdracht. Aangezien wij onafhankelijk al enkele maanden aan IQ-capture werkten, wilden we onze bevindingen nu ook met de community delen.