ESP-SDR voor Zephyr is een project dat de Wi-Fi radio van ESP32-chips (S3, C6 en C5) transformeert tot een Software-Defined Radio (SDR). Het stelt gebruikers in staat om I/Q-data te capturen van de ontvanger en playback uit te voeren via de zend-DAC.
Belangrijkste aspecten:
- Architectuur: Het is opgezet als een Zephyr-module en west-manifest repository. Er is een
multiapp firmware beschikbaar waarmee diverse applicaties, zoals osmosdr (voor GNU Radio en gqrx) en capture, direct op het apparaat kunnen worden uitgevoerd.
- Hardware-ondersteuning: De ESP32-S3 ondersteunt zowel SMP als single core, terwijl de ESP32-C6 en C5 burst-captures en CPU-paced ontvangst/verzending ondersteunen.
- Technische specificaties: De API ondersteunt tuning van 100 tot 6000 MHz (met chip-specifieke beperkingen) en sampling rates van 16, 40 of 80 MS/s. Voor transmissie zijn er 18 vermogensstappen beschikbaar.
- Installatie: De omgeving wordt ingericht via
west, waarbij specifieke blobs en HAL-bestanden van Espressif worden gebruikt.
- Licentie: Het project is gelicenseerd onder GPL-3.0-or-later.
ESP-SDR voor Zephyr
Projectstructuur
| Pad | Beschrijving |
lib/ | espsdr: de bibliotheek (CONFIGESP_SDR) <br> ieee802154: software O-QPSK PHY en Zephyr radio-driver (zie doc/ieee802154.md) |
include/ | espsdr/: de API, waaronder espsdr.h, espsdrrx.h, espsdrtx.h, espsdrring.h, espsdrpaced.h, ieee154phy.h, ieee154esp_sdr.h |
apps/ | capture: survey-capture via de console <br> stream: VITA 49.2 RX en TX via USB (CDC-NCM) <br> osmosdr: HackRF-stijl USB SDR voor GNU Radio en gqrx <br> osmosdr_serial: hetzelfde via USB-Serial-JTAG (C6, C5) <br> link: QAM of OFDM pakketverbinding <br> wpan: 802.15.4 test shell <br> rfprobe: bench probe (tuning, tonen, registers) <br> multiapp: één firmware die de andere apps uitvoert (zie doc/multiapp.md) <br> common: USB met DFU, watchdogs, crash-records |
tests/ | Unit-tests (host), integratietests (één board), regressietests (twee boards); zie doc/testing.md |
doc/ | Handleidingen, register-pagina's, Doxygen en Sphinx build |
scripts/ | west dfu (west_commands/), test runners |
boards/ | waveshare/esp32c5_zero: Waveshare ESP32-C5-Zero |
zephyr/ | module.yml en de librftest.a blobs |
west.yml | De workspace pins (zie Afhankelijkheden) |
Aan de slag
Voer de volgende commando's uit om de omgeving in te richten:
west init -m https://github.com/cyber-murmel/esp-sdr-zephyr esp-sdr-ws
cd esp-sdr-ws
west update
west blobs fetch hal_espressif
west blobs fetch esp-sdr-zephyr
west build -d build --sysbuild -b xiao_esp32s3/esp32s3/procpu esp-sdr-zephyr/apps/multiapp
west flash -d build
west dfu --storage -d build
Hiermee wordt multiapp geïnstalleerd op een XIAO ESP32S3. In de USB-shell van de app toont de lijst alle beschikbare apps; met app run <naam> kan een app worden gestart, bijvoorbeeld app run osmosdr (zie apps/multiapp/README.rst).
Elke app kan ook afzonderlijk worden gebouwd. Releases bevatten het multiapp-image en de SoapySDR-module voor gqrx en GNU Radio.
De bibliotheek
Ondersteunde chips
- ESP32-S3 (XIAO ESP32S3): Ondersteunt SMP of single core.
- ESP32-C6 (XIAO ESP32C6) en ESP32-C5 (C5-Zero): Ondersteunen burst-captures en continue CPU-paced ontvangst en verzending tot 250 kS/s (
espsdrpaced.h). De apps capture, rfprobe, wpan (C6) en osmosdr_serial werken op deze chips.
Tuning
De API ondersteunt 100 tot 6000 MHz, maar de PLL lockt binnen een chip-specifiek bereik (ongeveer 1.8 tot 2.8 GHz op de S3). Onder de 2210 MHz wordt dit gerealiseerd via de 5/6-deler. Er wordt een -ERANGE fout gegeven wanneer de VCO buiten bereik is.
Capture
- Samples: 256 tot 16380 samples bij 80, 40 of 16 MS/s.
- Filters: Analoog laagdoorlaatfilter, optionele CIC-decimatie.
- Ontvangst: Gaploze ring-ontvangst.
Gain
Er kan gekozen worden voor AGC of een vaste index. De vaste gain- en TX-stappen maken gebruik van librftest.a (west blobs fetch esp-sdr-zephyr of CONFIGESPSDR_RFTEST=n).
Transmit
- Playback: Sample-playback op 40 of 80 MS/s.
- Streaming: Gaploze streaming op 40 MS/s / n (
CONFIGESPSDRTXDAC, vereist PSRAM).
- Vermogen: 18 vermogensstappen.
Chip-details en eigenaardigheden
Raadpleeg doc/hardware-quirks.md voor specifieke details.
Configuratie
Activeer de bibliotheek met de volgende instellingen:
CONFIG_NETWORKING=y
CONFIG_WIFI=y
CONFIG_ESP32_WIFI_STA_POWER_SAVE_NONE=y
CONFIG_ESP_SDR=y
Let op: espsdrinit() neemt de radio over die door de Wi-Fi driver is opgestart. Scan niet, maak geen verbinding en start geen access point terwijl deze bibliotheek in gebruik is.
Documentatie
De documentatie is gepubliceerd op https://cyber-murmel.github.io/esp-sdr-zephyr. Om deze zelf te bouwen:
cd esp-sdr-zephyr/doc
doxygen
make html
De site bevindt zich in doc/buildsphinx/html, met de API-referentie in de map doxygen/. De CI bouwt dit met waarschuwingen als fouten (SPHINXOPTS=-W) en publiceert het resultaat.
Versionering
Het bestand VERSION (in Zephyr-formaat) bepaalt de versie van de bibliotheek en de apps; elke app print dit bij het opstarten.
- Major: Voor wijzigingen in de API die niet compatibel zijn.
- Minor: Voor compatibele uitbreidingen.
- Patch: Voor bugfixes.
Een tag v<VERSION> resulteert in een GitHub-release.
Afhankelijkheden
De west.yml pins bevatten:
- Zephyr esp-sdr-multiapp: ESP32-S3 SMP (
zephyrproject-rtos/zephyr#120082), CDC-NCM aggregatie, llext en Xtensa-wijzigingen voor multiapp.
- hal_espressif esp-sdr: De HAL-zijde van de SMP-port.
- libvrt esp-sdr: VITA 49.2.
- esp-sdr (upstream, ongewijzigd): Helper-headers voor de ontvanger.
- esp-dsp: De FFT voor
apps/link OFDM.
Licentie
GPL-3.0-or-later, conform de upstream esp-sdr. Images die de bibliotheek inschakelen, vallen onder de GPL.
ESP-SDR voor Zephyr
Projectstructuur
| Pad | Beschrijving |
lib/ | espsdr: de bibliotheek (CONFIGESP_SDR) <br> ieee802154: software O-QPSK PHY en Zephyr radio-driver (zie doc/ieee802154.md) |
include/ | espsdr/: de API, waaronder espsdr.h, espsdrrx.h, espsdrtx.h, espsdrring.h, espsdrpaced.h, ieee154phy.h, ieee154esp_sdr.h |
apps/ | capture: survey-capture via de console <br> stream: VITA 49.2 RX en TX via USB (CDC-NCM) <br> osmosdr: HackRF-stijl USB SDR voor GNU Radio en gqrx <br> osmosdr_serial: hetzelfde via USB-Serial-JTAG (C6, C5) <br> link: QAM of OFDM pakketverbinding <br> wpan: 802.15.4 test shell <br> rfprobe: bench probe (tuning, tonen, registers) <br> multiapp: één firmware die de andere apps uitvoert (zie doc/multiapp.md) <br> common: USB met DFU, watchdogs, crash-records |
tests/ | Unit-tests (host), integratietests (één board), regressietests (twee boards); zie doc/testing.md |
doc/ | Handleidingen, register-pagina's, Doxygen en Sphinx build |
scripts/ | west dfu (west_commands/), test runners |
boards/ | waveshare/esp32c5_zero: Waveshare ESP32-C5-Zero |
zephyr/ | module.yml en de librftest.a blobs |
west.yml | De workspace pins (zie Afhankelijkheden) |
Aan de slag
Voer de volgende commando's uit om de omgeving in te richten:
west init -m https://github.com/cyber-murmel/esp-sdr-zephyr esp-sdr-ws
cd esp-sdr-ws
west update
west blobs fetch hal_espressif
west blobs fetch esp-sdr-zephyr
west build -d build --sysbuild -b xiao_esp32s3/esp32s3/procpu esp-sdr-zephyr/apps/multiapp
west flash -d build
west dfu --storage -d build
Hiermee wordt multiapp geïnstalleerd op een XIAO ESP32S3. In de USB-shell van de app toont de lijst alle beschikbare apps; met app run <naam> kan een app worden gestart, bijvoorbeeld app run osmosdr (zie apps/multiapp/README.rst).
Elke app kan ook afzonderlijk worden gebouwd. Releases bevatten het multiapp-image en de SoapySDR-module voor gqrx en GNU Radio.
De bibliotheek
Ondersteunde chips
- ESP32-S3 (XIAO ESP32S3): Ondersteunt SMP of single core.
- ESP32-C6 (XIAO ESP32C6) en ESP32-C5 (C5-Zero): Ondersteunen burst-captures en continue CPU-paced ontvangst en verzending tot 250 kS/s (
espsdrpaced.h). De apps capture, rfprobe, wpan (C6) en osmosdr_serial werken op deze chips.
Tuning
De API ondersteunt 100 tot 6000 MHz, maar de PLL lockt binnen een chip-specifiek bereik (ongeveer 1.8 tot 2.8 GHz op de S3). Onder de 2210 MHz wordt dit gerealiseerd via de 5/6-deler. Er wordt een -ERANGE fout gegeven wanneer de VCO buiten bereik is.
Capture
- Samples: 256 tot 16380 samples bij 80, 40 of 16 MS/s.
- Filters: Analoog laagdoorlaatfilter, optionele CIC-decimatie.
- Ontvangst: Gaploze ring-ontvangst.
Gain
Er kan gekozen worden voor AGC of een vaste index. De vaste gain- en TX-stappen maken gebruik van librftest.a (west blobs fetch esp-sdr-zephyr of CONFIGESPSDR_RFTEST=n).
Transmit
- Playback: Sample-playback op 40 of 80 MS/s.
- Streaming: Gaploze streaming op 40 MS/s / n (
CONFIGESPSDRTXDAC, vereist PSRAM).
- Vermogen: 18 vermogensstappen.
Chip-details en eigenaardigheden
Raadpleeg doc/hardware-quirks.md voor specifieke details.
Configuratie
Activeer de bibliotheek met de volgende instellingen:
CONFIG_NETWORKING=y
CONFIG_WIFI=y
CONFIG_ESP32_WIFI_STA_POWER_SAVE_NONE=y
CONFIG_ESP_SDR=y
Let op: espsdrinit() neemt de radio over die door de Wi-Fi driver is opgestart. Scan niet, maak geen verbinding en start geen access point terwijl deze bibliotheek in gebruik is.
Documentatie
De documentatie is gepubliceerd op https://cyber-murmel.github.io/esp-sdr-zephyr. Om deze zelf te bouwen:
cd esp-sdr-zephyr/doc
doxygen
make html
De site bevindt zich in doc/buildsphinx/html, met de API-referentie in de map doxygen/. De CI bouwt dit met waarschuwingen als fouten (SPHINXOPTS=-W) en publiceert het resultaat.
Versionering
Het bestand VERSION (in Zephyr-formaat) bepaalt de versie van de bibliotheek en de apps; elke app print dit bij het opstarten.
- Major: Voor wijzigingen in de API die niet compatibel zijn.
- Minor: Voor compatibele uitbreidingen.
- Patch: Voor bugfixes.
Een tag v<VERSION> resulteert in een GitHub-release.
Afhankelijkheden
De west.yml pins bevatten:
- Zephyr esp-sdr-multiapp: ESP32-S3 SMP (
zephyrproject-rtos/zephyr#120082), CDC-NCM aggregatie, llext en Xtensa-wijzigingen voor multiapp.
- hal_espressif esp-sdr: De HAL-zijde van de SMP-port.
- libvrt esp-sdr: VITA 49.2.
- esp-sdr (upstream, ongewijzigd): Helper-headers voor de ontvanger.
- esp-dsp: De FFT voor
apps/link OFDM.
Licentie
GPL-3.0-or-later, conform de upstream esp-sdr. Images die de bibliotheek inschakelen, vallen onder de GPL.