ESP32-S3 Mini 和 C3 Mini 这两块板子,只要你在淘宝搜过“ESP32开发板”,大概率都见过。它们长得几乎一模一样,都是黑色小板子、板载天线、Type-C接口,价格也咬得很紧。但等你真正把板子插到电脑上,开始跑项目的时候,才会发现这俩东西的内核完全是两个物种:S3能用 PSRAM 跑 LVGL、接摄像头、做 USB 摄像头甚至模拟键鼠;C3 就只能老老实实做轻量级物联网节点。这篇就是写给正在纠结“买哪个”的人,从 PSRAM、原生 USB 到采购核对,把该说的都说清楚。
我最早接触这块板型是买了块 C3 Mini,当时看中的是 RISC-V 架构和低功耗,结果后来想在上面跑个小屏幕 UI,内存直接爆了,换了 S3 Mini 才缓过来。这一篇没有玄学,全是实际对比和经验,适合准备入门、或者已经在选型但拿不准的开发者。
1. 两块板子的核心差异:长得像,不代表内核像
1.1 芯片规格对比:S3 是全能选手,C3 是省电标兵
ESP32-S3 和 ESP32-C3 虽然都出自乐鑫,也是目前市面上最常见的 Mini 板核心,但它们的定位差得很远。S3 用的是双核 Xtensa LX7 处理器,主频最高 240MHz,支持 WiFi 802.11 b/g/n 和 Bluetooth 5(LE);C3 是单核 RISC-V 处理器,主频 160MHz,同样支持 WiFi 和 BLE。光看主频可能觉得“S3 就快一点”,但真正拉开差距的是下面这三点。
第一是 PSRAM,S3 芯片内部有可选的 PSRAM 封装版本,比如 ESP32-S3R8 型号自带 8MB 八线 PSRAM,而绝大多数 C3 型号根本没有 PSRAM 这个概念,只有芯片内部有限的 SRAM。第二是 USB 能力,S3 带原生 USB-OTG,可以当 USB 主机或者外设使用,C3 只有 USB-Serial-JTAG,本质是一个串口调试接口,无法模拟 U 盘、键鼠这类标准 USB 设备。第三是 GPIO 数量,S3 的可用 GPIO 在 40 个以上,C3 的可用 GPIO 只有二十来个,做矩阵键盘、多路传感器采集的时候,这个差距会很直接地变成布线复杂度。
我把两者的核心参数整理成了下面这张表,方便你直接对照:
| 对比项 | ESP32-S3 | ESP32-C3 |
|---|---|---|
| 处理器架构 | 双核 Xtensa LX7 | 单核 RISC-V |
| 主频 | 最高 240MHz | 最高 160MHz |
| SRAM | 512KB | 400KB |
| PSRAM 支持 | 支持,可选 2/8MB 等 | 不支持 |
| 原生 USB | USB-OTG(支持 Host/Device) | USB-Serial-JTAG(仅调试串口) |
| GPIO 数量 | 40+ | 22 左右 |
| 典型功耗 | 较高(性能向) | 较低(适合电池供电) |
| 常见板载 Flash | 4/8/16MB | 4MB |
这里要注意,很多 Mini 板上丝印只写了“ESP32-S3”或者“ESP32-C3”,并没有把 PSRAM 容量的标识印出来,而实际芯片型号可能带 R8 后缀,也可能不带。你买到手的“ESP32-S3 Mini”未必带 PSRAM,这会直接影响你后续能不能跑大型程序。
1.2 PSRAM 到底影响什么:跑 UI、摄像头、音频都离不开它
PSRAM 的全称是 Pseudo SRAM,也就是伪静态随机存储器,它的读写速度比芯片内部 SRAM 慢一些,但容量大得多。S3 Mini 如果带 8MB PSRAM,意味着你除了拥有 512KB 内部 SRAM 之外,还能额外使用 8MB 的内存空间来存放帧缓冲、UI 对象、音频数据等。
一个最直观的例子是 LVGL。如果你要在 240x240 或者 320x240 的 ST7789/ILI9341 屏幕上做一个稍微像样的界面,帧缓冲用 16 位色深,一帧就要 320x240x2 = 153600 字节,也就是 150KB。在 C3 的 400KB SRAM 里,你不仅要放帧缓冲,还要放 LVGL 的显示对象、字体、图片解码缓存,跑起来会非常吃力,掉帧是常事,甚至直接重启。而在 S3 带 PSRAM 的版本上,你可以把 LVGL 的 draw buffer 和显示对象分配到 PSRAM 里,内部 SRAM 只跑 RTOS 任务和通信协议,整个 UI 流畅度完全不一样。
摄像头场景更依赖 PSRAM。ESP32-S3 接 OV2640 或者 OV3660 摄像头,拍一张 JPEG 照片,在 800x600 分辨率下,一张图就要几百 KB 的缓冲空间。没有 PSRAM,你只能把分辨率砍到很低,或者利用帧缓冲复用技巧去做很吃力的流处理;有 PSRAM 之后,直接可以开两个帧缓冲做双缓冲流水线,拍照和编码互不阻塞。
另外,如果你打算在板子上跑一些轻量级语音识别、TinyML 模型或者播放 MP3/AAC 音频,PSRAM 也会大大缓解内存压力。神经网络模型权重和中间激活值动辄几百 KB,靠内部 SRAM 根本塞不下。所以结论很简单:只要你不是只做简单的温湿度上报、继电器控制、BLE 透传这类纯轻量任务,S3 带 PSRAM 的版本基本是稳妥选择。
2. 怎么选:三个问题帮你做决定
2.1 你打算做带屏幕、摄像头或者音频的交互设备吗
这是最核心的判断标准。项目里只要出现“屏幕界面”“摄像头拍照/图传”“语音播放”“Web 页面带图表实时刷新”这几个关键词,直接往 S3 方向走。原因就是前面说的内存问题,UI 和多媒体处理对内存的消耗是线性增长的,C3 的 400KB SRAM 只适合跑“裸机逻辑 + 简单协议”。
我个人的建议是:如果预算差不到十块钱,直接选 S3 带 8MB PSRAM 的版本,因为当你真的需要 PSRAM 的时候,你是没法通过软件“优化”出来的。很多新人在选型阶段觉得“先买个便宜的试试”,结果跑了一个带屏幕的例程就开始买第二块板子,一来一回反而是浪费。
2.2 你需要 USB 主机或模拟键鼠这类功能吗
这个点太多人会忽略。S3 的原生 USB-OTG 意味着它可以作为 USB 外设(比如模拟成键盘、鼠标、游戏手柄)或者 USB 主机(比如连接 U 盘、USB 键盘、USB 转串口模块),这在实际项目中非常有用。举个例子,你想做一个“USB 蓝牙接收器”,接收手机蓝牙信号然后模拟成键鼠输出到电脑,这必须是 S3 才能做,C3 的 USB 口只是用来烧录调试的,不能枚举成标准 HID 设备。
C3 的 USB-Serial-JTAG 接口,说白了就是把串口烧录和 JTAG 调试合并到一个 USB 口上,插上电脑就直接出现一个 COM 口,不需要额外 USB 转串口芯片。这确实方便,但能力边界很清楚:它只能帮你烧录、看日志、做调试,不能当 USB 设备用。
所以做交互外设、USB 桥接、开源键盘鼠标这类项目,选 S3。做分布式传感器节点、智能家居控制、电池供电的遥测模块,C3 Mini 反而更合适。
2.3 功耗、尺寸和成本敏感吗
C3 Mini 虽然性能弱一点,但它有一个很大的优势:功耗低。在深度睡眠模式下,C3 的电流可以降到 5μA 以下,这在电池供电的项目里是很有吸引力的。S3 的深度睡眠电流虽然也在同一个量级,但它在运行时的高主频双核会带来更高的功耗,如果你用 CR2032 纽扣电池或者小容量锂电池供电,C3 明显更耐用。
C3 Mini 的尺寸通常更紧凑,部分版本的板宽会比 S3 Mini 更窄,适合做埋入式传感器节点。价格上,C3 Mini 普遍比 S3 Mini(带 PSRAM)便宜 10-15 元左右,如果你的应用完全用不上 S3 的增强特性,没必要为用不到的功能买单。
3. 一张可核对的采购单:买之前逐项过一遍
3.1 选型核对表:S3 Mini 与 C3 Mini 的购买确认项
我自己买板子踩过不少坑,尤其是淘宝详情页上经常用一张通用渲染图,标题写 S3,图片却是 C3,或者反过来。所以我现在采购前都会拿这张表去逐项核对,宁可多问客服一句,也不要等快递到了才发现买错。
建议你把以下问题整理成聊天内容直接发给卖家:
| 核对项 | S3 Mini 应确认 | C3 Mini 应确认 |
|---|---|---|
| 主控型号 | ESP32-S3,是否带 R8 后缀(即是否带 8MB PSRAM) | ESP32-C3 |
| Flash 容量 | 4MB/8MB/16MB,按项目需求 | 通常 4MB |
| USB 接口 | Type-C | Type-C |
| 板载 USB 转串口芯片 | 有些版本无独立芯片(靠原生 USB),有些带 CH340/CP2102 | 无独立芯片,使用 USB-Serial-JTAG |
| GPIO 引出 | 部分引脚已接板载器件,确认剩余可用引脚 | 同上 |
| 板载天线 | PCB 天线,注意外壳是否为金属/是否遮挡天线区域 | 同上 |
| ECO 版本 | 部分 S3 芯片有 ECO V3 版本,官方文档建议优先 | 无特殊 |
丝印方面,S3 带 PSRAM 的版本,芯片上会印出类似“ESP32-S3R8”的字样,如果你买到的是“ESP32-S3”六个字符,就说明没有 PSRAM。注意有些丐版 S3 Mini 用的就是无 PSRAM 版本,价格低但性能缩水,你要分清楚自己要的是什么。
3.2 版本区分与避坑:为什么外观一样的板子价格差不少
S3 Mini 在淘宝上的价格从十几块到三十几块都有,外观看起来几乎一样,但差异主要在这几处。
第一,PSRAM 有无和大小。带 8MB PSRAM 的版本芯片型号是 ESP32-S3R8,带 2MB 的是 R2,无后缀的是无 PSRAM。部分卖家会把“R8”印在 PCB 背面或者芯片丝印里,你要打开详情页仔细看有没有写“8MB PSRAM”。第二,Flash 容量。同样是 S3 Mini,有的板载 4MB Flash,有的是 8MB、16MB。做 OTA 升级、放 Web 服务器静态资源、存较大字体库的时候,4MB 往往会不够用,建议选 8MB 以上。第三,板载 USB 转串口芯片。有些 S3 Mini 为了省成本,砍掉了独立的 USB 转串口芯片,完全依赖 S3 的原生 USB-OTG 来做烧录。这种情况下,你在 Windows 上可能会遇到“设备无法识别”的问题,因为需要装特定驱动,而带 CH340/CP2102 的版本插上就能识别。
C3 Mini 相比 S3 Mini 版本差异少一些,主要是 Flash 容量和是否引出足够 GPIO。注意部分 C3 Mini 的 GPIO8 被板载 LED 占用,GPIO9 被 Boot 按键占用,如果这些引脚你要复用,需要掂量一下。
4. 配套工具链和 USB 相关实战:从串口驱动到 AT 固件下载
4.1 USB 转串口驱动:FT231X/FT232R 不识别怎么办
很多人在 Windows 上插上板子,设备管理器里只有一个带感叹号的未知设备,这时候九成是 USB 转串口芯片驱动的问题。S3 Mini 板载的常见转串口芯片是 CH340、CP2102,少数用 FTDI 的 FT231X/FT232R。FT231X 是 FTDI 的 USB UART 芯片,在 Windows 下如果装了错误的驱动或者用系统自带的驱动,经常会出现“USB Serial Converter”识别异常。
解决办法很直接:去 WCH 官网下载 CH340 驱动(如果芯片是 CH340),去 Silicon Labs 官网下载 CP210x 驱动,如果是 FTDI 芯片就去 FTDI 官网下载对应 VCP 驱动。装完之后拔掉 USB 重新插入,观察设备管理器里边是否出现了 COM 口。如果仍然显示未知设备,尝试换一个 USB 口(优先用主机背面的 USB 口,不要用扩展坞)或者换一根数据线。这里多说一句:你现在用的 USB 线必须是数据线,不能是充电线。很多杂牌 Type-C 线只走电源不走数据,插上之后板子能亮灯,但设备管理器里什么都不会出现。我手里有四五根“只能充电不能传数据”的线,全是从各种小电器盒子里翻出来的。
如果你用的是 Linux 或者 macOS,通常不需要额外装驱动。Linux 下插上就能看到 /dev/ttyUSB0 或 /dev/ttyACM0,macOS 下会出现 /dev/cu.usbserial-xxx。如果 Linux 下没有设备节点,多半是权限问题,把你的用户加入 dialout 组即可。
4.2 普通 Type-C 数据线和 OTG 线的区别:什么时候用哪根
很多新手会把“Type-C 数据线”和“OTG 线”混为一谈,实际上它们接口形态和用途完全不同。
普通 Type-C 数据线,一端是 Type-C 公头(插开发板),另一端通常是 Type-C 公头或者 Type-A 公头(插电脑),它的作用是供电和数据通信,板子作为“设备”连接到电脑。
OTG 线(Type-C 转 USB 母口)则不一样:Type-C 公头插开发板,另一端是一个 USB-A 母座,用来插 U 盘、USB 键盘、USB 无线鼠标接收器等外设。这根线让板子变成“主机”。S3 Mini 使用 OTG 线可以读取 U 盘里的文件,接 USB 键盘做输入设备,甚至接 USB 转以太网适配器。而 C3 Mini 因为 USB 控制器不支持 Host 模式,插上 OTG 线也起不了作用,这是硬件层面的限制。
从电气信号上看,普通数据线的 D+/D- 直通,OTG 线同样直通,关键区别在于谁作为主机。USB 协议里,主机通过检测设备端的上拉电阻来识别设备插入,而 OTG 线本身不提供 VBUS 方向切换,是否进入主机模式取决于芯片的 USB 控制器配置。S3 的 USB-OTG 外设可以在软件里配置成 Host 模式,此时由 S3 向外设供电,所以要注意供电能力:直接推一个 USB 移动硬盘大概率供电不足,建议使用带独立供电的 USB Hub。
4.3 Arduino 开发板包下载与 AT 固件烧录:C3 和 S3 的常见坑位
在 Arduino IDE 里使用这两块板子,需要在“开发板管理器”里安装 esp32 开发板包。打开 Arduino IDE,进入“文件 -> 首选项 -> 附加开发板管理器网址”,填上乐鑫官方的 JSON 地址,然后到开发板管理器里搜索“esp32”,安装 Espressif 官方包即可。这里不建议下载来路不明的第三方面板包,版本混乱会导致你编译出来的程序出现各种诡异行为。
选择开发板型号时,S3 选择“ESP32S3 Dev Module”,C3 选择“ESP32C3 Dev Module”。注意如果你是 S3 靠原生 USB 烧录,Arduino 里要开启“USB CDC On Boot”选项,否则上电后 USB 口不会枚举成串口,你连日志都看不到。C3 则默认使用 USB-Serial-JTAG,不需要额外开这个选项,选好板型插上就能识别。
AT 固件下载是另一个常见需求。ESP32-C3 的 AT 固件可以从乐鑫官网下载,烧录时既可以用串口烧录工具 esptool,也可以用乐鑫的 Flash Download Tools。AT 固件包里有多个 bin 文件,需要分别指定下载地址。这里最容易踩的坑是硬件接线:C3 下载 AT 固件一般使用 UART0(GPIO20/21)接外部 USB 转 TTL,同时要把 GPIO9(BOOT 引脚)拉低再上电,让芯片进入下载模式。如果你的板子直接用 USB 口连电脑,esptool 也能通过 USB-Serial-JTAG 接口下载,但部分 AT 固件版本可能需要特定的波特率,如果连接不稳定,优先检查 GPIO9 是否处于低电平。
我之前帮朋友刷 C3 AT 固件,用 esptool.py 总是提示“A fatal error occurred: Failed to connect to ESP32-C3: No serial data received.”,排查半天,最后发现是外部 TTL 模块的 TX/RX 接反了。USB 转 TTL 和板子之间要交叉连接,也就是 TTL 模块的 TXD 接板子的 RXD,RXD 接板子的 TXD,还要共地,这个细节每次都要提醒自己。
5. 常见问题与排查技巧实录
5.1 疑难杂症速查表
结合我和很多开发者在社区里遇到的高频问题,做了一张速查表,建议收藏备用。
| 问题现象 | 可能原因 | 排查方向与解决 |
|---|---|---|
| 插上板子设备管理器无任何反应 | USB 线是充电线 / USB 口损坏 | 换一根数据线;换电脑后置 USB 口;观察板载 LED 是否点亮 |
| 设备管理器出现未知设备 | USB 转串口芯片驱动未安装 | 确认芯片型号(CH340/CP2102/FT231X),安装对应官方驱动 |
| Arduino 上传卡在“Connecting…” | 板子没有进入下载模式 | C3 按住 BOOT(GPIO9),点上传,出现“Connecting”后松开;S3 确认 USB CDC On Boot 已开启 |
| esptool 报“Failed to connect” | TX/RX 接反 / 未共地 / 波特率不对 | 交叉连接 TX/RX,GND 共地;降低波特率到 115200 试 |
| 下载完成后程序无法运行 | Flash 下载地址错误 / 上电时序问题 | 检查烧录地址是否与固件要求一致;按一次板载 RST 按键 |
| 运行 LVGL 时反复重启 | 内存不足 / PSRAM 未启用 | 检查编译选项是否开启 PSRAM(Arduino 里选 OPI PSRAM);减小 draw buffer |
判断板子是否支持 PSRAM 还有一个很硬核的方法:用 esptool.py 读取芯片信息。在命令行执行python -m esptool chip_id -p COM3,如果返回的芯片型号是ESP32-S3R8,说明带 8MB PSRAM。也可以执行python -m esptool flash_id -p COM3读取 Flash 容量。这个方法能让你一眼识别买到的是不是“注水版”。
5.2 我自己的几个踩坑心得
先说 USB 供电的问题。S3 Mini 的峰值电流在 WiFi 发射的时候可能超过 500mA,如果你用电脑前置 USB 口或者劣质 USB Hub 供电,很容易出现“烧录成功但一连接 WiFi 就重启”的怪问题。遇到这种情况,别急着怀疑代码,先换一个供电能力足够的 USB 口,或者用外部 5V 电源给板子的 5V 引脚供电。C3 的功耗低一些,对供电没这么敏感,但长期跑项目,我依然建议用质量可靠的电源。
其次是 S3 和 C3 板型看起来一样,引脚却不完全兼容。虽然都是 2.54mm 排针引出,但 S3 的引脚编号和 C3 的引脚编号完全不同,如果你拿着 C3 的接线图直接给 S3 用,大概率会把 GPIO 搞混。我在桌面便签上常年贴着两块板的引脚对照图,接线前先核对一遍型号,别脑子一热直接插线。
最后想提一下芯片版本。S3 的某些早期版本在 USB-Serial-JTAG 或者某些外设上有 errata,乐鑫官方文档里有 ECO 版本说明。买板子的时候如果看到“ECO V3”的字样,通常更新更稳,尽量别买特别老库存的板子。C3 芯片相对稳定,暂时没遇到版本坑,但同样建议在靠谱店铺购买,避免买到拆机芯片。
说实话,S3 Mini 和 C3 Mini 这两块板子没有绝对的“谁更好”,只有“哪个更适合你现在这个项目”。如果你只是想快速跑一个 MQTT 温湿度上报,C3 Mini 已经绰绰有余,而且功耗更友好。如果你想做点带屏幕、带摄像头、带 USB 交互的玩具外设,S3 Mini 带 PSRAM 的版本能让你少走很多弯路。
最后再分享一个小习惯:拿到板子的第一时间,先用 esptool 读取芯片型号和 Flash 容量,确认和你下单时描述一致,再开始开发。这个动作只需要一分钟,却能避免你在项目中期才发现板子配置不够的尴尬。开发板选型从来不是参数越高越好,而是够用、够稳、够匹配你的场景。希望这篇采购单能帮你少踩几个坑。