ESP32-S3与C3 Mini怎么选?PSRAM和USB决定项目天花板
上周群里有个做毕业设计的同学发来两张购物车截图,一张是 ESP32-S3 Mini,一张是 C3 Mini,价格差不多、长得也差不多,他问我:到底买哪块?这个问题我一个月里被问过不下五次。很多新手以为这俩只是"性能强一点"和"性能弱一点"的差别,实际真正让人纠结的是两个词:PSRAM 和 USB。无论你想跑 LVGL 屏幕、接摄像头,还是想让开发板模拟成键盘鼠标、读取 U 盘,选择都会完全不同。这篇就把两块板子的采购逻辑彻底捋一遍,结尾附一张可以直接照着打勾的采购单,结合我自己踩过的坑来解释,不管你是刚接触嵌入式还是想升级设备,应该都能用上。
1. 先看名字里的字母游戏:N8R8、N8、C3 对应着什么
1.1 两个 Mini 板,本质是两代完全不同的芯片方案
市面上常见的 S3 Mini 和 C3 Mini 大多来自第三方厂商,比如合宙那一类"把开发板做小、做便宜、USB-C 直插"的产品线。S3 Mini 是把 ESP32-S3 芯片做成小体积核心板,C3 Mini 则基于 ESP32-C3。虽然它们外观相像,底层方案差距很大。
ESP32-S3 是双核 Xtensa LX7 处理器,主频 240MHz,自带向量数学指令,算力比 C3 高一个量级;ESP32-C3 是单核 RISC-V 处理器,主频 160MHz,胜在便宜、省电、结构简单。大部分传感器采集、蓝牙网关、简单网络请求,C3 完全够用;但涉及图像、语音、复杂 UI 或大量数据运算,S3 才是正解。
更大的分水岭是 PSRAM。ESP32-S3 在硬件上支持外挂 PSRAM,ESP32-C3 则压根没有 PSRAM 接口。这意味着 C3 的可用内存被焊死在芯片内部,而 S3 可以通过外挂内存颗粒大幅扩展。很多新手不懂这点,买了个不带 PSRAM 的 S3,结果发现它跑 LVGL 大屏一样卡到崩溃,白花冤枉钱。
我把核心差异整理成一张表,方便对照:
| 项目 | ESP32-C3 Mini | ESP32-S3 Mini |
|---|---|---|
| 处理器 | 单核 RISC-V 160MHz | 双核 Xtensa LX7 240MHz |
| 片内 SRAM | 约 400KB | 约 512KB |
| 外部 PSRAM | 不支持 | 支持,常见 8MB |
| Flash | 常见 4MB | 常见 8MB |
| USB 能力 | 内置 USB Serial/JTAG,仅 CDC 串口 | 内置 USB-OTG,可做 Host/Device |
| GPIO 数量 | 较少 | 更多,但会被 PSRAM 占用一部分 |
| 典型定位 | 低功耗联网节点 | 屏幕、摄像头、USB 外设、AI 类项目 |
1.2 PSRAM 是什么,为什么买 S3 时必须看它
很多第一次接触 ESP32 的人看到"PSRAM"三个字母就懵。我打个比方:芯片内置的 SRAM 相当于电脑的内存条,S3 只有 512KB,C3 只有 400KB,跑复杂应用时根本不够。PSRAM 是挂在 SPI 总线上的伪静态随机存储器,相当于给系统外扩一条"内存条",让程序可以申请大块缓冲区。
常用的 S3 Mini 会在型号里直接标后缀,以最常见的合宙命名规则为例:
- N8:8MB Flash,不带 PSRAM。
- N8R8:8MB Flash 加 8MB PSRAM,R 后面的 8 就是 PSRAM 容量。
- 个别版本还有 N16R8 之类,原理一样,Flash 更大。
C3 Mini 通常只有 4MB Flash,且没有 PSRAM 选项。所以买 S3 时不看 R 后面的数字,很容易买到一个"没插内存条"的版本。到手后你跑个带界面的小项目直接内存不足,那种体验相当劝退。
1.3 为什么"先看后缀"比"先看芯片"更实际
这里有个很容易被忽略的细节:很多淘宝卖家在标题里只写"ESP32-S3 Mini",不写全后缀。商品页面里可能藏着 N8 和 N8R8 两个选项,默认选项往往是便宜的 N8。你如果不看参数就下单,可能收到一块不带 PSRAM 的板子,而差价通常只有几块钱。
我自己的习惯是:凡是涉及 S3 的采购,先过滤出带"R8"字样的链接,再对比 Flash 容量。同样叫 S3 Mini,N8R8 能干的活,N8 往往干不了;而 N8R8 和 N8 之间的差价,远小于你重新买一块板子的时间和运费成本。所以"先看后缀"比"先看芯片"更贴近实际购买场景。
2. PSRAM 的真正用途:不是跑分,是让你能跑起屏幕和摄像头
2.1 屏幕、摄像头、音频项目为什么离了 PSRAM 就完蛋
很多人以为 PSRAM 只是让参数好看,实际影响非常直接。拿 LVGL 图形界面举例,一块普通的 240x320 TFT 屏幕,全屏刷新一帧需要的缓冲区大约 150KB,而 S3 片内可用 SRAM 通常只剩两三百 KB。一旦你的界面里有图片、字体、动画缓存,再加上网络协议栈和 WiFi 缓冲,没有 PSRAM 的结果就是:要么编译不过,要么编译过了,跑起来疯狂花屏、重启、甚至直接黑屏。
摄像头的需求更硬核。无论是 OV2640 还是 OV7670,采集到的图像数据必须有一个帧缓冲区,常见分辨率下的 YUV 或 JPEG 缓冲轻松超过 100KB 到几百 KB。没有 PSRAM,摄像头项目基本做不成。我见过朋友硬生生用 N8 版本跑摄像头,结果是每隔几秒崩溃一次,最后放弃。
音频也类似。如果你打算用 I2S 播放音频或者做简单的麦克风采集,DMA 缓冲和编解码缓冲区需要几十 KB 到上百 KB。C3 的内部 SRAM 总共 400KB,扣掉系统占用后能留给音频的非常有限。S3 N8R8 的 8MB PSRAM 可以放心分配 1MB 给音频缓冲,效果完全不同。
2.2 纯联网节点:C3 反而更香
如果项目只是温湿度上报、继电器控制、MQTT 数据转发、红外遥控、BLE 网关这类纯物联网节点,情况就反过来了。C3 Mini 的 400KB SRAM 对这类应用绰绰有余,跑 ESPHome、Tasmota、Arduino JSON 都没有压力,而且单核 RISC-V 在低负载下比双核 S3 省电得多。
更关键的是功耗。电池供电的传感器节点,C3 的深度睡眠电流和整体功耗都比 S3 低。如果你做的是一年不换电池的环境监测节点,C3 Mini 是更合理的选择,S3 的性能优势在这种场景下毫无意义,反而会拖累续航。
我的原则是:不给项目加根本用不上的性能。一个只会上传数据的 ESP32-C3 和一个只会上传数据的 ESP32-S3,对用户来说没有区别,但对电池来说区别很大。
2.3 我的选择逻辑:一句话判断法
我做选型时通常会快速问自己几个问题:
- 项目里有没有屏幕?有就选 S3 N8R8。
- 项目里有没有摄像头?有就选 S3 N8R8。
- 项目里有没有音频播放或录音?有就优先 S3 N8R8。
- 项目里有没有 USB 外设需求,比如模拟键盘、读取 U 盘?有就必须选 S3。
- 以上都没有,只是联网、采集传感器、控制继电器?C3 Mini 完全足够。
如果你看完还是犹豫,那就直接买 S3 N8R8。它的价格比 N8 贵不了多少,但能力上限高出一大截,后续想升级功能也不用换板子。当然前提是你不做超低功耗电池项目,否则 C3 更合适。这句话基本能解决九成人的纠结。
3. USB 能力的真正分界线:C3 是串口,S3 是万能外设
3.1 都是 USB-C,硬件能力差了一个量级
这是最容易产生误解的地方。两块板子都有 USB-C 口,插上电脑也都能出现串口、都能烧录,很多人因此觉得"USB 能力一样"。实际完全不是一回事。
ESP32-C3 的 USB 叫做 USB Serial/JTAG,它本质上只是一个串口加调试接口,底层协议固定为 CDC 类。它只能完成两件事:烧录固件、打印日志。你没法让它模拟成键盘,也没法让它变成 U 盘,更不能读取外部 USB 设备。
ESP32-S3 的 USB 叫做 USB-OTG,硬件上支持全速 12Mbps 的 Host 和 Device 双模。它既可以作为设备被电脑识别,也可以作为主机去读取 U 盘、键盘、鼠标等外设。S3 跑 TinyUSB 协议栈后,几乎可以扮演任何常见的 USB 设备角色。
我一直建议新手在购买前先明确一点:C3 的 USB-C 口只是"下载烧录口",S3 的 USB-C 口才是"万能外设口"。这个认知能帮你避开很多后期功能升级的坑。
3.2 S3 的 USB 玩法:键盘、鼠标、手柄、U 盘、MIDI 任你选
S3 支持 TinyUSB 库,代码层面可以灵活配置设备描述符。我最常用的几种玩法:
- HID 键盘/鼠标:让 S3 变成"自动化按键注入器",做演示遥控器、游戏外挂宏、甚至模拟键鼠操作上位机软件。
- MSC U 盘:通过 SPI 挂载 SD 卡或 Flash 芯片,再通过 USB 枚举成一个 U 盘,插电脑就能直接读写文件。
- CDC 串口设备:把 S3 做成一个带 WiFi 的无线串口透传模块,USB 插电脑时天然多出一个虚拟串口。
- MIDI 设备:做音乐控制器,旋钮和按键直接映射成 MIDI 信号。
- USB Host 模式:外接 USB 键盘给输入系统使用,或者读 U 盘自动导入配置文件。
我需要特别说一句:这些玩法里相当一部分是 C3 永远做不到的,因为硬件不支持 OTG。所以如果你的远期目标里有"板子和电脑 USB 交互"这类需求,别犹豫,直接上 S3。
3.3 别把板载 USB 当成高速接口
S3 的 USB 虽然叫 OTG,但它只是 USB 1.1 全速标准,带宽上限 12Mbps。这意味着你不能拿它当高速 U 盘传输大量数据,也不能指望它做专业的 USB 协议抓包分析。真要用 USB 协议分析仪抓包,那得用 Teledyne LeCroy 那类专业工具,S3 板载 USB 做不了这个量级的流量监控。
它适合的是低速交互类应用:键盘按键、鼠标移动、串口日志、MIDI 音符、配置文件读写。把这些场景跑顺就足够了。别把它当成高速通道,否则项目会卡在带宽上,这是很多人玩到一半才发现的问题。
4. 一张可核对的采购单:下单前勾选,收货后实测
4.1 先按项目场景定主控
我直接给场景结论,方便你往下对照:
| 你的项目方向 | 建议型号 | 核心理由 |
|---|---|---|
| 桌面小屏幕、智能日历、LVGL 仪表盘 | ESP32-S3 Mini N8R8 | 8MB PSRAM 才能跑流畅 UI 和图片缓存 |
| 摄像头识别、拍照、图传 | ESP32-S3 Mini N8R8 | 摄像头帧缓冲必须吃大内存 |
| USB 键盘/鼠标模拟、U 盘读写 | ESP32-S3 Mini N8R8 | 只有 S3 有 USB-OTG |
| 音频播放、录音、语音提示 | ESP32-S3 Mini N8R8 | 音频缓冲和编解码需要大块 RAM |
| 温湿度采集、继电器、MQTT 上报 | ESP32-C3 Mini | 够用、省电、便宜 |
| 电池供电的 BLE 网关或传感器节点 | ESP32-C3 Mini | 深度睡眠功耗更低 |
| 学习 Arduino 基础、做小玩具 | ESP32-C3 Mini | 上手简单,烧录方便 |
| 预算允许但不确定未来做什么 | ESP32-S3 Mini N8R8 | 能力上限最高,避免二次采购 |
4.2 配件采购核对清单
板子只是开始,采购单里至少还要勾掉这些配件,否则容易卡在半路:
- USB-C 数据线:注意是数据线,不是充电线。很多 USB-C 线只会充电没有 D+/D-,插上电脑根本没反应。
- 排针和排母:Mini 板通常默认不带排针或可选焊盘版本,买之前看清楚是贴片还是直插焊盘,别到时候没法插面包板。
- 外部供电:如果外设多,板载 LDO 可能发热严重,建议准备一个 5V 转 3.3V 稳压模块或锂电池充电模块。
- 天线版本:有 PCB 天线和 IPEX 外接天线选项,如果需要把板子放在金属外壳里,建议选 IPEX 版本。
- 下载备用工具:C3 和 S3 都支持原生 USB 下载,一般不用额外买 USB 转 TTL,但如果你的电脑识别不了原生 USB,备一根 CH340 的 USB 转 TTL 线能救急。
4.3 收货第一步:验证 PSRAM 是否真实存在
不管商家怎么说,到手后第一件事就是验证 PSRAM。打开 Arduino IDE,在"开发板管理"里装好 ESP32 核心,选择"ESP32S3 Dev Module",然后在"工具"菜单里把"PSRAM"选为"OPI PSRAM",Flash Size 设为 8MB,烧录下面的代码:
void setup() { Serial.begin(115200); delay(1500); Serial.println("\n--- PSRAM Check ---"); if (psramFound()) { Serial.printf("Total PSRAM: %d KB\n", ESP.getPsramSize() / 1024); Serial.printf("Free PSRAM: %d KB\n", ESP.getFreePsram() / 1024); } else { Serial.println("NO PSRAM FOUND"); } } void loop() { }打开串口监视器,波特率选 115200。如果看到 Total PSRAM 约 8192 KB,说明买对版本了。如果显示 NO PSRAM FOUND,先别急着退货,检查一下是不是开发板类型选错,或者 PSRAM 模式选成了 QIO。合宙 N8R8 这类板子的 8MB PSRAM 是 Octal 类型,选成 Quad 模式会检测失败甚至反复重启。确认设置无误还是找不到 PSRAM,那才需要考虑是否发错货。
4.4 数据线和 OTG 线怎么分,别等插上才发现买错
采购单里还需要区分两种线材。普通 USB 数据线是 Type-C 转 USB-A 公头,用来把开发板接电脑或充电头,属于绝大多数人已有的线。OTG 线是 Type-C 公头转 USB-A 母口,用来让支持 OTG 的设备外接 U 盘、键盘等,很多人容易搞混。
S3 Mini 如果启用 USB Host 模式,需要 OTG 线去接 U 盘或键盘。C3 Mini 买了 OTG 线也没用,因为它的 USB 口不具备 Host 功能。订货前可以看接口图形:USB-A 公头是插进电脑的,USB-A 母口是插 U 盘的。这个区别在购买页面上往往不明显,但一旦买错,拆封后测试失败会非常恼火。
5. 开箱烧录最容易翻车的五个现场:从驱动到供电
5.1 驱动全家桶:先搞清板载的到底是哪种 USB 方案
拿到板子插上电脑,设备管理器里不一定立刻出现 COM 口。这里要分两种情况:
如果板子走的是 ESP32 原生 USB,比如 C3 Mini 的 USB Serial/JTAG,Windows 10/11 一般能自动识别为 USB 串行设备,无需额外驱动。但有些精简版系统或老电脑会识别失败,这时候先去装 Espressif 官方 USB 驱动。
如果板子上有独立的 USB 转串口芯片,情况就复杂了。常见的芯片有三类:CH340(VID 通常是 1A86)、CP2102/CP210x(VID 通常是 10C4)、FT231X/FT232R(VID 通常是 0403)。它们对应完全不同的驱动:
| 板载芯片 | 对应驱动 | 设备管理器里的名字 |
|---|---|---|
| CH340 | WCH CH340 驱动 | USB-SERIAL CH340 |
| CP2102 | Silicon Labs CP210x VCP 驱动 | Silicon Labs CP210x USB to UART Bridge |
| FT231X/FT232R | FTDI VCP 驱动 | USB Serial Converter |
| 原生 USB | Espressif USB 驱动或系统自带 | USB Serial Device / ESP32-S3 |
出现"未知 USB 设备(设备描述符请求失败)"时,别急着重装驱动,先按顺序排查:换一根确定带数据功能的线、换一个电脑 USB 口、按住 BOOT 重新插电、最后才是重装驱动。很多"设备描述符请求失败"其实是 USB 线质量太差导致的信号完整性崩坏,换线瞬间就好了,这个坑我踩过不下三次。
5.2 USB 转 TTL 接上不显示串口的完整排查链路
有些场景你需要用外部 USB 转 TTL 线连接板子的 UART 引脚,比如原生 USB 口被占用,或者需要用串口拿到更底层的日志。这时候最常见的现象是:驱动装了、线也连了,但串口监视器里啥都没有。
我总结了一套排查链路,照着走基本能定位问题:
- 先确认转 TTL 模块在设备管理器里生成了 COM 口,没有的话先解决驱动。
- 接线要交叉:板子的 TX 接转 TTL 模块的 RX,板子的 RX 接转 TTL 模块的 TX,别同名胜者对着接。
- GND 必须共地,不共地就是完全没信号。
- 确认供电:如果板子只靠 USB 转 TTL 的 3.3V 供电,电流可能不够,外设一开就复位。尽量用独立 5V 供电。
- 波特率选 115200,部分项目用了更高波特率,乱码时逐个试 74880、230400、460800。
- 观察板子是否在运行:按一下复位键,如果串口有开机日志输出,说明接线正常。
- 如果还是没反应,用另一块好的板子对调测试,排除转 TTL 模块本身损坏。
这套链路我帮人排查过很多次,九成情况是 TX/RX 接反、共地缺失、供电不足三个原因,而不是驱动问题。
5.3 按住 BOOT 才能烧录的机制:为什么新板子总是无法下载
S3 和 C3 的 ROM 引导逻辑里,进入下载模式通常需要让芯片在上电复位时检测到一个特定的 BOOT 引脚状态。实际表现就是:很多板子必须先按住 BOOT 键、再按一下 EN 复位,或者按住 BOOT 再插 USB 线,才能进入可烧录状态。
如果你连接电脑后直接点烧录,经常出现 "Could not open COM port" 或 "A fatal error occurred: Failed to connect to ESP32" 之类的报错。这时别再怀疑驱动了,按住 BOOT 再重新插线或按复位,一般就能解决。烧录完成后,记得按一下复位键进入正常运行模式。
启动日志里出现boot:0x7 (DOWNLOAD_BOOT)表示已进入下载模式,出现boot:0x1 (POWERON_RESET)就是正常上电模式。看到这两行就能快速判断板子处于什么状态。
5.4 PSRAM 占用的 GPIO、ADC2 与供电:配置正确不代表万事大吉
烧录成功、PSRAM 也识别了,不代表后面没有暗坑。第一个暗坑是引脚占用:S3 使能外部 PSRAM 后,一部分 GPIO 会被 PSRAM 接口夺走,不能再用作普通 GPIO。很多 Mini 板的引脚图不会把这个细节标得很明显,如果你发现某个引脚不受控制,赶紧查芯片手册和板厂原理图,大概率就是被 PSRAM 占用了。
第二个暗坑是 ADC2。C3 和 S3 的 ADC2 通路在 WiFi 开启时基本不可用,因为 ADC2 和射频模块共用硬件。如果你要连续采集模拟量,优先用 ADC1 对应的引脚,别在 ADC2 上死磕。WiFi 一开采集值就跳,这是硬件层面的冲突,改软件很难绕过去。
第三个暗坑是供电。S3 双核满频加 PSRAM 运行时电流比 C3 大不少,如果使用面包板供电或者劣质 USB 线,压降会导致随机重启。项目里外设较多时,我习惯在板子的 5V 输入前加一个 470uF 电解电容,实测能有效减少 WiFi 发射瞬时大电流造成的电压跌落。
最后说点我的个人体会
说实话,两种板子我都在实际项目里用过。C3 Mini 很适合做"永远联网、永远低功耗"的小节点,我甚至拿它做过一个丢在阳台的土壤湿度监测器,几个月不充电也没出问题。S3 N8R8 则更适合做"需要和人交互"的设备,桌面屏幕、USB 小键盘、摄像头识别这些项目,它基本是低价位里的最优解。
如果预算只够买一块,我会选 ESP32-S3 Mini N8R8,因为它的扩展空间大太多。如果手头已经有一个 C3 Mini,也别觉得亏,跑跑传感器、蓝牙网关、简单自动化,它反而比 S3 舒服。买开发板这件事,最怕的不是买贵,是买回来后发现能力边界卡死了项目方向。先想清楚你要把板子用在什么场景,再对照那张采购单打勾,基本就能一次买对。