ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESP32-S3与C3 Mini选型指南:PSRAM、USB与采购避坑

ESP32-S3与C3 Mini选型指南:PSRAM、USB与采购避坑 1. 先搞清楚你要买的是哪一类板子1.1 两块 Mini 的定位差异ESP32-S3 Mini 和 ESP32-C3 Mini 这两块板子名字里都带 Mini价格也都在二十到四十块人民币这个区间浮动很多人第一次买的时候会直接懵——到底选哪个我自己的经验是先别看参数表先问自己一个问题你要不要跑摄像头、要不要做语音、要不要接一堆外设还要留内存做缓冲。如果答案是“要”那基本就是 S3如果只是做个温湿度上报、开关控制、串口透传C3 完全够用而且便宜、省电、发热小。S3 和 C3 最本质的区别在核心架构上。C3 用的是 RISC-V 单核160MHz没有原生 USB OTG只有 USB Serial/JTAG 控制器也就是说它可以用 USB 直接烧录和看串口但不能当 USB 主机去接键盘、U 盘、摄像头。S3 是 Xtensa 双核 LX7240MHz带完整的 USB OTG 外设可以当 Host 也可以当 Device还能跑 USB CDC、MSC、HID 这些类。这个差异直接决定了两块板子的应用场景分水岭。还有一个容易被忽略的点C3 的 GPIO 数量比 S3 少不少。C3 Mini 引出来的可用 IO 大概在 11 到 13 个左右取决于板子有没有把 Flash 占用的脚引出来S3 Mini 通常能引出 20 个以上。你要是做那种“屏幕按键传感器继电器”的项目C3 的脚位很快就会不够用到时候再换板子焊接和代码都要重来成本反而更高。1.2 什么场景选 S3什么场景选 C3我列一个自己实际项目里总结出来的判断表你可以直接对照场景推荐理由摄像头图像采集S3需要 PSRAM 做帧缓冲C3 没有足够内存语音唤醒/录音S3PSRAM 存音频缓冲双核跑算法USB 键盘/鼠标模拟S3需要 USB OTG Device 模式USB 主机接外设S3C3 不支持 Host温湿度上报C3便宜、够用、省电串口透传/AT 固件C3官方 AT 固件对 C3 支持成熟简单开关控制C3IO 够用成本低屏幕多传感器S3IO 多内存大电池供电长期待机C3功耗更低外围更简单这张表不是绝对的但能覆盖八成以上的选型场景。我踩过的坑是一开始图便宜用 C3 做带 TFT 屏的项目结果发现 IO 不够SPI 屏加上触摸和两个按键就把脚用完了最后只能飞线非常难看。所以选型阶段多花十分钟想清楚比后面返工划算得多。2. PSRAM 这件事买之前必须确认清楚2.1 PSRAM 到底影响什么PSRAM 就是伪静态随机存储器你可以把它理解成“给单片机外挂的一块内存”。ESP32-S3 内部 SRAM 大概 512KB听起来不少但一旦你跑 WiFi 协议栈、蓝牙协议栈、再加上 LVGL 图形库或者摄像头驱动内部 SRAM 很快就被吃光。这时候 PSRAM 就是救命的东西。具体来说PSRAM 影响的是这几件事第一能不能跑摄像头因为一帧 RGB565 的 QVGA 图像就是 150KB双缓冲就 300KB内部 SRAM 根本放不下第二能不能跑大一点的 LVGL 界面尤其是带图片资源的第三能不能做音频缓冲录音和播放都需要连续内存第四能不能跑 MicroPython 并且还有余量因为 MicroPython 的堆本身就很吃内存。C3 的情况比较特殊。C3 官方支持的最大 PSRAM 是 4MB但市面上大多数 C3 Mini 板子根本不带 PSRAM因为 C3 的定位就是低成本。你如果看到某家 C3 Mini 标了 PSRAM一定要仔细看是“芯片支持”还是“板子实际焊了”。很多店铺页面写得很模糊实际发货是没有的。2.2 怎么在购买页面核对 PSRAM我总结了一个“三看”原则专门用来在电商页面快速判断一看芯片型号后缀。ESP32-S3 的型号里R2表示 2MB PSRAMR8表示 8MB PSRAMN4表示 4MB FlashN8表示 8MB Flash。比如ESP32-S3-WROOM-1-N4R2就是 4MB Flash 2MB PSRAM。如果型号里没有 R 字段那就是没有 PSRAM。C3 的型号类似ESP32-C3-MINI-1默认没有 PSRAM带 PSRAM 的版本很少见。二看板子背面有没有那颗小芯片。PSRAM 通常是和 Flash 封装在一起或者单独一颗小方块位置一般在模组旁边。你可以让客服拍实物图或者看买家秀的高清图。如果只有一颗 Flash那基本就是没有 PSRAM。三看价格。带 8MB PSRAM 的 S3 板子成本比不带的高出不少如果价格明显低于市场均价大概率是虚标。我见过标着“8MB PSRAM”结果实际只有 2MB 的板子用esptool一读就露馅了。2.3 到手后怎么验证 PSRAM板子到手别急着写代码先用官方工具确认一遍。最直接的方法是用esptool.py读芯片信息esptool.py --chip esp32s3 --port /dev/ttyACM0 flash_id这个命令会输出 Flash 的厂商和容量。PSRAM 的检测稍微麻烦一点需要在代码里调用esp_psram_get_size()或者用heap_caps_get_total_size(MALLOC_CAP_SPIRAM)来读。如果你用 Arduino 框架可以直接跑一个ESP.getPsramSize()打印出来。MicroPython 的话import esp然后esp.psram_size()也能看到。注意有些板子的 PSRAM 需要在内核配置里手动使能默认可能是关闭的。如果你读出来是 0先别急着退货检查一下menuconfig里的CONFIG_SPIRAM有没有打开。3. USB 接口的坑不是所有 Type-C 都能当 USB 用3.1 S3 和 C3 的 USB 能力差异这是最容易买错的地方。ESP32-S3 有两个 USB 相关的控制器一个是 USB OTG一个是 USB Serial/JTAG。OTG 可以当 Host 也可以当 Device能跑 CDC、MSC、HID、DFU 等各种类。Serial/JTAG 主要是用来烧录和调试的速度也够快。C3 只有一个 USB Serial/JTAG 控制器没有 OTG。这意味着 C3 可以用 USB 烧录、看串口输出但不能模拟键盘鼠标也不能接 U 盘。如果你看到某个项目需要“ESP32 当 USB 设备”那必须是 S3C3 做不了。还有一个细节S3 的 USB OTG 和 Serial/JTAG 是共用同一组 USB 引脚的板子上通常只有一个 Type-C 口。这个口既可以烧录也可以当 OTG 用具体角色由固件决定。有些板子会额外引出一个 USB 口专门给 Serial/JTAG但 Mini 板子为了省空间一般只留一个。3.2 Type-C 口不等于 USB 功能完整市面上很多 ESP32 Mini 板子用的是 Type-C 母座但只接了 USB 2.0 的 D D- 和电源CC 引脚可能只焊了一个电阻甚至没焊。这种板子插上电脑能识别串口但如果你要做 USB OTG Host可能因为 CC 引脚没处理导致无法识别设备。我实测过几款不同的 S3 Mini有的板子 CC 引脚只焊了 5.1k 下拉电阻这种只能当 Device有的焊了 CC 控制器可以自动切换 Host/Device。如果你要玩 USB Host买之前一定问清楚 CC 引脚是怎么处理的或者看原理图。没有原理图的板子我一般不建议用来做 USB Host 项目。另外USB 数据线也有讲究。很多便宜的 Type-C 线只有电源线没有数据线插上只能充电不能传数据。我建议手边常备一根确认能传数据的线最好是带屏蔽的烧录和调试都稳定。那种买板子送的红黑线有时候接触不良会导致烧录失败排查半天以为是板子问题其实是线的问题。3.3 USB 转串口芯片的选型有些 ESP32 板子不带原生 USB而是通过一颗 USB 转串口芯片比如 CH340、CP2102、FT231X来和电脑通信。这种板子的好处是兼容性好老电脑不用装额外驱动坏处是多了颗芯片成本高一点而且波特率上限受芯片限制。S3 和 C3 都支持原生 USB Serial/JTAG理论上不需要外置转串口芯片。但有些厂家为了兼容性还是会焊一颗 CH340。这种板子插上电脑会同时出现两个串口一个原生一个 CH340烧录的时候要选对。我一般优先选原生 USB 的板子少一颗芯片少一个故障点。如果你用的是 Windows原生 USB Serial/JTAG 需要装驱动Win10 以上一般能自动识别Win7 就比较麻烦。CH340 的驱动倒是很成熟但网上版本很乱建议从官方渠道下载。CP2102 的驱动最省心基本免驱。4. 一张可核对的采购单该怎么写4.1 采购单的核心字段我每次买板子之前都会列一个表把关键信息写清楚下单的时候逐项核对。这个习惯帮我避免了很多次买错。表格字段包括字段说明示例芯片型号完整型号含后缀ESP32-S3-WROOM-1-N4R2Flash容量和类型4MB QIOPSRAM有无和容量2MB OPIUSB 控制器OTG / Serial-JTAGOTG Serial/JTAGUSB 座类型Type-C / MicroType-CCC 处理下拉 / 控制器5.1k 下拉GPIO 数量可用 IO22天线PCB / 外置PCB供电USB / 锂电USB 5V尺寸长宽25.4 x 17.8 mm价格单价28 元这张表看起来简单但每一项都对应一个实际的坑。比如 Flash 类型QIO 比 DIO 快但有些便宜板子用的是 DIO跑起来差别不大但心理上不舒服。PSRAM 的 OPI 和 QSPI 也有区别OPI 带宽更高适合摄像头。4.2 下单前的核对流程我一般按这个顺序核对第一步确认芯片型号。把店铺页面上的型号复制下来去官网查 datasheet确认后缀含义。如果店铺只写“ESP32-S3”不写完整型号直接问客服要实物图。第二步确认 PSRAM。看型号有没有 R 字段看实物图有没有额外芯片看价格是否合理。三者都对得上才下单。第三步确认 USB。问清楚是原生 USB 还是转串口CC 引脚怎么处理有没有原理图。如果客服答不上来换一家。第四步确认 GPIO。看引脚图数一下实际引出来的 IO 数量对照自己的项目需求。特别注意那些被 Flash 和 PSRAM 占用的脚一般是 GPIO26-32 这一带具体看型号。第五步确认尺寸和封装。Mini 板子的尺寸差异很大有的 25.4x17.8有的 18x18买之前量一下自己的外壳或者洞洞板能不能放下。提示如果你一次买多块建议同一批次买因为不同批次的板子可能换了 Flash 或 PSRAM 供应商代码里的时序参数可能要微调。4.3 配件也要一起买板子本身只是开始配套的东西不买齐到手也跑不起来。我一般会一起下单USB 数据线至少两根一长一短确认能传数据杜邦线母对母和公对母各一把面包板如果是 Mini 板子建议买小号的排针有些板子不焊排针需要自己焊散热片S3 跑满 240MHz 双核的时候会热小散热片有帮助电容100uF 和 0.1uF 各几个电源不稳的时候加上去这些东西加起来不到二十块但少了任何一个都可能让你卡住。我有一次板子到了发现没焊排针手边又没有排针只能等第二天再买白白浪费一晚上。5. 开发环境搭建与固件选择5.1 ESP-IDF 还是 Arduino这个问题没有标准答案看你的项目复杂度。ESP-IDF 是官方框架功能最全USB OTG、PSRAM、双核调度这些都能精细控制但上手曲线陡编译慢。Arduino 框架上手快库多但有些底层功能封装得不够好比如 USB Host 的支持就不如 IDF 完整。我的建议是如果你要做 USB OTG 或者摄像头这种对性能敏感的项目直接用 ESP-IDF。如果只是点灯、读传感器、连 WiFiArduino 足够。MicroPython 适合快速验证想法但性能和内存管理不如前两者跑复杂项目会吃力。ESP-IDF 的安装用官方 installer 最省事选好版本一路下一步就行。我一般用稳定版比如 v5.1 或 v5.2不用 master 分支避免遇到未修复的 bug。安装完之后记得跑一下idf.py --version确认环境变量配好了。Arduino 的话在首选项里加上 ESP32 的板子管理 URL然后在板子管理器里搜 esp32 安装。注意选对版本有些老版本对 S3 的 PSRAM 支持有问题。安装完之后在工具菜单里选对板子和端口Flash 模式选 QIOPSRAM 选 OPI 或 QSPI根据你的板子来。5.2 烧录参数怎么设烧录参数设错是新手最常见的坑。我列一下 S3 和 C3 的典型配置参数S3 典型值C3 典型值Flash ModeQIOQIOFlash Frequency80MHz80MHzFlash Size4MB / 8MB4MBPSRAMOPI / QSPI无Partition Scheme按需按需Upload Speed921600921600Upload Speed 我一般设 921600再高有时候不稳定。如果烧录失败先降到 115200 试试排除线材和端口的问题。烧录的时候如果一直卡在 “Connecting...”按住 BOOT 键再点烧录或者检查驱动有没有装好。注意S3 的 PSRAM 模式选错会导致启动失败或者内存读出来不对。OPI 和 QSPI 不能混买的时候确认清楚板子用的是哪种。一般 8MB PSRAM 用 OPI2MB 用 QSPI但也不是绝对以原理图为准。5.3 验证板子是否正常烧录一个最简单的程序验证板子。ESP-IDF 的话用hello_world例程Arduino 的话用Blink。跑通之后再跑一个读 PSRAM 和 Flash 的程序确认参数和购买时一致。我一般会跑这个检查清单串口能打印波特率 115200LED 能闪烁说明 GPIO 正常WiFi 能扫描到热点说明射频正常PSRAM 容量读出来和标称一致Flash 容量读出来和标称一致USB 能识别设备管理器里能看到这六项都过了板子基本没问题。如果有哪项不对先排查软件配置再怀疑硬件。我遇到过 PSRAM 读出来是 0 的情况最后发现是 menuconfig 里没使能不是板子的问题。6. 常见问题与排查技巧实录6.1 烧录失败怎么办烧录失败的原因很多我按概率排个序第一线材问题。换一根确认能传数据的线这是最常见的。第二驱动问题。Windows 设备管理器里看有没有黄色感叹号有的话装驱动。第三端口选错。有些板子插上会出现两个串口选错就烧不进去。第四BOOT 键没按。有些板子需要手动进下载模式。第五Flash 模式设错。QIO 和 DIO 搞混了会失败。排查顺序就是从简单到复杂先换线再换端口再检查配置最后怀疑板子。我遇到过一块板子怎么都烧不进去最后发现是 USB 座虚焊重新焊了一下就好了。6.2 PSRAM 读出来不对如果 PSRAM 容量和标称不符先检查软件配置。ESP-IDF 里CONFIG_SPIRAM要打开模式要选对。Arduino 里 PSRAM 要选 Enabled。如果配置没问题还是不对那可能是板子虚标用esptool读芯片 ID 确认一下。还有一种情况是 PSRAM 能用但会随机崩溃这通常是时序问题。可以尝试降低 PSRAM 频率或者调整CONFIG_SPIRAM_SPEED。有些便宜板子的 PSRAM 质量一般跑高频会不稳。6.3 USB 识别不了USB 识别不了分几种情况。如果是原生 USB检查驱动装了没Win10 以上一般自动识别。如果是 CH340检查驱动版本。如果都不行换线换端口。还有一种情况是板子进了下载模式但没退出重新上电试试。如果你要做 USB Host识别不了设备先确认 CC 引脚处理对了再确认供电够不够。USB Host 需要给外设供电板子上的 5V 如果电流不够设备会反复枚举失败。可以外接供电试试。6.4 常见问题速查表现象可能原因解决方法烧录卡在 Connecting线材/驱动/BOOT换线、装驱动、按 BOOTPSRAM 读出 0配置未开/虚标检查 menuconfig、读芯片 IDUSB 不识别驱动/线材/CC装驱动、换线、查原理图WiFi 连不上天线/供电/配置检查天线、加电容、看日志随机重启供电不足/PSRAM 不稳加电容、降 PSRAM 频率GPIO 无输出脚被占用/配置错查引脚图、检查代码串口乱码波特率/晶振改波特率、检查晶振频率这张表是我自己踩坑总结的覆盖了大部分常见问题。遇到问题先查表能省很多时间。6.5 几个独家避坑技巧第一个买板子的时候多买一块备用。ESP32 的板子虽然不贵但一旦坏了等快递很耽误事。我一般一次买三块两块用一块备。第二个焊排针的时候先插在面包板上再焊这样针脚是正的。直接焊容易歪插不进面包板。第三个电源一定要干净。ESP32 对电源噪声敏感尤其是跑 WiFi 的时候。在 3.3V 和 GND 之间并一个 100uF 电解加一个 0.1uF 陶瓷能解决很多玄学问题。第四个烧录的时候如果一直失败试试把板子拿在手里或者放在金属上有时候静电会影响。虽然听起来玄学但我确实遇到过。第五个MicroPython 的固件要选对版本。S3 和 C3 的固件不通用PSRAM 版本和普通版本也不一样。下载的时候看清楚文件名里的芯片型号和 PSRAM 标识。7. 从采购到点灯一个完整的实操记录7.1 我的实际采购清单以我最近一次买 S3 Mini 为例实际下单的东西ESP32-S3 Mini 开发板 x3单价 28 元型号 ESP32-S3-WROOM-1-N4R24MB Flash 2MB PSRAMType-C 口原生 USBUSB 数据线 x2一长一短共 15 元杜邦线一套10 元小号面包板 x28 元排针一包5 元散热片一包6 元电容包8 元总计约 136 元够玩很久了。下单前我按第 4 节的表格逐项核对了型号、PSRAM、USB、GPIO确认没问题才付款。7.2 到手后的验证流程板子到了之后我按这个流程走第一步目视检查。看焊点有没有虚焊USB 座正不正芯片有没有明显损伤。第二步插电脑看设备管理器确认串口出现。第三步跑esptool flash_id读 Flash 信息。第四步烧录 hello_world看串口输出。第五步跑 PSRAM 检测程序确认容量。第六步跑 WiFi 扫描确认射频正常。这六步走完板子基本就确认没问题了。整个过程大概十五分钟但能避免后面很多麻烦。7.3 一个简单的点灯程序用 ESP-IDF 写一个点灯程序顺便打印芯片信息#include stdio.h #include freertos/FreeRTOS.h #include freertos/task.h #include driver/gpio.h #include esp_chip_info.h #include esp_psram.h #include esp_flash.h void app_main(void) { esp_chip_info_t chip; esp_chip_info(chip); printf(Chip: %d cores, model %d\n, chip.cores, chip.model); uint32_t flash_size; esp_flash_get_size(NULL, flash_size); printf(Flash: %lu MB\n, flash_size / (1024 * 1024)); size_t psram_size esp_psram_get_size(); printf(PSRAM: %u MB\n, psram_size / (1024 * 1024)); gpio_reset_pin(GPIO_NUM_2); gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT); while (1) { gpio_set_level(GPIO_NUM_2, 1); vTaskDelay(pdMS_TO_TICKS(500)); gpio_set_level(GPIO_NUM_2, 0); vTaskDelay(pdMS_TO_TICKS(500)); } }这个程序会打印芯片核数、Flash 容量、PSRAM 容量然后让 GPIO2 上的 LED 闪烁。跑通之后板子的基本信息就都确认了。7.4 采购单模板最后给你一个可以直接抄的采购单模板复制到备忘录里每次买板子的时候填一遍芯片型号 Flash PSRAM USB 控制器 USB 座类型 CC 处理 GPIO 数量 天线 供电 尺寸 价格 配件 备注填完这个表再对照店铺页面逐项核对基本不会买错。我用了两年这个模板买错的次数从最开始的三次降到零。提示如果你买的是 C3PSRAM 那一栏大概率填“无”USB 控制器填“Serial/JTAG”CC 处理填“下拉”。C3 的采购单比 S3 简单但 GPIO 数量要特别留意别买回来发现脚不够。8. 关于固件和工具链的补充8.1 AT 固件怎么选如果你买 C3 是为了做串口透传那大概率要刷 AT 固件。官方 AT 固件在乐鑫的仓库里有按芯片型号和 Flash 容量选对应的 bin 文件。烧录的时候注意分区表要匹配不然会启动失败。AT 固件的版本更新比较快建议用稳定版别追最新。烧录完之后用串口助手发AT看有没有回OK有就说明正常。如果没反应检查波特率默认一般是 115200。8.2 USB 抓包怎么看如果你在做 USB 相关的开发抓包工具很有用。硬件抓包器比较贵软件的话 Linux 下用usbmon加 Wireshark 就能看。Windows 下可以用 Wireshark 加 USBPcap。抓到的包能看到枚举过程、端点配置、数据传输排查问题很方便。不过抓包只是手段关键还是理解 USB 协议的基本概念端点、管道、传输类型、描述符。这些搞懂了看包就很容易。8.3 工具链版本管理ESP-IDF 的版本更新很快不同项目可能依赖不同版本。我建议用idf.py自带的版本管理或者用 Docker 隔离环境。Arduino 的话板子包版本也要注意不同版本对 S3 的支持有差异。我一般一个项目固定一个版本不随便升级。升级之前先备份代码跑一遍测试确认没问题再切过去。这样虽然保守但能避免很多意外。9. 最后分享几个实际体会买 ESP32 板子这件事看起来简单但细节很多。我踩过的坑包括买 C3 想做 USB Host 结果发现不支持买 S3 没注意 PSRAM 结果跑不了摄像头买便宜板子结果 USB 座虚焊买错 Flash 模式烧录失败。这些坑每一个都浪费过时间但总结下来就是一句话买之前把需求想清楚把参数核对清楚把配件买齐。我现在买板子的流程已经固定了先列需求再选型号再填采购单再逐项核对最后下单。这套流程走下来基本不会出错。板子到手之后先验证再开发也能避免很多返工。如果你刚开始玩 ESP32建议从 C3 入手便宜、简单、资料多。等玩熟了再上 S3做更复杂的项目。两块板子加起来不到六十块但能玩的东西很多。关键是别急着买一堆先把一块玩透再扩展。这个内容后续还可以扩展的方向包括USB OTG 的具体项目实践、PSRAM 的性能测试、双核任务调度、低功耗优化。每一个都值得单独写一篇。
返回列表