前阵子群里有人问:同样叫Mini板,为什么ESP32-S3 Mini比ESP32-C3 Mini贵出一大截?有人回“买新不买旧”,有人说“C3够用就行”,也有人专门强调“S3一定要买带PSRAM的版本,USB还得看准是原生还是桥接”。吵到最后没人把话讲透。我手上刚好躺着几块S3 Mini和C3 Mini,干脆这次从芯片差异、PSRAM、USB一路讲到下单前那张可核对的采购单,谁再问就直接把链接甩过去。
1. 先把S3和C3的“骨架”认识清楚,再谈怎么买
很多人把S3和C3当成同一系列的大小号,买的时候只看价格和引脚数,结果项目做着做着发现“别人能跑我怎么就跑不起来”。其实这两颗芯片的底层体系结构就不一样,搞懂这个,后面所有选购判断都会变得简单。
1.1 CPU差异不是跑分,是“这个活它干不干得动”
ESP32-C3用的是单核RISC-V,主频最高160MHz;ESP32-S3是双核Xtensa LX7,主频最高240MHz。只看数字,S3似乎只比C3高一点点,但双核的真正价值在于可以把任务拆开跑。比如一个核跑Wi-Fi/BLE协议栈和网络回调,另一个核跑业务逻辑,实时性明显比单核来回切换要好。
S3还有一个容易被忽略的向量扩展指令,做FFT、矩阵运算、图像处理这类计算时有硬件加速,配合乐鑫的ESP-DL可以做简单的图像分类、关键词唤醒,这是C3完全没有的能力。但反过来说,如果你只是做温湿度上报、开关控制、MQTT消息传递这种负载很轻的节点,C3的单核RISC-V完全不会成为瓶颈,甚至更合适——功耗更低、发热更小、价格更便宜。所以“S3更强”不是买S3的理由,“你的项目需要S3”才是。
1.2 内存才是真正的分水岭:一个能扩,一个不能
S3内部SRAM有512KB,实际能自由分配的内存要打个折扣;C3大约400KB可用。听起来都“不大”,但S3有一个C3永远没有的能力:外挂PSRAM,也就是通过芯片内部的PSRAM控制器扩展内存。市面上常见模组可以配2MB、4MB、8MB的PSRAM,而C3的模组既没有PSRAM引脚,也没有相关控制器,内存上限就是芯片内部那点SRAM。
这个差异直接决定了你能跑什么应用。后面会专门讲PSRAM,这里只记住一句话:S3的可玩性是“可以扩展”出来的,C3的上限出厂就定死了。
1.3 USB定位天差地别,别只看“有个Type-C口”
S3和C3这两颗芯片都内置了USB控制器,但性质完全不同。C3内置的是USB-Serial/JTAG控制器,可以把它理解成一个“芯片内部的调试转USB芯片”,主要用来输出日志、烧录固件和JTAG调试;S3内置的则是全速USB-OTG控制器,既能当USB设备(模拟串口、键盘、鼠标、U盘),也能当USB主机(读取U盘、接入键鼠)。光是这个差别,就已经决定了一批项目只能用S3做,C3只能干瞪眼。
2. PSRAM:跑屏幕、跑摄像头、跑模型之前先看懂这个参数
2.1 一帧画面算给你看,512KB内存为什么不够
很多新手拿到S3后想跑LVGL,结果发现一个简单的界面都卡,或者编译能过但运行时直接重启。问题基本都出在内存上。
拿最常见的320x240分辨率屏幕来说,如果采用RGB565格式显示,一帧的数据量是:
320 × 240 × 2 = 153600 字节,约150KB。
这还只是帧缓冲,LVGL还需要为控件、字体、图形对象、布局留内存。算上系统栈、Wi-Fi缓冲、协议栈占用的空间,512KB的SRAM很容易被吃满。如果想做全屏双缓冲或者更复杂的UI,一帧就要300KB,加上其它开销,不带PSRAM的S3基本寸步难行。
摄像头更夸张。OV2640输出的RGB565帧同样是150KB起步,如果还要做JPEG编码缓冲、神经网络输入张量、代码运行空间,几百KB的内存消耗是常态。这不是优化能解决的,是硬件容量问题。
2.2 为什么“S3必须带R”,R后缀到底代表什么
乐鑫的S3模组命名很有规律,比如ESP32-S3-WROOM-1-N8R2、N16R8、N8R8。这里的N代表Flash容量,R代表PSRAM容量:N8R2就是8MB Flash加2MB PSRAM,N16R8就是16MB Flash加8MB PSRAM。如果商品页只写“8MB”而没有R,基本可以确定这颗S3没有PSRAM。
我自己的经验是:如果只是想用S3沾点新特性的光、跑个基础LVGL时钟界面,N8R2的“8MB Flash + 2MB PSRAM”是最低门槛,勉强够用;如果涉及摄像头、TinyML模型、音频处理这类应用,直接上N16R8或者N8R8,8MB PSRAM带来的余量能省掉大量内存优化的烦恼。市面上还有一种Quad PSRAM和Octal PSRAM的差异,八线Octal带宽更高,摄像头抓图和屏幕刷新时会明显更顺,这也是N16R8比N8R2贵一截的原因之一。
怎么确认手里这块板子到底有没有PSRAM?Arduino环境下运行ESP.getPsramSize(),MicroPython下运行import esp; esp.spiram_size()。返回0就是不支持或没焊,返回几兆就说明PSRAM正常。我一般收到板子的第一件事就是跑这段代码,比看商品描述可信多了。
2.3 C3没有PSRAM,也不是不能显示,只是别硬造
C3没有PSRAM,不代表它完全不能接屏幕。驱动一个128x160或者240x240的小屏,做简单菜单、画几个数字图表,C3的内部SRAM还是能塞下的。但要有意识地控制帧缓冲大小,避免用LVGL的大组件和过度动画,不然程序会频繁崩溃重启。
把话说直白点:C3的定位是低功耗联网节点,适合做传感器采集、开关控制、蓝牙信标、小屏状态显示这层工作。如果你的图纸里出现了“复杂UI”这个词,C3这条线可以直接划掉了。
3. USB这一块的水很深:原生、桥接、OTG、驱动一个一个说
3.1 原生USB和USB转串口根本不是一回事
买开发板时很多人只看“有Type-C口就行”,其实这个口背后可能是两种完全不同的实现。
S3和C3芯片内部本身就有USB控制器,所以大概率板子上的Type-C是直接连到芯片USB引脚的,这叫原生USB。但市面上确实存在一批早期开发板或兼容板,USB口先接一颗CH340或CP2102,再通过串口连到芯片的UART0。这种方案本质上只是把USB当“串口转接线”用,芯片的原生USB能力就跟用户没关系了。
判断方法很粗暴:插上电脑后打开设备管理器,看枚举出来的设备名。原生USB的S3会显示“ESP32-S3”相关的设备名,C3会显示“USB JTAG/serial debug unit”;如果是外置桥接芯片,你会看到“USB-SERIAL CH340 (COMx)”或“CP210x USB to UART Bridge Controller”。另外可以看板子USB口附近有没有一颗独立的SSOP/SOP小芯片,有基本就是桥接方案。
| 设备管理器里看到的名称 | 说明 |
|---|---|
| ESP32-S3 相关设备名 | S3原生USB,支持OTG/HID相关玩法 |
| USB JTAG/serial debug unit | C3原生USB,仅调试串口与JTAG |
| USB-SERIAL CH340 (COMx) | 外置CH340桥接方案 |
| CP210x USB to UART Bridge | 外置CP2102桥接方案 |
3.2 S3的原生USB-OTG能做什么、不能做什么
S3的USB是Device和Host都能做的。Device模式最常用的是模拟串口(CDC)、模拟键盘鼠标(HID)、模拟U盘(MSC),还能做成键盘加串口的复合设备。很多USB小键盘、宏键盘就是拿S3做的,把常用操作录制成脚本,一个热键一个热键打出来,效率比手工操作高多了。
Host模式则可以把S3变成一个小主机:插U盘读数据、插键盘输入指令、插鼠标做简单交互。这套玩法需要一条OTG线,也就是Type-C转USB母口的那种转接线,普通数据线不行。
但S3的USB有一个硬限制:它是全速USB,速率最高12Mbps,不是电脑上那种480Mbps高速USB2.0。所以别指望拿它做USB网卡、高速U盘这类高带宽传输,做HID键盘、低速串口、小文件读写是完全没问题的。
3.3 C3的USB-Serial-JTAG,是调试口,不是外设口
C3的USB口在Linux、macOS、Windows下通常免驱就能识别成一个COM口和一个JTAG调试接口。它能干的事包括:输出串口日志、烧录固件、以及配合OpenOCD做JTAG调试。对做嵌入式开发来说,这已经非常方便了,省掉了外挂CH340的成本和麻烦。
但注意,它不是OTG,不能当USB主机,不能枚举成键盘鼠标,也不能接U盘。不少人以为“C3也有USB口,肯定也能学S3做USB小键盘”,这就搞错方向了。C3的USB控制器是纯调试用的,是给开发者准备的口,不是给产品准备的外设口。
3.4 插上电脑不认识设备,先查这四件事
遇到烧录失败、设备管理器里显示“未知USB设备(设备描述符请求失败)”时,别急着怀疑板子坏了,按顺序排查效率最高。
第一,换线。很多Type-C线根本不含数据线芯,只供电不传数据,这是最最常见的坑。插上没有任何反应时,九成是线的问题。
第二,换USB口。机箱前置面板的USB口有的供电不稳,插到主板背板USB口再试。
第三,看驱动。Win10/11对原生USB的ESP32设备一般免驱,但CH340/CP2102需要安装对应驱动。驱动装完还是异常,试试卸载后重新插拔。
第四,检查COM口占用和端口状态。如果原生USB CDC模式,波特率设置成多少其实无所谓,数据走CDC虚拟串口;但如果是CH340桥接,波特率不对或者端口被占用,esptool就报“No serial data received”。下载失败时还可以按住板子上的BOOT按键再插USB,强制进入下载模式,这是最后保底手段。
4. 按项目对号入座:四种典型玩法到底选哪块
4.1 智能家居传感器节点:C3 Mini性价比之王
如果你要做的是温湿度上报、门窗状态检测、继电器控制、蓝牙ibeacon、电池供电的传感器节点,C3 Mini是这个价格段最舒服的选择。单核160MHz跑这类应用绰绰有余,功耗和发热也更好控制,长期通电不担心。
唯一的提醒是:C3的GPIO数量少、没有PSRAM,如果你心里隐隐觉得以后想加屏幕、想加摄像头,那还是别省这笔钱。GPIO不够用的时候,换板子比换程序痛苦得多。
4.2 LVGL屏幕、摄像头、TinyML:直接锁定带PSRAM的S3
这类项目没有悬念,就是S3带PSRAM的版本,重点只在选多大容量。初级屏幕项目选8MB Flash加2MB PSRAM的N8R2能跑;摄像头、图像识别、语音唤醒、音频播放这类应用,优选16MB Flash加8MB Octal PSRAM的N16R8。价格会贵一些,但换来的是开发体验和实现空间。
这里有个小建议:做屏幕项目时,把大数组和缓冲显式分配到PSRAM。Arduino下用heap_caps_malloc(size, MALLOC_CAP_SPIRAM)或者ps_malloc(),MicroPython下让解释器自动管理,LVGL在带PSRAM的编译配置下也会自动使用PSRAM。如果不做显式分配,光有PSRAM也可能白瞎。
4.3 USB HID外设、小工具:只有S3原生OTG能做
USB宏键盘、音量旋钮、脚踩快捷键、手柄模拟、读卡小机器——这一类“把ESP32变成USB外设”的项目,只能选S3原生USB版本。C3的USB-Serial-JTAG没有HID能力,做不了。同理,想当USB Host读U盘和接键盘的,也只有S3能做。
开发环境上,Arduino-esp32框架下直接用esp32-tinyusb库就能实现HID键盘、鼠标、MSC等设备,官方示例很齐全;ESP-IDF里也有原生USB Host栈和TinyUSB组件。做Host时买一条质量好的OTG线,别用那种几块钱的劣质转接头,USB枚举不稳是最烦的。
4.4 原型验证和入门学习:C3够用,但S3生态更宽
如果只是熟悉ESP-IDF、刷MicroPython、验证MQTT和Wi-Fi链接,C3 Mini是完全合格的学习板。它便宜、免驱、烧录简单,坏了不心疼。
但必须说实话:在Arduino生态和第三方库的覆盖度上,S3比C3要完整得多。很多库默认以ESP32双核优先,对RISC-V单核的C3优化不充分,甚至个别外设驱动会有兼容性问题。如果你预算只够买一块板子,又不知道自己会走到哪一步,多花几十块买S3带PSRAM版本,容错率会高很多。
5. 一张可核对的采购单:下单前逐项打勾
5.1 板子参数里容易看漏的六项
我每次帮朋友代购开发板,都会把下面这张表对着商品详情页过一遍,看完再下单,基本不会翻车。
| 核对项 | 以什么为准 | 说明 |
|---|---|---|
| Flash容量 | C3至少4MB,S3建议8MB起 | Flash太小,MicroPython固件、文件系统和证书容易塞不下 |
| PSRAM容量 | 按项目定 | 有屏幕选2MB起步,摄像头/TinyML选8MB;商品页没标默认无PSRAM |
| USB类型 | 原生USB还是CH340桥接 | 看设备管理器识别名,原生USB才能玩HID/OTG |
| 排针情况 | 是否已焊排针 | 不少Mini板默认不焊排针,买回来还得自己动手 |
| 引脚引出情况 | 对着引脚图核对 | C3的GPIO18/19是USB固定脚,S3的GPIO19/20是USB固定脚,八线PSRAM也会占用内部引脚 |
| 天线形式 | PCB天线/IPEX外接 | 金属外壳场景一定要选带IPEX外接天线的版本 |
买S3的时候尤其要看清“Flash + PSRAM”的完整组合。商品标题里写“ESP32-S3 Mini 8M+2M”才是8MB Flash加2MB PSRAM,只写“8MB”的基本就是无PSRAM版本,价格看着便宜,买回去跑不了屏幕时才发现吃亏。
5.2 配件清单里最容易被忽视的东西
板子之外,我建议细化到线材和电源再下单。下面这几样是我实测最容易出问题的点。
第一,Type-C数据线。必须买带数据传输的线,最好备两根。充电线烧录失败这个问题,每天都有新人踩。
第二,OTG线。只有S3做USB Host时需要,选Type-C转USB母口的线。注意别把OTG线和普通数据线搞混:普通数据线两头都是公口,OTG线一头是Type-C公口、另一头是USB母座,用途正好反过来。
第三,杜邦线。买母对母的2.54mm杜邦线,再配一块面包板,调试阶段够用了。Mini板一般间距紧凑,排母比排针好用。
第四,电源。USB口的5V可以直接给板子供电,但别从板子的3.3V引脚去驱动舵机或电机,板载LDO电流有限。外设多的时候,单独准备一个3.3V稳压模块,或者用5V电源模块分开供电。
第五,散热。S3跑满负荷或者长时间开着屏幕,芯片外壳会明显发热,这是正常现象。如果设备要长期运行,加一个铝散热片成本很低,寿命和稳定性都有改善。
5.3 收货后第一时间做的三件事
板子到手后我建议按这个顺序验证,别直接开始焊项目。
第一,先插USB,看设备管理器识别出的设备名。这能确认板子到底是原生USB还是CH340桥接方案,顺便排除发货发错的情况。
第二,跑一个Blink示例,然后在Arduino里执行ESP.getPsramSize(),或者MicroPython里执行esp.spiram_size()。确认Flash和PSRAM容量和下单时一致。别嫌麻烦,这几年见过不少标着8M+8M实际只有2M PSRAM的情况。
第三,完整烧录一遍固件,测试自动下载和BOOT按键是否正常。烧录失败先换线、换USB口,最后再怀疑板子。这一步通过以后,板子才算真正可以开工。
说白了,S3和C3的差别不只是一张芯片规格表,而是两条完全不同的玩法路线。我自己的习惯是:只做传感器节点,C3 Mini够了;但凡图纸里出现屏幕、摄像头、USB-HID这三个词,直接拿S3带PSRAM的版本,不要再纠结那点差价。这张采购单我到现在还贴在桌面备忘里,每次采购前对着过一遍,能省下不少翻车时间。