
ESP32-S3 Mini 和 C3 Mini 这两块板子是我被问到最多的入门级 WiFi 开发板之一而绕不开的两个关键词就是 PSRAM 和 USB。很多人看它们长得差不多——都是小尺寸、Type-C 口、双排排针、价格咬得很紧——于是把 C3 当成 S3 的低配版直接下单等做到一半才反应过来USB 口只能当串口用内存几百 KB 跑不动 GUI退货的快递费都够再买一块。这篇文章就干三件事讲清 S3 和 C3 在 PSRAM、USB 上的真正差异给一套把需求翻译成选型的判断方法最后附一张下单前可以逐项核对、到手后可以逐步验证的采购单。1. 先搞清楚一件事S3 和 C3 不是一个系列的高配低配1.1 芯片底子一个 RISC-V 新秀一个 Xtensa 正统续作先说结论ESP32-C3 不是 ESP32-S3 的“青春版”它俩的关系更像是“两条产品线的交叉点”。C3 用的是乐鑫第一代 RISC-V 单核处理器主频 160 MHz设计目标非常明确——用低成本、低功耗的方案去替代老的 ESP8266 和一部分 ESP32 基础场景。它支持 WiFi 和 BLE 5.0内置约 400KB SRAM常见模组自带 4MB Flash作为传感器节点、遥控器、智能开关这类“轻量级联网设备”的 SoC 非常合适。S3 则是 ESP32 家族的正统续作用的是 Xtensa LX7 双核主频最高 240 MHz内置 512KB SRAM并且带了一组 SIMD 向量指令官方的解释是用于 DSP 和 AI 加速。这个差异直接决定了它能做 C3 做不了的事跑比较大的本地推理、跑复杂的 GUI 动画、同时处理 WiFi 和 USB 而不互相拖累。注意S3 还内置了原生 USB-OTG 控制器而 C3 只有 USB-Serial-JTAG 控制器这两个东西名字都带 USB实际能力差了一个量级。我见过太多人只盯着“都是 Mini 板”“都是 Type-C 口”就下手结果拿到手刷固件才发现内核架构完全不同连编译工具链都不一样。所以第一件事就是纠正认知C3 和 S3 是定位不同的芯片不是同一块板子的“高性能版”。1.2 一张表把核心差异摆平核对项ESP32-C3 MiniESP32-S3 MiniCPU 核心RISC-V 单核Xtensa LX7 双核最高主频160 MHz240 MHz内置 SRAM约 400KB约 512KB外挂 PSRAM不支持支持2MB 到 16MB原生 USB-OTG无有FS 12MbpsUSB-Serial/JTAG有有Flash 常见配置4MB部分模组内置4MB / 8MB / 16MB典型定位低功耗传感器、遥控、开关GUI、摄像头、USB 外设、复杂应用这张表里最值得划重点的是“外挂 PSRAM”和“原生 USB-OTG”这两行。C3 的硬件设计里根本没有 PSRAM 控制器也没有对应的外部引脚所以网上有人说“C3 可以自己焊 PSRAM”那是错的物理上就不支持。S3 则把 PSRAM 和 USB 都做成了可选能力——同一个 S3 芯片模组厂商可以选择带不带 PSRAM、带多大 PSRAM这也导致市面上 S3 板子的规格非常杂乱采购时必须逐项确认。1.3 “Mini”命名的陷阱同名不同命“Mini”这个词在两家板子上更像一个尺寸风格标签不代表同一系列。C3 Mini 和 S3 Mini 的 PCB 尺寸、排针间距、引脚引出方式、甚至 Type-C 口的内部接线都可能不一样。我就遇到过有人照着 C3 Mini 的引脚图去接 S3 Mini 的外部设备结果把 I2C 引脚接错折腾了一晚上。更重要的是两家厂商的 Mini 板可能引脚兼容但芯片的外设映射不同。C3 的 UART0、I2C、SPI 默认引脚和 S3 不是一一对应的直接套用教程里的begin()代码很可能跑不通。所以不管是买 C3 还是 S3我都建议你把板子的原理图 PDF 下载下来存到本地而不要只收藏一个淘宝链接。到手后先用它核对排针丝印再开始接线这是最省时间的做法。2. PSRAMS3 的内存杠杆C3 的硬伤2.1 PSRAM 到底解决什么问题用一个生活类比SRAM 是手边的工作台PSRAM 是书柜。工作台就这么大你同时只能摊开几份文件PSRAM 是把书柜挪到旁边随时可以把更多文件搬上桌虽然从柜子里拿文件比工作台上直接拿慢一点但总比没得放强。ESP32 这类芯片的 SRAM 非常有限C3 约 400KBS3 约 512KB听起来不小但一张 240×240 的 RGB565 图片就要 115KB 左右跑个带图片解码的 LVGL 界面内存立刻见底。PSRAM 就是用来解决这种“临时空间不够”的问题的。它挂在 SPI 总线上速度比内置 SRAM 慢但容量可以做到 2MB、8MB、16MB。S3 芯片自带 PSRAM 控制器所以模组厂商可以在封装里集成一颗 PSRAM 颗粒片上应用就能拿到 MB 级的内存空间。C3 没有这个控制器也没有 PSRAM 引脚直接锁死了这条路。所以如果你的项目涉及以下任何一种情况PSRAM 几乎是刚需跑 Micropython 的大型应用、LVGL GUI PNG/JPEG 解码、摄像头采集和帧缓冲、Web 服务器缓存大页面、音频播放缓冲。没有 PSRAM 的 S3 在这些场景下和 C3 一样难受。2.2 S3 的 PSRAM 不止看容量Quad 和 Octal 是两回事很多人买 S3 只问一句“PSRAM 是几 MB”这是不够的。S3 支持两种 PSRAM 接口Quad SPIQSPI和 Octal SPIOPI。通俗说QSPI 用 4 根数据线OPI 用 8 根数据线同一时钟下 OPI 的吞吐量接近 QSPI 的两倍。再配合更高的时钟频率和双沿采样OPI PSRAM 在高帧率 GUI、摄像头预览这类持续大量读写的场景下会明显更稳。举个实际例子我在一块 2MB QSPI PSRAM 的 S3 板子上试过跑 LVGL 动效列表滑动手感能接受但切屏时有可见卡顿换到 8MB OPI PSRAM 的板子后同样代码切屏就顺了很多。这说明容量只是“装不装得下”的问题接口速度是“跑不跑得动”的问题。商品页面如果只写“8MB PSRAM”而不写 Quad 还是 Octal你可以直接问客服或者在规格书里搜 PS RAM 接口部分。另外注意单位换算。很多模组规格书写的是“64Mbit PSRAM”除以 8 才是 8MB。如果看到“8Mbit”别高兴太早那是 1MB。这个 Mbit 和 MByte 的坑在 Flash 和 PSRAM 的标注里都非常常见。2.3 什么项目必须上 S3 带 PSRAM 的版本我按常见玩法分了三类第一类桌面小屏幕设备。比如做个天气时钟、桌面宠物、带触控的播放器控制面板。这类项目跑 LVGL 或类似 UI 框架再加上几张图片资源内存占用很容易超过 1MB没有 PSRAM 的 S3 会很吃力。建议直接选 8MB OPI PSRAM 的版本一步到位。第二类摄像头相关。S3 支持摄像头接口但一张 VGA 照片的 JPEG 编码缓冲就要几百 KB如果要同时显示到屏幕帧缓冲更大。C3 完全没有这条路线S3 无 PSRAM 版本也会捉襟见肘。想做离线拍照、画面识别这类小项目带 OPI PSRAM 的 S3 是起步配置。第三类Micropython 重度用户。Micropython 本身有解释器开销再挂上网络库、GUI 库后几百 KB 的内存会很紧张。S3PSRAM 可以在 Micropython 里跑到几 MB 的可用堆内存写代码时心态完全不一样不用处处省着用。反过来如果只是做温湿度上报、开关控制、红外遥控、低功耗门磁这类“采集上报”型项目C3 Mini 绰绰有余。C3 的深度睡眠功耗更低代码简单成本也更低没必要为用不上的 PSRAM 和双核买单。2.4 C3 用户的内存焦虑老实说基本无解C3 没有 PSRAM 控制器这是硬件层面的结论软件优化只能缓解不能根治。如果你已经在 C3 上遇到malloc失败、跑一段时间重启、编译后 Flash 塞不下固件这些问题常规操作是用 ESP-IDF 而不是 Arduino因为 C 代码更省内存把大缓冲改成静态全局变量而不是动态分配砍掉不必要的库。但这些操作只能把 400KB 的内存用到极致救不了内存饥饿型应用。我的建议很简单如果项目还没开始直接选 S3 带 PSRAM 的版本如果项目已经做到一半也别在 C3 上继续耗换板子的成本大概率比重构代码低。这不是说 C3 差而是工具要匹配任务。3. USBC3 的“USB”和 S3 的“USB”差了整整一个量级3.1 C3 的 USB 到底是啥C3 芯片内置了一个 USB-Serial-JTAG 控制器它的作用是让板子插上电脑后直接枚举成一个虚拟串口COM 口顺便提供 JTAG 调试通道。对用户来说最大的好处是不需要额外买 USB 转 TTL 模块一根 Type-C 数据线就能烧录和看日志非常方便。这也是它的全部能力。注意C3 的 USB 不能被配置成 U 盘、键盘、鼠标、游戏手柄也不能作为 USB 主机去接外部设备。它本质上是一个内置的 USB 转串口桥和板上焊一颗 CH340、CP2102、FT231X 的作用差不多区别只是集成到了芯片里。所以那些玩 U 盘模拟、HID 键鼠的教程第一步就要先确认芯片支不支持C3 可以直接跳过。3.2 S3 的 USB 能做哪些事S3 内置的是原生 USB-OTG 控制器支持全速 12Mbps。这意味着它可以作为 USB 设备Device也可以作为 USB 主机Host工作。Device 侧常见的类包括CDC 虚拟串口、MSC 大容量存储也就是被电脑当成 U 盘、HID 人机交互设备键盘、鼠标、游戏手柄、DFU 固件升级以及把这些类组合起来的复合设备。Host 侧则可以接 USB 键盘、USB 鼠标、U 盘、USB 转串口线等外设。更关键的是S3 还有一个独立的 USB-Serial-JTAG 控制器所以 S3 板子上的那个 Type-C 口在固件层面可以选择把它连接到哪个控制器。默认情况下很多 S3 开发板插上去就是 COM 口因为固件用的是 USB-Serial-JTAG如果你想玩 TinyUSB需要把 USB 外设配置到 OTG 控制器上。很多新人插上 S3 后发现“怎么还是只有串口”就是这个原因不是坏了。3.3 实操示例用 ESP32-S3 做一个 USB 键盘如果你买了 S3 想验证 USB 能力最直观的玩法是做一个 HID 键盘。需要准备一块引出 GPIO19/GPIO20 的 S3 板子这两个引脚是 OTG 的 D-/D在 ESP-IDF 里启用 TinyUSB 组件然后初始化 HID 设备调用tinyusb_hid_keyboard_report发送按键报告电脑上就能收到按键。这个过程有两个关键点。第一D/D- 引脚是固定的不能像 I2C 那样随便改买板子时就要确认 Type-C 口的 D/D- 是否连到了 GPIO19/20,并且没有占用其它功能。第二TinyUSB 的运行会影响 USB-Serial-JTAG 的默认串口行为调试日志可能会换到另一个通道需要重新配置终端工具。我建议第一次做实验时保留一个外接 UART 调试口比如用 USB 转 TTL 接 GPIO43/44避免日志和数据通道路冲突时两眼一抹黑。还有一个顺手能玩的是 DFU。S3 的 ROM 引导程序支持 USB DFU 模式按住 BOOT 键插入 USB电脑上会出现一个 DFU 设备用支持 DFU 的烧录工具可以直接下载固件完全不需要额外的串口芯片。C3 没有这个功能它的 USB 口永远只能当串口。3.4 那些和 USB 相关的热词哪些和这两块板子有关最近总看到一堆 USB 关键词我帮你过滤一下哪些和 S3/C3 真有关usb 转串口C3/S3 内置的 USB-Serial-JTAG 正在省掉外部芯片但在 S3 上玩 TinyUSB 后可能不够用所以外接 USB 转 TTL 仍是调试备用方案。usb 抓包 / usb 协议想深入看 S3 枚举成什么设备、描述符对不对Windows 下可以用 Wireshark USBPcapLinux 下直接lsusb -v。C3 基本用不上。usb dfu / usb msc / usb gadget tool这几个都是 S3 的原生 USB OTG 才能碰的功能C3 做不到。普通 USB 数据线和 OTG 线区别S3 做主机接 U 盘/键盘时需要 OTG 转接头或 USB-A 母座扩展板C3 没有 Host 能力不用考虑。设备描述符请求失败插上 S3 后 Windows 报“未知 USB 设备”大多数时候是线材只充电不传数据或者固件把 USB 引脚配置成了 GPIO 导致没有正常枚举。4. 选型决策把需求套进去4.1 三种典型用户画像我把常见的咨询场景归纳成三类你可以对号入座。第一类是传感器/低功耗玩家。需求是做个电池供电的温湿度计、门磁、遥控器、智能开关几天甚至几个月不充电。这类项目最关键的是深海睡眠功耗、启动速度和价格C3 Mini 几乎完美匹配。它的 RISC-V 单核虽然性能一般但跑个 MQTT/HTTP 上报绰绰有余。选 C3 不是妥协是合理匹配。第二类是 GUI/摄像头玩家。需求是做个带屏幕的桌面摆件、摄像头拍照器、或者跑 Micropython 做原型验证。这类项目内存消耗大对双核性能也有要求直接选 S3 8MB OPI PSRAM 的版本别省那十几块钱。我用无 PSRAM 的 S3 跑过 LVGL 做了个天气时钟加载三张天气图标后内存告急页面切换明显掉帧后来换到 8MB PSRAM 版本才流畅。第三类是 USB 外设玩家。需求是模拟键盘鼠标、做 U 盘、DIY 游戏手柄、读外部 USB 设备。这只有 S3 能胜任而且一定要确认板子引出 GPIO19/20 并且 Type-C 口数据线连接正常。顺便说一句如果你打算做 USB Host 读 U 盘最好买带 USB-A 母座或者有 OTG 转接方案配套的板子省得自己飞线。4.2 一个快速决策表需求信号推荐选择只要 WiFi/BLE 低功耗 便宜C3 Mini跑 Micropython 但内存不够用S3 PSRAM要跑 LVGL / 图片解码 / 摄像头S3 OPI PSRAM要模拟 U 盘 / 键鼠 / 做 USB HostS3确认 GPIO19/20 引出纯替代 ESP8266 的老项目C3 Mini想学习双核多任务 / 向量指令 / DSPS3我特别建议把“要不要 PSRAM”和“要不要原生 USB”作为两个独立的判断题而不是只看芯片名字。S3 有大量无 PSRAM 版本也有大量带 PSRAM 版本它们虽然都叫 S3实际体验差很多。买之前把需求翻译成“我需要大内存吗”“我需要 USB OTG 吗”这两个问题基本就不会买错。4.3 容易踩的几个认知坑坑一认为 C3 是 S3 的低配版本。这两个芯片定位不同C3 在某些低功耗场景反而比 S3 更合适不能简单用高低配来理解。坑二认为 S3 带 USB 就能自动变成 U 盘/键盘。S3 的 USB 能力需要固件配合默认插上电脑很多时候还是串口需要手动启用 TinyUSB 并写相应代码。坑三认为 S3 板子上标注“8MB 内存”是指 SRAM。这个 8MB 多半是 PSRAM 或 Flash而不是当成内存用的 SRAM。看到“内存大”先问清楚是什么存储介质。坑四认为买到 S3 后可以自己焊 PSRAM 升级。S3 芯片本身支持但模组内部是否预留了 PSRAM 引脚、PCB 是否布线都不是你自己能决定的况且没 PSRAM 的板子很可能连 PSRAM 焊盘都没画。下单前选对配置是最好的升级。5. 下单前必看一张可核对的采购单5.1 采购单表格下面这张表我每次买板子都会自己过一遍虽然啰嗦但很管用核对项C3 Mini 检查点S3 Mini 检查点模组丝印ESP32-C3-MINI-1 或类似ESP32-S3-MINI-1 / WROOM-1芯片丝印ESP32-C3ESP32-S3Flash 大小常见 4MB4MB / 8MB / 16MB问清 Mbit/MBytePSRAM无不用问问清容量 Quad 还是 OctalUSB 能力仅 USB-Serial/JTAG原生 OTG确认 GPIO19/20 引出排针/引脚确认是否焊好排针确认是否焊好排针天线形式PCB 天线 / IPEXPCB 天线 / IPEX供电方式Type-C 5VType-C 5V部分带电池充电固件生态Micropython / Arduino / ESP-IDFMicropython / Arduino / ESP-IDF / TinyUSB到手验证工具esptool chip_idesptool chip_id PSRAM 日志5.2 怎么在下单前通过商品页做预核对下单前不用等快递先做两件事。第一把商品主图放大看 PCB 上的模组丝印。模组丝印通常会直接印着 ESP32-S3-WROOM-1 或 ESP32-C3-MINI-1 这类字符串一眼就能确认芯片家族。如果图片里看不清评论区晒单图一般会更清楚。第二直接问客服三个问题PSRAM 多大、是 Quad 还是 Octal、USB 口是否支持 TinyUSB 示例。愿意回答的店铺靠谱程度会高很多支支吾吾的店铺建议慎买。有经验的卖家还会提供固件验证截图比如esptool flash_id的输出、Micropython 启动时打印的RAM: 1048576这类信息。在我个人经验里能拿出这种截图的卖家说明他们是真的了解自己卖的东西。5.3 到手后逐项验证快递到手先别急着接线花 10 分钟跑一遍验证流程。pip install esptool python -m esptool chip_id python -m esptool flash_id python -m esptool read_macchip_id会显示芯片型号比如Chip is ESP32-S3还是Chip is ESP32-C3这能直接戳穿任何刷错固件的板子。flash_id会显示 Flash 厂商和容量确认和购买页一致。如果是 S3 带 PSRAM 的版本可以刷一版支持 PSRAM 的 Micropython 固件启动日志或在 Python 里执行import gc print(gc.mem_free())如果可用内存只有几百 KB说明 PSRAM 没启用如果出现几 MB恭喜PSRAM 在工作。5.4 关于版本差异和批次坑模组厂商经常调整 Flash/PSRAM 的组合同一个板子商品页可能换过好几个硬件版本。S3 的模组型号后缀里N 后面数字一般表示 Flash 大小R 后面数字一般表示 PSRAM 大小比如 N8R8 大约就是 8MB Flash 8MB PSRAM。但这个规则不是所有模组都统一所以仍然要以板子实物丝印和规格书为准。C3 也有内置 Flash 规格的差异比如 ESP32-C3FH4 这类带内置 Flash 的封装。不同批次还可能用不同品牌的 Flash 颗粒虽然绝大多数不影响使用但如果你要做批量产品最好固定一个硬件版本再针对性测试避免“这批板子刷上没问题下批板子刷上就异常”这种幽灵问题。6. 到手后 30 分钟快速验证从 esptool 到 TinyUSB6.1 环境准备与驱动注意Windows 下插上 C3/S3 板子系统一般会识别出一个 COM 口。如果识别异常先检查数据线是不是“只充电不传数据”的线这类线在淘宝上泛滥是“设备描述符请求失败”的头号元凶。Linux 下驱动基本免装但要注意 ModemManager 有时会抢占串口导致打开端口失败可以暂时停止该服务。macOS 直接看/dev/tty.usbmodem*或/dev/cu.usbmodem*即可。esptool 用 pip 装就行。进入下载模式的方法一般是按住 BOOT 键再插入 USB或者插着 USB 短按 RESET 后在串口监视器里看到Waiting for download。S3 要玩 DFU 的话可以在按住 BOOT 插 USB 时观察系统里是否出现 DFU 设备有的话说明 ROM 引导已经进入 USB 下载模式。6.2 芯片、Flash、PSRAM、USB 四步验证第一步验证芯片python -m esptool chip_id第二步验证 Flashpython -m esptool flash_id第三步验证 PSRAM刷一个支持 PSRAM 的固件看启动日志或执行上面的 Micropython 内存检查。如果固件不支持 PSRAM 配置就算板子上有 PSRAM 颗粒也看不到所以不要第一时间怀疑硬件。第四步验证 USB 能力默认固件插上只看到 COM 口是正常的。想验证 S3 的 OTG/HID可以烧一个 ESP-IDF 的 TinyUSB 示例比如tinyusb_hid然后重新插拔板子电脑上会枚举成一个键盘/自定义 HID 设备。如果还是 COM 口说明固件没有把 OTG 控制器启用或者 Type-C 口内部只连接了 USB-Serial-JTAG 那一路需要看板子原理图确认。6.3 常见问题速查表现象可能原因排查方法电脑完全找不到设备线材只供电不传数据换一根短的数据线未知 USB 设备设备描述符请求失败USB 引脚被固件配置成 GPIO / 供电不足 / 线材差换线、换口、进下载模式重试烧录提示 no serial data received没进入下载模式 / 串口号选错按住 BOOT 插 USB重新查看串口号插上后 USB 识别成光驱/CD-ROM驱动被虚拟光驱类描述符抢占手动更新驱动为串口设备S3 只有 COM 口没有 HID/U 盘固件未启用 TinyUSB / OTG 控制器烧 TinyUSB 示例、检查 GPIO19/20Micropython 内存才几百 KB固件未开启 PSRAM 或板子无 PSRAM换带 PSRAM 固件核对硬件版本C3 无法模拟 U 盘/键盘硬件不支持 OTG换 S36.4 我的几个实操小技巧第一个技巧常备一根质量好的短 Type-C 数据线专门用来烧录和调试。很多玄学问题都是线材引起的这根线值得投资。第二个技巧在 S3 上做 USB 实验前先确认有没有外接 UART 调试口。理由前面说过开了 TinyUSB 后默认串口行为会变化如果没有外接调试口日志很容易看不见排查起来非常痛苦。第三个技巧手机上存一份 esptool 命令备忘和一个支持 OTG 的转接头。外出调试时用手机给板子供电、用转接头连一个 USB 键盘就能快速验证 S3 的 Host 功能不用背着电脑。第四个技巧也是我目前最受用的收到板子后把规格书 PDF、原理图、固件版本、esptool 输出全部归档到一块按日期命名。版本差异在 ESP32 生态里太常见了没有归档的话半年后你想复现一个项目可能连当初烧的是哪个固件都记不清。我个人实际用下来抽屉里常备三块 C3 Mini 做传感器节点两块 S3 Mini 分别处理 GUI 和 USB 实验。踩过最大的坑就是为省几十块买无 PSRAM 的 S3结果 GUI 卡到怀疑人生所以后来采购单里永远有一行“PSRAM 容量 接口类型”下单前放大商品图看模组丝印再问一句“能不能跑 TinyUSB 示例”确认清楚再付钱。希望这份采购单也能帮你少走一次弯路。