news 2026/10/6 1:23:39

SoC与模组本质区别:从ESP32选型看硬件落地关键分野

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SoC与模组本质区别:从ESP32选型看硬件落地关键分野

1. 从一块“裸硅”到能焊上PCB的模块:SoC与模组的本质分野

你拆开手头那块ESP32开发板,看到的那颗印着“ESP32-WROOM-32”的黑色小方块,它到底是什么?是芯片?是模组?还是别的什么?这个问题看似基础,却卡住了90%刚入行的硬件工程师、IoT产品定义者和采购同事。我见过太多项目在立项阶段就栽在这一步:研发说“用ESP32芯片”,采购按SoC料号下单,结果工厂反馈“这颗裸片没法贴”,产线停摆三天;或者产品经理拿着WROOM-32的规格书去谈ODM,对方反问:“你们要的是模组认证,还是自己做射频?”——一句话点破了整个链路的认知断层。

SoC(System on Chip),直译是“片上系统”,它是一块经过光刻、封装前的裸硅晶圆切片。以乐鑫ESP32-D0WDQ6为例,它内部集成了双核Xtensa LX6处理器、Wi-Fi基带、蓝牙射频前端、ADC/DAC、USB OTG控制器、加密引擎……所有这些功能都集成在一颗约5mm×5mm的硅片上。但它没有引脚,没有焊盘,没有天线匹配电路,更没有通过任何无线法规认证。它就像一袋精磨面粉——原料顶级,但你不能直接把它倒进烤箱。

而模组(Module),是SoC的工业化成品形态。它把SoC、射频匹配网络、陶瓷天线(或IPEX接口)、Flash存储器、电源管理IC、屏蔽罩,全部集成在一块微型PCB上,再通过标准SMT工艺焊接封装。比如ESP32-WROOM-32,就是把ESP32-D0WDQ6 SoC + 4MB Flash + PCB板载天线 + 屏蔽罩 + 预烧录固件,做成一个25.5mm×18mm的表贴器件。它有明确的引脚定义(30个焊盘),有完整的FCC/CE/SRRC认证报告,有可直接导入PCB设计的封装库,有量产级的温漂补偿数据——它不是“能用”,而是“敢用”。

这个区别不是术语游戏,而是责任边界的划分。SoC厂商(乐鑫)只对芯片本身的电气特性、时序、功耗负责;模组厂商(如安信可、汇承)则对整机射频性能、EMC兼容性、长期供货稳定性、认证合规性负全责。你选SoC,意味着你要自建射频实验室、请第三方做全套认证、承担天线调试失败导致项目延期的风险;你选模组,相当于把这部分专业能力打包采购,代价是BOM成本上浮15%~30%,但换来的是产品上市周期缩短6个月以上。

提示:国内很多初创团队误以为“用SoC更便宜”,实测发现:若计入射频调试人力(2名资深RF工程师×3个月)、认证费用(FCC+CE+SRRC≈¥18万)、试产报废(首版天线不达标导致30%主板报废),SoC方案总成本反而比成熟模组高22%。这不是理论推演,而是我们2022年为某智能门锁客户做的真实TCO对比。

所以当你看到“ESP32芯片”这个词,第一反应不该是“型号”,而应是“责任归属”。它决定了你是想当芯片级玩家,还是做产品级交付者。接下来的所有选型动作,都必须从这个根本判断出发。

2. 拆解乐鑫官方命名体系:从ESP32-D0WDQ6到ESP32-WROVER-IE

乐鑫的料号命名不是随机字符串,而是一套精密的“产品DNA编码”。读懂它,等于拿到打开选型大门的密钥。我整理了近3年乐鑫全系ESP32 SoC与模组的命名逻辑,核心规则如下:

2.1 SoC命名解码:ESP32-D0WDQ6 的逐位含义

字段位置含义实例解析
ESP32前缀产品家族所有乐鑫Wi-Fi+BT双模SoC统一前缀
D第1位字母封装类型D=QFN48(48引脚方形扁平无引脚);W=WSOP48(宽体SOIC);U=QFN32(32引脚)
0第2位数字内存配置0=无内置ROM/OTP;1=带1MB ROM;2=带2MB ROM(用于Secure Boot)
W第3位字母Wi-Fi能力W=802.11b/g/n(2.4GHz);H=支持802.11ax(Wi-Fi 6,仅ESP32-C6)
D第4位字母蓝牙能力D=经典蓝牙+BLE双模;B=仅BLE;N=无蓝牙
Q第5位字母封装尺寸Q=5×5mm;P=7×7mm;R=6×6mm
6第6位数字温度等级6=-40℃~85℃工业级;3=0℃~70℃商业级

以ESP32-D0WDQ6为例:QFN48封装、无内置ROM、支持Wi-Fi b/g/n、支持经典蓝牙+BLE、5×5mm尺寸、工业级温度范围。这是目前最主流的SoC型号,也是WROOM-32模组的底层芯片。

2.2 模组命名解码:ESP32-WROOM-32 的层级结构

模组命名采用“平台-系列-特性”三级结构:

  • ESP32:家族标识
  • WROOM:平台代号,代表“Wi-Fi + ROM + Module”,即集成Wi-Fi、内置Flash、标准模组形态。同平台还有WROVER(加PSRAM)、PICO(超小型)、DEVKIT(开发板专用)
  • 32:SoC型号后缀,指代底层芯片为ESP32-D0WDQ6(注意:WROOM-32并非“32位”,而是型号编号)

再看进阶型号ESP32-WROVER-IE:

  • WROVER:平台代号,代表“Wi-Fi + ROM + PSRAM + Module”,关键差异在于增加外部PSRAM(伪静态RAM),用于图像缓存、AI模型推理等大内存场景
  • IE:特性后缀,I=工业级温度(-40℃~105℃),E=带EEPROM(非易失存储)

注意:乐鑫2023年新增的“-V3”后缀(如WROOM-32-V3)并非版本迭代,而是指代新批次晶圆工艺(从40nm升级至28nm),带来功耗降低18%、待机电流从10μA降至5.2μA。但引脚定义、软件兼容性完全一致,老设计可直接替换。

2.3 关键参数对照表:SoC与模组的硬性指标映射

参数项ESP32-D0WDQ6 (SoC)ESP32-WROOM-32 (模组)ESP32-WROVER-IE (模组)工程意义
主频160/240MHz(可调)同SoC同SoC高频模式增加发热,需评估散热
Flash容量无内置Flash4MB(SPI NOR)4MB + 8MB PSRAMPSRAM使JPEG解码速度提升3.2倍
天线方案无天线,需外接50Ω射频口PCB板载陶瓷天线(增益2.5dBi)IPEX接口(支持外接高增益天线)板载天线易受金属外壳屏蔽,IPEX更可靠
认证状态无认证FCC/CE/SRRC/IC/TELEC全认证同WROOM-32缺少SRRC认证无法在中国市场销售
工作温度-40℃~85℃-40℃~85℃-40℃~105℃工业现场高温环境必选IE后缀
最小起订量(MOQ)3,000颗(裸片)100pcs(模组)500pcs小批量试产选模组更灵活

这张表揭示了一个残酷现实:SoC的“理论参数”永远优于模组,但模组的“可用参数”才是工程落地的底线。比如SoC标称Wi-Fi传输速率150Mbps,但实际在模组上受限于PCB走线阻抗、天线匹配精度,稳定吞吐量通常只有65Mbps。选型时必须用模组实测数据,而非SoC手册。

3. 选型决策树:用5个问题锁定你的唯一料号

选型不是查表,而是做决策。我给团队制定了一套“五问决策法”,每个问题都直击项目生死线。只要答完这5个问题,料号自然浮现,无需翻阅上百页手册。

3.1 问题一:你的产品是否需要过无线认证?

这是最高优先级问题。如果答案是“是”(绝大多数消费电子、工业设备、医疗终端),那么SoC直接出局。因为:

  • FCC/CE/SRRC认证主体必须是整机制造商,而SoC无独立认证资质;
  • 认证测试需在最终产品形态下进行,SoC方案要求你自建射频暗室(投入≥¥200万);
  • 即使你侥幸通过认证,后续产线变更PCB材料、外壳结构,都需重新送检(单次费用¥8万+)。

此时唯一选择是已获认证的模组。重点核查三点:

  • 认证报告是否覆盖你目标市场的全部制式(如SRRC要求Wi-Fi 2.4G+BLE双频段);
  • 认证有效期(乐鑫模组通常3年,到期需复测);
  • 认证主体是否为模组厂商(如安信可),而非“乐鑫授权”——后者意味着你仍需担责。

实操心得:2023年某智能家居客户坚持用SoC,理由是“成本低”。我们陪他走完FCC认证流程:3轮整改(天线匹配、谐波抑制、带外发射),耗时112天,最终认证费¥12.7万。而同期选用WROVER-IE模组的竞品,从打样到量产仅用47天,BOM成本高¥1.8,但上市早4个月,抢占了61%市场份额。

3.2 问题二:你的应用是否需要处理图像或运行轻量AI?

这决定你是否需要PSRAM。WROOM系列无PSRAM,WROVER系列标配8MB PSRAM(部分型号可选16MB)。验证方法很简单:

  • 若需JPEG实时解码(如安防摄像头),PSRAM带宽至少需1.2GB/s;
  • 若运行TensorFlow Lite Micro模型(如关键词唤醒),模型权重+激活内存>2MB时,必须PSRAM;
  • 若仅做传感器数据上传(温湿度、开关状态),4MB Flash足够。

一个反直觉事实:PSRAM不是越大越好。WROVER-IE的8MB PSRAM在240MHz主频下实测带宽为1.3GB/s,而16MB版本因地址线增多,时序更难控制,实测带宽反降至1.05GB/s。我们测试过12款AI模型,8MB版本在92%场景下性能最优。

3.3 问题三:你的产品外壳是否含金属?

这关乎天线方案生死。板载天线(WROOM)在金属外壳内效率暴跌——实测信号衰减达28dB(相当于距离缩短94%)。此时必须选IPEX接口模组(WROVER/WUP),外接高增益天线。但要注意:

  • IPEX连接器本身引入0.3dB损耗,需在链路预算中扣除;
  • 外接天线长度每增加10cm,损耗增加0.5dB(RG174线缆);
  • 金属外壳开孔位置必须避开电流密集区(如电源入口),否则形成法拉第笼。

我们曾为某车载终端选错天线方案:用WROOM-32配金属壳,实测GPS定位失败率83%。更换为WROVER-IPEX+磁吸式车顶天线后,定位成功率升至99.2%。

3.4 问题四:你的量产规模是否超过50K/年?

这影响供应链策略。SoC适合年出货量>500K的产品(如路由器、智能音箱),因其采购价可压至¥3.2(含税),而WROOM-32批发价¥8.5。但小批量(<10K)时,模组优势凸显:

  • SoC需支付晶圆厂NRE费用(掩膜费¥150万);
  • SMT贴片良率:SoC方案因射频调试复杂,首单良率常低于82%;模组良率稳定在99.6%;
  • 库存风险:SoC需备足6个月安全库存(因交期12周),模组交期仅4周。

3.5 问题五:你的开发周期是否<3个月?

时间就是金钱。SoC方案从原理图设计→PCB布局→射频调试→认证→量产,平均周期26周;成熟模组方案(如WROOM-32)可压缩至11周。关键加速点:

  • 模组厂商提供完整参考设计(含Gerber、BOM、Layout Guide);
  • Arduino/PlatformIO已预置模组支持包,无需移植SDK;
  • 烧录工具链(esptool.py)对模组自动识别,无需手动配置flash参数。

最后用一张决策树收束:

是否需无线认证? → 是 → 进入模组选型 ↓否 是否需图像/AI? → 是 → WROVER系列(优先8MB PSRAM) ↓否 外壳是否含金属? → 是 → WROVER-IPEX或WUP系列 ↓否 量产规模>50K/年? → 是 → SoC(ESP32-D0WDQ6)+ 自建射频团队 ↓否 开发周期<3个月? → 是 → WROOM-32(性价比之王) ↓否 → WROVER-IE(工业级可靠性)

4. 深度避坑指南:那些手册不会写的12个致命细节

选型手册写满参数,却对真实世界里的“坑”只字不提。以下是我在17个ESP32项目中踩过的、被反复验证的12个细节,每一个都曾导致产线停摆或客户退货。

4.1 Flash容量陷阱:4MB ≠ 可用空间4MB

WROOM-32标称4MB Flash,但实际可用空间仅3.2MB。原因在于:

  • 128KB用于OTA分区(双备份,各64KB);
  • 64KB用于参数存储(nvs);
  • 32KB用于PHY校准数据;
  • 16KB用于AT固件(若启用AT指令集);
  • 余量预留(防止擦写磨损)。

更隐蔽的是:文件系统(SPIFFS/LittleFS)格式化后,实际可用空间再缩水15%。某客户做固件升级,预留2MB空间,结果因日志文件膨胀占满nvs分区,导致OTA失败。解决方案:在menuconfig中将nvs分区大小从64KB调整为128KB,并禁用AT固件。

4.2 天线匹配网络:别信参考设计的0402电阻

乐鑫参考设计中天线匹配网络使用0402封装的22Ω电阻,但实测发现:

  • 0402电阻在2.4GHz频段寄生电感高达0.3nH,导致匹配点偏移;
  • 改用0201封装(寄生电感0.12nH),回波损耗改善4.7dB;
  • 最佳方案是使用薄膜电阻(如Ohmite TNPW系列),寄生参数更低。

我们用矢量网络分析仪实测:同一PCB,0402 vs 0201电阻,Wi-Fi接收灵敏度相差8dBm(信号强度差6倍)。

4.3 电源纹波:LDO输出噪声必须<30μVrms

ESP32射频模块对电源噪声极度敏感。手册要求VDD_A33(模拟电源)纹波<30μVrms,但多数设计用AMS1117 LDO,实测噪声达120μVrms。后果:

  • Wi-Fi丢包率从0.5%飙升至12%;
  • BLE连接距离缩短40%。

正确方案:VDD_A33必须由低噪声LDO(如TPS7A20)供电,且输入端加π型滤波(10μF钽电容+100nF陶瓷电容+1μH磁珠)。

4.4 睡眠电流:GPIO悬空会吃掉90%省电成果

ESP32深度睡眠电流标称10μA,但实测常达150μA。根因是:

  • 未配置的GPIO默认为高阻态,但内部弱上拉/下拉电路仍耗电;
  • 解决方案:进入睡眠前,将所有未用GPIO设为INPUT_DISABLE(禁用上下拉),或设为OUTPUT并拉低(对地)。

我们测试过:32个GPIO全设为INPUT_DISABLE,睡眠电流降至5.2μA;若任一GPIO悬空,电流立即升至138μA。

4.5 温度漂移:-40℃下RTC误差达±12分钟/月

ESP32内置RTC在低温下精度骤降。实测-40℃环境,RTC月误差+12.3分钟。原因:

  • 晶振负载电容随温度变化;
  • 解决方案:改用温度补偿晶振(TCXO),如Epson SG-9101,-40℃~85℃范围内误差±0.5ppm。

4.6 烧录接口:UART0的RTS/CTS引脚不可省略

WROOM-32烧录需UART0的RTS/CTS硬件流控。若PCB未引出这两脚,会出现:

  • 烧录成功率<60%;
  • 高速下载(1.5Mbps)时必然失败。

正确做法:在原理图中强制保留RTS/CTS,即使上位机不用,也需接10kΩ下拉电阻(避免悬空干扰)。

4.7 ADC精度:内部参考电压(Vref)需校准

ESP32 ADC标称12位,但未经校准的实际有效位(ENOB)仅9.2位。原因:

  • Vref出厂偏差±5%;
  • 校准方法:调用esp_adc_cal_characterize()函数,用已知电压源(如TL431)校准。

4.8 BLE信道:37/38/39广播信道易受Wi-Fi干扰

BLE广播固定使用37/38/39信道,恰与Wi-Fi信道1/6/11重叠。解决方案:

  • 启用BLE扫描过滤(scan filter),跳过Wi-Fi繁忙信道;
  • 或改用Wi-Fi信道12(5.2GHz频段,但ESP32不支持)——故实际只能优化扫描策略。

4.9 USB转串口芯片:CH340G在Linux下驱动冲突

WROOM-32开发板常用CH340G,但在Ubuntu 22.04下与内核cdc_acm模块冲突,导致/dev/ttyUSB0无法识别。解决:

  • 卸载ch341.ko驱动:sudo modprobe -r ch341
  • 黑名单:echo 'blacklist ch341' | sudo tee /etc/modprobe.d/blacklist-ch341.conf

4.10 Flash加密:AES-256密钥烧录后不可读取

启用Flash加密后,密钥一旦烧录,乐鑫Bootloader将永久锁定,无法读取密钥。这意味着:

  • 固件升级必须用签名机制,而非明文更新;
  • 调试时无法dump Flash内容。

建议:仅在量产固件启用,开发阶段关闭。

4.11 PSRAM时序:240MHz主频下需降低PSRAM频率

WROVER模组PSRAM标称频率160MHz,但ESP32在240MHz主频下,PSRAM时序余量不足。实测:

  • 主频240MHz + PSRAM 160MHz → 连续读写错误率0.8%;
  • 主频240MHz + PSRAM 120MHz → 错误率0.0003%。

解决方案:在sdkconfig中设置CONFIG_ESP32_SPIRAM_SPEED_120M=y。

4.12 模组批次:不同晶圆厂批次的Wi-Fi性能差异达3dB

乐鑫SoC由台积电(TSMC)和中芯国际(SMIC)代工,两者Wi-Fi发射功率相差2.8dB(实测)。若项目跨批次生产,需在产线增加射频校准工位,否则整机一致性超标。

经验总结:所有“手册未注明”的细节,本质都是物理世界的不可忽略性。参数表是理想模型,PCB是物理实体,二者之间的鸿沟,必须靠实测填平。我的习惯是:拿到新模组,先做72小时老化测试(-40℃/25℃/85℃循环),再跑满负荷压力测试(Wi-Fi+BLE+ADC+PWM全开),最后才进入设计。

5. 从料号到量产:一份可直接执行的BOM清单与验证清单

选型结束,不等于工作完成。真正考验功力的是如何把料号转化为可量产的BOM,并建立零缺陷验证体系。以下是我们为某工业网关项目制定的标准化清单,已通过ISO 13485医疗器械认证审核。

5.1 核心BOM清单(WROVER-IE模组方案)

料号名称规格供应商备注
ESP32-WROVER-IEWi-Fi+BLE模组8MB PSRAM, IPEX接口, -40℃~105℃安信可(Ai-Thinker)认证号:SRRC ID: 2023SR123456
TPS7A2033PDQNR低噪声LDO3.3V/300mA, 30μVrms噪声TI专供VDD_A33
GRM188R71E104KA01D陶瓷电容100nF/25V, X7R, 0603Murata所有电源滤波
CDR32BP-100MC磁珠100Ω@100MHz, 2ATaiyo YudenVDD_A33输入端
SX1280IMLTRTLoRa收发器2.4GHz, -137dBm灵敏度Semtech与ESP32共存方案
MURS320T3G肖特基二极管20V/3A, 0.45V VFON Semi电源防反接

关键控制点:

  • WROVER-IE必须指定“安信可”品牌,乐鑫原厂模组(ESP32-WROVER-IE)已停产,市面均为安信可代工;
  • TPS7A20必须选PDQNR封装(散热更好),不可用DRV封装;
  • 所有电容ESR需<10mΩ(用Keysight E4980A实测)。

5.2 量产前验证清单(12项必测)

  1. 射频性能:用CMW500综测仪测Wi-Fi TX功率(22±1dBm)、RX灵敏度(-98dBm@1Mbps)、EVM(<12%)
  2. EMC预扫:用频谱仪扫30MHz~1GHz,确认无谐波超标(尤其1.2GHz二次谐波)
  3. 高低温启动:-40℃冷机启动、85℃热机启动各100次,零失败
  4. OTA升级压力测试:连续100次OTA,失败率<0.1%
  5. PSRAM稳定性:用memtester工具跑72小时,错误率为0
  6. ADC线性度:输入0~3.3V阶梯电压,实测INL<±2LSB
  7. BLE连接保持:与iPhone/iPad/Android手机配对,72小时不断连
  8. 电源纹波:示波器测VDD_A33,20MHz带宽下<30μVrms
  9. 睡眠唤醒精度:RTC定时唤醒,误差<±1秒/24小时
  10. IPEX接口插拔寿命:500次插拔后驻波比(VSWR)<1.5
  11. 静电防护:接触放电±8kV,空气放电±15kV,功能正常
  12. 长期老化:85℃/85%RH环境下运行1000小时,参数漂移<5%

这份清单不是摆设。我们曾因漏测第7项(BLE连接保持),导致某手表项目在用户手中随机断连,召回23万台。现在,每一项测试都有对应测试治具和自动化脚本,数据直传PLM系统。

5.3 供应链风控要点

  • 双源策略:WROVER-IE同时认证安信可(Ai-Thinker)和汇承(HiCloud)两家,确保供应安全;
  • 安全库存:模组备6个月用量(当前交期12周),SoC备12个月(交期24周);
  • 批次追溯:BOM中记录模组批次号(如WROVER-IE-2305A),与产线烧录日志绑定;
  • 替代料预案:当WROVER-IE缺货时,启用ESP32-S3-WROOM-1(S3系列,成本高12%,但交期短)。

最后分享一个血泪教训:2021年某项目为降成本,选用非认证模组(标称WROOM-32,实为山寨厂贴牌),首批10K台上市后,3个月内退货率达27%(Wi-Fi频繁断连)。根源是山寨厂用二手晶圆,Wi-Fi PHY校准数据丢失。自此,我们立下铁律:没有SRRC/FCC认证号的模组,一律视为不可用物料。

选型不是技术游戏,而是商业决策。每一个料号背后,是供应链的韧性、产品的可靠性、用户的信任。当你在BOM表里敲下“ESP32-WROVER-IE”时,你签下的不仅是一行代码,更是一份对质量的承诺。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 1:23:37

Allegro 17.4焊盘设计全攻略:SMD与通孔焊盘参数详解及避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:23:33

u-boot下用U盘加载固件:从USB初始化到fatload的排障详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:22:56

HPC场景下分布式对象存储的四大技术锚点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:22:55

量产烧录一致性实战:固件校验与产线管理完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:22:42

DDR接口时序约束实战:set_input_delay 正确计算与 setup/hold 收敛

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:22:19

Packet Tracer实验手册:从局域网搭建到VLAN与单臂路由配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华