ESPARGOS - ESP-SDR: 使用Espressif ESP32芯片的原始IQ捕获
摘要
ESP-SDR通过绕过固定功能调制解调器,使得Espressif的ESP32芯片能够实现原始IQ捕获,从而将其转变为用于接收2.4 GHz频段信号的低成本软件定义无线电平台。
<p><a href="https://lobste.rs/s/werm2e/espargos_esp_sdr_raw_iq_capture_with">评论</a></p>
查看缓存全文
缓存时间: 2026/09/30 00:06
# ESP-SDR:使用乐鑫ESP32芯片进行原始IQ采集
来源:https://espargos.net/espsdr/
使用乐鑫ESP32芯片进行原始IQ采集
乐鑫科技的ESP32微控制器以其Wi-Fi和蓝牙功能而闻名。在过去几个月中(并借助大语言模型的帮助),我们发现了一个未记录的功能,允许固件绕过固定功能调制解调器来捕获原始IQ基带样本。这为将ESP32用作低成本软件定义无线电平台开辟了可能性,该平台能够接收2.4 GHz频段(以及ESP32-C5的5 GHz频段)的信号。
ESP32信号链:射频前端、ADC/DAC、固定Wi-Fi调制解调器和CPU。一条绿色调试路径将ADC/DAC直接连接到CPU,用于原始IQ接收和发送,绕过了Wi-Fi调制解调器。原始IQ路径绕过固定功能的Wi-Fi调制解调器,使软件能够访问基带样本。
## 在浏览器中试用(Web Serial)
为了验证概念,我们制作了一个简单的网页界面,用于显示捕获的IQ样本的实时功率谱和频谱图(以**极低**占空比)。请使用支持Web Serial (https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API)的浏览器。
#### 1 将ESP-SDR固件刷写到你的开发板
通过USB连接你的开发板,并使用浏览器刷写器安装SDR固件。支持的芯片包括**原始ESP32**、**ESP32-C3**、**ESP32-C5**、**ESP32-C6**、**ESP32-C61**、**ESP32-S2**、**ESP32-S3**和**ESP32-S31**。原始ESP32需要USB转UART桥接芯片,通常已集成在开发板中。
打开固件刷写器 (https://espargos.net/espsdr/app/flash.html)
#### 2 探索实时无线电频谱
刷写完成后,将开发板拔下五秒钟,然后重新连接。打开ESP-WebSDR并选择你的设备,即可查看实时频谱。
ESP-WebSDR (https://espargos.net/espsdr/app/)
观看频谱和频谱图演示。(https://espargos.net/espsdr/spectrum-demo.mp4)使用ESP32-S31运行的ESP-WebSDR。尝试在你的浏览器中使用支持的ESP32开发板亲自体验。
## 工作原理
我们推测乐鑫工程师保留IQ采样路径是为了测试和调试调制解调器,例如在晶圆厂进行晶圆上测试。确切的捕获机制、触发模式和内存分配因芯片而异,但基本思路相同:特殊的调试寄存器配置调制解调器的样本转储引擎,将原始IQ样本直接写入芯片的内部SRAM,绕过正常的Wi-Fi处理。固件会预留SRAM,使其不被堆使用,然后让调制解调器将原始IQ写入该内存。
例如,在ESP32-C61上,捕获机制如下工作:ESP32内部的SRAM组织成多个存储体。我们的固件使用其中两个存储体,并将它们组织成一个环形缓冲区。其中一个存储体暂时由调制解调器拥有,调制解调器将原始IQ样本写入其中,而另一个存储体由CPU拥有,CPU将完成的样本复制到缓冲区以传输给主机。固件跟踪硬件写指针,以检测调制解调器何时切换到下一个存储体。
ESP32-C61双存储体环形缓冲区:调制解调器写入存储体3,同时CPU从已完成的存储体2复制样本。每个存储体容量为64 KiB。写入者在存储体之间轮换;CPU必须在存储体被重用前将其归还。使用两个SRAM存储体的环形缓冲区进行捕获,图中显示存储体3正在被填充。在下一轮扫描中,存储体角色将交换。### IQ样本格式
IQ样本的确切格式是可配置的。在我们的实现中,每个复数样本在内存中占据一个32位字。第19-10位保存I分量,第9-0位保存Q分量,两者都是带符号的10位二进制补码值(范围-512到+511)。第27-20位报告接收增益设置(增益表中的索引),而第31-28位很可能是自动增益控制有限状态机的内部状态。
32位IQ转储字,最高有效位优先:第31至28位为推断的AGC状态,第27至20位为RX增益,第19至10位为带符号I分量,第9至0位为带符号Q分量。调制解调器提供的原始ADC转储字。### 捕获设置
#### 调谐
2.2–2.7 GHz 和 4.8–6.0 GHz
5 GHz频段仅在ESP32-C5上可用。确切的调谐限制因芯片而异。
#### 采样率
最高80 MSa/s
将原始复数IQ捕获到内存中,并以低占空比传输到主机。
#### 带宽
约13–54 MHz
模拟接收带宽。确切限制取决于芯片和滤波器设置。
#### 增益控制
自动或手动
内部硬件AGC或手动选择的固定接收增益。
使用ESP-SDR,ESP32甚至可以捕获*超出*官方支持调谐范围的IQ数据。例如,ESP32-C61可以捕获高达2.7 GHz的信号,这包括一些**LTE和5G NR蜂窝频段**,例如2.6 GHz附近的LTE频段7和5G NR频段n7。
### 我们是如何发现这一点的
我们的起点是乐鑫`librftest`库中的`adctrig`函数。在大语言模型的帮助下,我们对该函数进行了逆向工程,以了解它如何配置硬件来捕获原始IQ样本。这些发现构成了ESP-SDR捕获实现的基础。
## 这对ESPARGOS意味着什么
无需任何硬件修改,ESPARGOS One (https://espargos.net/espargos-one)现在可以*相位相干地*捕获原始IQ样本。如果你已经拥有ESPARGOS One (https://espargos.net/espargos-one),请将其固件 (https://espargos.net/firmware/)更新到*dev*分支的最新版本以启用此功能。硬件已经支持它。我们目前提供"IQ信号分析器"演示应用,但正在开发其他演示应用,包括针对任意信号的适配实时增强现实演示。
ESPARGOS One (https://espargos.net/espargos-one)上的IQ采样实现甚至比基于浏览器的演示(ESP-WebSDR)更强大:
- 更高的吞吐量/占空比:ESPARGOS One (https://espargos.net/espargos-one)使用内部SPI传输接口,这比ESP-WebSDR使用的UART接口快得多。
- 信号触发:ESPARGOS One (https://espargos.net/espargos-one)可以配置为仅在检测到信号时流式传输样本,而不是流式传输所有样本(大部分是静默)。
除了现有的基于Wi-Fi信道状态信息(CSI)的演示外,ESPARGOS One (https://espargos.net/espargos-one)现在还可以用作2.4 GHz ISM频段的低成本八通道SDR平台,以低占空比运行。原始IQ采集相对于已处理CSI的优势包括:
- 定位任意信号:ESPARGOS One (https://espargos.net/espargos-one)现在可用于定位2.4 GHz ISM频段中的任意信号,而不仅仅是Wi-Fi信号。这包括**蓝牙**和**低功耗蓝牙**、**Zigbee**,以及以前不支持CSI捕获的Wi-Fi格式(例如,**802.11b**和具有**多空间流**的Wi-Fi信号)。
- 阵列增益:可以在中心进行信号处理和解码,提高弱信号性能。
- 特殊波形:ESPARGOS One (https://espargos.net/espargos-one)现在可以用于更适合特定应用的波形,例如脉冲压缩雷达。更好的是,一些针对此类特殊应用的预处理可以在芯片本身上进行,因此不受吞吐量限制。
**文档进行中:**原始IQ采样启用的额外功能尚未完全包含在ESPARGOS库文档、演示、手册或数据手册中。
## 局限性
在80 MSa/s和每样本32位的情况下,调制解调器以**2,560 Mbit/s**的速度向SRAM写入数据。将这些样本从芯片上取出是瓶颈:输出链接要慢得多。
一个2560 Mbit/s的输入管道将调制解调器连接到SRAM。输出管道显示UART为3 Mbit/s,SPI约为13.3 Mbit/s,ESP32-S31高速USB为480 Mbit/s,千兆以太网为1000 Mbit/s。宽度采用平方根刻度。吞吐量有限:虽然调制解调器可以捕获80 MSa/s,但瓶颈是将样本从芯片上取出。因此,我们的固件以极低的占空比流式传输IQ样本,这足以在浏览器中显示实时频谱和频谱图。捕获窗口之间到达的数据包可能会丢失。
## SoapyESPSDR:GNU Radio 和 gqrx
SoapyESPSDR (https://github.com/ESPARGOS/SoapyESPSDR)是我们为**ESP32-S31**开发的仅接收SoapySDR驱动程序。它通过千兆以太网从运行ESP-SDR固件的开发板流式传输IQ样本,使接收器可供**GNU Radio**和**gqrx**等通过其SoapySDR支持的应用使用。
S31支持8 MSa/s和16 MSa/s的连续接收;更高的采样率需要降低占空比。
**开发中:**一切就绪后,我们将很快发布固件和SoapySDR驱动程序仓库。
即将推出。
使用SoapyESPSDR驱动程序连接到ESP32-S31的gqrx,显示2.462 GHz附近的频谱和频谱图。(https://espargos.net/espsdr/gqrx-esp-sdr.png)通过SoapyESPSDR在gqrx中进行ESP32-S31 IQ接收。点击查看完整尺寸。
## 更多信息和固件
- ESP-SDR固件 (https://github.com/ESPARGOS/esp-sdr):固件源代码和构建说明。
- ESP-WebSDR浏览器界面 (https://github.com/ESPARGOS/esp-web-sdr):基于浏览器的频谱查看器和固件刷写器。
- ESPARGOS One (https://espargos.net/espargos-one)的固件目前仍然是闭源的,但我们现在正考虑将其开源,因为我们一直保密的这个"秘密"IQ功能已被公开。
## 常见问题解答
是的,这也是可能的。在ESPARGOS One (https://espargos.net/espargos-one)上,甚至相位相干发送也是可能的。但是,由于潜在的误用风险,我们目前不提供发送器实现。
不,这是ESP32调制解调器的一项功能,未在公开数据手册中记录。就我们所知,这不是一个安全漏洞,而是一个可用于SDR应用的未记录能力。话虽如此,许多ESP32设备连接到各种云服务,允许制造商远程更新固件。如果在ISM频段中传输敏感数据而未加密,这可能会带来安全问题。在这种情况下,根本问题是未加密的传输。另一方面,ESP32发送任意信号的能力可能会被滥用进行干扰或其他恶意目的,这就是我们目前不提供发送器实现的原因。
由于大多数ESP32型号的占空比限制,使用这些应用与SDR模式没有太大意义。对于ESP32-S31,我们的SoapyESPSDR驱动程序 (https://espargos.net/espsdr/#soapyespsdr)通过千兆以太网提供与GNU Radio、gqrx和其他SoapySDR兼容应用程序的集成。
ESP-SDR目前支持原始ESP32、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-C61、ESP32-S2、ESP32-S3和ESP32-S31。我们正在努力扩大支持的ESP32芯片范围。很可能支持更多型号,但每个芯片需要自己的实现。
是的,这是可能的。外部混频器可以将其他频段的信号转换到ESP32的发送/接收范围内。我们已经为这个目的开发了多通道原型硬件。
## 致谢
用户*h0m3us3r*在我们的公告前几天,首先在Reddit (https://www.reddit.com/r/esp32/comments/1wq37xz/got_raw_iq_streaming_out_of_an_esp32s3_at_80_mss/)上公开了ESP32-S3的这个功能,包括固件源代码。他们使用额外的FPGA来处理传输,实现了80 MSa/s的持续吞吐量。由于我们已经独立研究IQ捕获好几个月了,我们也希望与社区分享我们的发现。
相似文章
多个项目发现 ESP32 微控制器中隐藏的 SDR 能力
多个独立项目在 ESP32 微控制器中发现了未文档化的固件功能,可实现原始 IQ 基带采集,从而将廉价的 Wi-Fi 芯片转变为覆盖 2.2–2.7 GHz、采样率高达 80 MS/s 的软件定义无线电(SDR)。这些项目包括 ESPARGOS、基于 ESP32-S3 加 FPGA 的流式采集方案,以及 C5VRX 5.8 GHz FPV 接收器。
SDR–; 开源SDR软件,具有可视化可修补信号图,使用Rust进行数字信号处理,并配备web UI
sdr--是一个开源软件定义无线电应用,具有可视化可修补信号图,使用Rust构建用于数字信号处理,并配备web UI以供控制和可视化。
ESP32 Bit Pirate 硬件黑客套件:支持所有协议的网页工具
ESP32 Bit Pirate 是一个针对 ESP32-S3 开发板的开源硬件调试生态系统,提供固件、基于浏览器的工具和文档,用于多协议硬件黑客与开发。
ESP32 as counter-surveillance platform
本文介绍如何使用低成本ESP32微控制器构建反监控平台,通过开源工具检测和对抗车牌识别、警用摄像机等监控技术,实现大众化的隐私保护。
ESP32 Bit Pirate:一款支持WebCLI、通吃所有协议的硬件破解工具
ESP32 Bit Pirate 是一款开源固件,可将 ESP32 转变为多协议破解工具,支持通过串口或基于Web的CLI嗅探和交互各种数字及无线电协议。