ARTICLE · 1112934
ESP32挖出隐藏的软件无线电功能:采样率80MS/s,能传出去的只有0.1%

一颗卖几十块钱的Wi-Fi单片机,被人挖出了软件无线电的功能。消息10月1日上了Hacker News首页,146分、25条评论。顺着它最容易得出的结论是:那根四十来美元的RTL-SDR电视棒可以扔了。扔不了,差得还挺远。
先说这事跟谁有关。软件无线电(SDR)就是把天线收到的原始信号整段搬进电脑,解调解码全交给软件,想收什么改程序就行。如果你抽屉里躺着一块ESP32开发板,就是做智能插座那种几十块的板子,刷个固件它就能当2.4GHz的频谱分析仪。路由器、蓝牙耳机、微波炉在空中占了哪一格,看得见。但要是你买SDR为的是收飞机位置广播、听塔台、听短波,这颗芯片一样都干不了。
事情本身是真的。乐鑫(Espressif)的ESP32系列里有一条没写进文档的调试通路。它绕过固定功能的Wi-Fi调制解调器,把射频前端下变频后的原始IQ采样直接倒进芯片内存。IQ就是信号的两路正交分量,SDR的入口数据。覆盖2.2到2.7GHz,ESP32-C5多一段4.8到6.0GHz。采样率最高80MS/s,模拟带宽按芯片落在13到54MHz之间。

RTL-SDR真的可以扔了吗?
这两样东西的频率几乎不重叠,谈不上替代。
RTL-SDR那根棒子本来是看数字电视的USB接收棒,被玩家改成了入门SDR。官方数据手册给的覆盖是500kHz到1766MHz,而ESP32这条路的下限是2200MHz。一个管下面,一个管上面,中间还空着一段谁都不管。
玩SDR最主流的几件事,一件都落不进ESP32的覆盖。最常见的是收飞机:客机不停往外播自己的位置和高度,频率在1090MHz,一根棒子配个天线就能在地图上看见头顶飞过的航班。很多人入门干的就是这件事。其余的也都在下面,气象卫星图137MHz,塔台118到137MHz,调频广播88到108MHz,短波更低。
有个细节容易看漏。ESPARGOS那套固件允许你把频率从100一路输到6000MHz,一兆一格,但说明里写明这只是软件上的限制,没有硬件验证。射频前端只在那一小段有响应,能输进去不等于能收到。
官方口径我也对了一遍。乐鑫自己的ESP32-C5模组数据手册,射频特性那章写的是2412到2484MHz、5180到5885MHz。这条路子伸到的那两段,两头都探出了乐鑫标定过的范围。出了那个范围,灵敏度和动态范围没有任何官方指标。
80MS/s真的比RTL-SDR强30倍吗?
纸面上确实是三十几倍。能传出去的那部分,大概是它的0.1%。
采样率和吞吐量是两件事。芯片这边一个复数采样占一个32位字,80MS/s等于每秒2560Mbit写进内存,折成320MB。往外的出口只有串口的3Mbit/s和内部SPI的13Mbit/s出头,差着两三个数量级。
这个比例我自己算了一遍。按lozaning那个项目记下的寄存器,ESP32-S3上那块IQ缓冲区是64KB,一个采样4字节,装得下16384个。80MS/s下采满要0.2毫秒。再用3Mbit/s的串口把这64KB搬出来,要175毫秒。看一眼0.2毫秒,搬运175毫秒,循环往复。ESPARGOS因此在项目说明里老实写着“低占空比”,采一小段停一大段。它现在的正经用途是频谱分析仪,不是连续接收。
想真正连续起来只有两条路。一条是降采样加新接口。乐鑫今年3月发布、现已量产的ESP32-S31带了千兆网口,16MS/s折下来512Mbit/s,塞进千兆还有余量。所以能连续跑16MS/s、能接上GNU Radio和gqrx的,眼下只有它。
另一条是外挂。h0m3us3r的eSpDR走这条路。ESP32-S3用16根引脚把采样喂给一块Alchitry Au的FPGA板,那板子带256MB缓存,负责重排和无损压缩。数据再经一颗FT600芯片走USB3进电脑,持续吃住190MB/s。相位噪声的问题他前几天刚解决:从ESP32自带的晶振引一路20MHz时钟给FPGA,不让FPGA当时钟源,两边就不再各自漂了。

浏览器里刷个固件就能用吗?
刷是真能刷。ESPARGOS做了个网页版刷写工具,插上板子点两下就写进去,C5VRX也有自己的。问题是刷完拿到的就是那个低占空比的频谱和瀑布图,走串口,3Mbit/s。
再往上的玩法都要动手。C5VRX把ESP32-C5做成5.8GHz航模图传接收机,40MS/s采样,覆盖48个频道。板上直接解宽带调频,再用一串电阻搭的6位DAC输出模拟复合视频,电阻值仓库里写了,得自己焊。作者还留了一句,这些观测不能代表所有距离和增益状态下的表现。相位相干那套更不是一块板子的事,ESPARGOS是把八根天线做成阵列才做到的。
几十块买到了几百块设备的哪一部分?
价格都是我10月2日一家家打开页面抄的,美元价取商家自营店或DigiKey美国站的单片价,不含税费运费,零头进到整数。
便宜那头先说。Seeed官方店的XIAO ESP32-C5,不焊排针那版不到7美元,有货,这正是C5VRX用的板子,也是唯一能摸到5.8GHz的芯片。乐鑫原厂板更便宜。DigiKey美国站上ESP32-DevKitC标10美元,ESP32-S3-DevKitC标15美元,带千兆网口的ESP32-S31功能核心板标20美元出头。货就没那么好说了,这三块在DigiKey都是0库存,S31那块排到2027年2月,厂家交期21周。国内立创商城上乐鑫原厂板也全是0库存或预售。
查对照那头时撞上件我没料到的事:拿来当参照的两件设备,眼下都不是能随手买到的状态。RTL-SDR Blog V4官方店标约40美元,页面写着缺货,官方还发了公告说V4停产,用的R828D调谐芯片库存耗尽了。接棒的V4L约38美元,中国仓有货。两份数据手册指标一样:500kHz到1766MHz,8位ADC,稳定带宽2.56MHz。这里最要紧的是1766这个数,它的上限比ESP32的下限2200MHz还低,两边一点都不搭。
HackRF One更绕。官方页上它还在,没写停产,还写着零售商有卖。可我把几家官方零售商逐个打开看:Adafruit标约340美元、注明不再备货;Hacker Warehouse售罄,并写明One已不再生产、由HackRF Pro接棒;OzHack也是售罄。一个在售的美元价我没核到。能买到的是HackRF Pro,SparkFun标400美元,有货。HackRF这一路按官方口径是1MHz到6GHz连续覆盖、最高20MS/s、8位IQ、半双工。
ADALM-PLUTO是三件里唯一还能照原样买到的,DigiKey美国站约253美元,库存1242片。按亚德诺(Analog Devices)官方那份文档,它管325到3800MHz,最高61MS/s出头,通道带宽20MHz,收发全双工。
摆到一块,分量就出来了。不到7美元那头,买到的是一段500MHz宽的窗口,外加一个传不出去的80MS/s。400美元的HackRF Pro和253美元的PLUTO卖的根本不是这个:一个给你1MHz到6GHz连着的覆盖,还能发射;一个给你全双工和一整套官方维护的驱动。钱差了几十倍,买到的不是同一件东西的便宜版,是另一件东西。
有一项ESP32反倒占优。它给出的是10位I加10位Q,RTL-SDR只有8位,Hacker News评论里就有人抱怨8位的棒子一挨着大功率发射台就被压死。单比位深和采样率,这颗几美元的单片机确实把四十美元的电视棒按下去了。单比你究竟能收到什么,它们不在一个量级。

几拨人各自摸到同一批寄存器,是巧合吗?
不是巧合。线索是乐鑫自己留在开发工具包里的,而且不止一处。
先把时间摆一摆。C5VRX的仓库8月30日建的,最早那个版本标签打在9月9日。h0m3us3r的eSpDR是9月25日建号、9月26日推上代码,ESPARGOS的esp-sdr在9月28日。9月30日还冒出第四个项目,lozaning的ESP32SDR,用两块ESP32-S3一发一收。rtl-sdr那篇文章写C5VRX是8月13日上传,我打开仓库看到的建号日期是8月30日,这个日子我没核到出处。
第一处线索叫librftest.a,一个射频测试用的库。乐鑫有个叫esp-phy-lib的仓库,装ESP-IDF开发环境时会一起拉下来,里面给每颗芯片都配了一个。我把ESP32-S3那个下下来翻了一遍,255KB,里面明明白白列着两个函数名:adctrig和dactrig,一个管收一个管发。lozaning那个项目的说明写得最细,他们就是从这个库和乐鑫自家的射频测试工具反推出整套寄存器的。
第二处线索叫MODEM_DIAG,调制解调器诊断信号的缩写。C5VRX的仓库名里直接挂着这个词。我顺着去翻ESP-IDF里ESP32-C5那份引脚信号表。从106号到137号,整整32个信号名叫MODEM_DIAG0到MODEM_DIAG31,意思是芯片内部调制解调器有32路诊断信号可以接到引脚上。然后我把乐鑫官方的ESP32-C5技术参考手册下下来,翻到第8章那张信号表:106到116号只标着脉冲计数器的名字,117到255号是一整行破折号。MODEM_DIAG这个词在整本手册里一次都没出现。
到了新芯片上乐鑫给得更多。ESP-IDF里给ESP32-S31单独建了个modem目录。里面有个文件直接定义了两个寄存器,就叫MODEM_DIAG_FIX_SEL和MODEM_DIAG_EXCHANGE。
还有一处是手册里那几块空地。lozaning记下的采集控制寄存器在0x60033D5C,增益寄存器在0x6001C02C。我对着官方ESP32-S3技术参考手册第4章的外设地址表查了一遍。0x6002F000到0x60037FFF这一整段,手册给的标签只有一个词,Reserved。0x6001A000到0x6001DFFF那段也是Reserved。两个寄存器各自落在这两块里。
所以几拨人看到的是同一批公开线索:工具包里的函数名、信号表里的名字、手册上标着Reserved的几块地址。剩下的是慢功夫。ESPARGOS在说明里写了关键一句,他们是在大模型的帮助下找到这条调试通路的。h0m3us3r是个例外,他的说明里既没提librftest也没提ESPARGOS,只写了“一个未写进文档的硬件采样转存引擎”。他到底是自己摸出来的还是看过别人的东西,我没核到。
乐鑫会不会哪天把这条路堵上?
没写进文档,就等于没承诺。这事有过先例。2025年3月,一家西班牙安全公司说ESP32的蓝牙里藏着后门,乐鑫3月10日发了份回应,口径是那些只是测试用的调试指令、本身不构成安全风险。可同一份回应里还跟着一句:“乐鑫仍将提供软件修复,以移除这些未写进文档的指令。”一条引起关注的未公开调试通路,乐鑫上一次的处理方式就是把它删掉。
发射那一侧更敏感。lozaning那个项目说,两块ESP32-S3能借Wi-Fi的校准信号发生器发出几种调制信号。覆盖100到6000MHz、按5MHz一格落点,互相收发真消息做到零错码率。这种能力在任何国家都不是随便能对外辐射的。Hacker News评论里就有人担心,一旦任意发射被摆上台面,乐鑫会因为认证和出口管制的压力被迫打补丁封掉。别把这条路当产品的地基。

你手上那块ESP32现在能干什么?
能干的事挺实在:2.2到2.7GHz的频谱扫描和瀑布图。看自家路由器的信道挤不挤、找Wi-Fi时断时续是哪来的干扰,都在范围里。有ESP32-C5还能看5.8GHz那片航模图传频道。业余无线电的13cm段,2300到2450MHz,也落在里面。Hacker News上有位玩家说这批成果可能把13cm的玩法带起来,已经订了几块ESP32-S31准备试。
要配的东西分两档。只想看频谱,一块支持的板子就够,原版ESP32、C3、C5、C6、C61、S2、S3、S31都行,闪存2到4MB,网页刷写工具点几下写进去。想连续抓IQ接到GNU Radio或gqrx上,眼下只有ESP32-S31走千兆网这一条路通,连续8和16MS/s。再往上得降占空比,或者照eSpDR那样自己配FPGA板和USB3芯片,那是另一个量级的投入。
别指望的事上面说过一半:2.2GHz以下的东西一样都收不到,灵敏度和动态范围也没有官方指标。还得再加两条。稳定性别当真,C5VRX的作者自己写了远距离不可靠。发射这块有人做出来了,但别碰。
照我看,它是一台很便宜的2.4GHz频谱分析仪,不是一台便宜的SDR。这两个定位差得远,而现在传开的说法把它们混成了一个。
那80MS/s到底是个什么数?
这个数是真的,没人吹牛,只是它只在芯片内部那块64KB的缓冲区里成立。采满0.2毫秒,搬出来175毫秒。参数写得再漂亮,传不出来就只能自己看。
这件事真正值钱的地方也不在采样率。手册里那几段地址被乐鑫标成了Reserved,可人人都要下载的开发工具包里,留着adctrig的函数名和32个MODEM_DIAG信号名。几拨人分别顺着这两样东西摸进去,摸到了同一个地方。一颗量产了快十年的芯片,最热闹的地方居然是手册上没写的那一块。