首页 / 资讯中心 / 文章详情

ESP32-S3与ESP32-C3开发板选购指南:PSRAM、USB与GPIO对比

ESP32-S3与ESP32-C3开发板选购指南:PSRAM、USB与GPIO对比 ★ FEATURED ARTICLE
1. 先搞清楚这两块板子到底差在哪1.1 从一颗芯片的定位说起ESP32-S3 和 ESP32-C3 这两块 Mini 板子放在购物车里长得差不多价格也接近但它们的定位其实完全不同。我刚开始接触的时候也犯过迷糊觉得都是 ESP32 家族、都是 RISC-V 或者 Xtensa 架构、都能跑 ESP-IDF那随便买一个不就行了后来在实际项目里踩了坑才发现选错了芯片后面要么性能不够要么成本浪费要么干脆某个功能根本做不了。先把最核心的差异摆出来。ESP32-C3 是单核 RISC-V 架构主频 160MHz没有 PSRAM 扩展能力GPIO 数量也比较有限。它的定位是替代老款 ESP8266 的那一档主打低成本、低功耗、Wi-Fi 加蓝牙 LE 的基础物联网场景。而 ESP32-S3 是双核 Xtensa LX7 架构主频 240MHz支持外挂 PSRAM还带向量指令集专门为边缘 AI 和需要较大内存缓冲的应用设计。这个差异直接决定了你买板子的时候要看什么。如果你只是做一个温湿度上报、继电器控制、简单的 MQTT 客户端C3 Mini 完全够用价格还便宜不少。但如果你要做摄像头图像处理、语音唤醒、LVGL 图形界面、或者需要跑较大的缓冲区那 S3 Mini 才是正确的选择。1.2 PSRAM 是分水岭不是可选项很多人买板子的时候看到“Mini”这个词就默认是小内存版本其实不对。S3 Mini 和 C3 Mini 的关键区别之一就在于 PSRAM 的有无。C3 芯片本身不支持外挂 PSRAM这是硬件层面的限制不是板子设计的问题。S3 则可以通过 Quad SPI 或者 Octal SPI 接口外挂 2MB 到 8MB 甚至 16MB 的 PSRAM。为什么 PSRAM 这么重要举个实际的例子。你要用 ESP32-S3 驱动一个 240x240 的 ST7789 屏幕做 LVGL 界面一个全屏的 RGB565 缓冲区就是 240 × 240 × 2 115200 字节也就是 112.5KB。如果要做双缓冲那就是 225KB。S3 内部 SRAM 总共才 512KB还要分给 Wi-Fi 协议栈、FreeRTOS 任务栈、各种驱动缓冲区剩下能给你做图形缓冲的也就 200KB 左右。没有 PSRAM 的话你只能做局部刷新或者小缓冲区界面一复杂就卡顿。再比如摄像头应用OV2640 输出一张 JPEG 图片动辄几十 KB 到上百 KB如果要做图像缓冲队列或者临时存储没有 PSRAM 根本转不开。所以买 S3 Mini 的时候一定要确认板子上有没有焊 PSRAM 芯片以及是多大容量。市面上有些便宜的 S3 Mini 是不带 PSRAM 的买回来才发现不够用那就尴尬了。1.3 USB 接口的两种玩法ESP32-S3 和 ESP32-C3 都内置了 USB Serial/JTAG 控制器这意味着它们可以直接通过 USB 接口进行固件下载和串口通信不需要额外的 USB 转串口芯片。这是好事但也有坑。C3 的 USB 控制器只支持 Full Speed USB 1.1也就是 12Mbps而且它的 USB Serial/JTAG 功能相对基础。S3 的 USB 控制器支持 Full Speed USB 2.0 OTG可以配置成设备模式或者主机模式还能做 USB MSC、HID、CDC 等各种设备类。如果你要做 USB 相关的开发比如模拟一个 U 盘、键盘、或者做 USB 数据采集那必须选 S3。但这里有个实际问题很多 Mini 板子虽然芯片支持 USB但板子上只引出了一个 USB 接口而且这个接口是通过 USB 转串口芯片比如 CH343、CP2102连接到 UART 引脚的并不是直接连到芯片的 USB 引脚。这种设计的好处是兼容性好插上就能识别成串口不需要额外驱动。坏处是你用不了芯片原生的 USB 功能。所以买板子的时候要看清楚板子上是一个 USB 口还是两个如果只有一个那大概率是 USB 转串口。如果有两个通常一个是 USB 转串口用于下载和日志另一个是芯片原生 USB用于 OTG 功能。当然也有板子通过跳线或者电阻选择来切换这种就需要看原理图确认了。1.4 一张采购决策表我把常见的需求场景和对应的选择整理成了一张表买之前对着看一眼基本不会选错。需求场景推荐型号关键理由简单传感器上报、继电器控制C3 Mini成本低功能够用GPIO 少但够接几个外设MQTT 客户端、HTTP 请求C3 Mini单核 160MHz 处理协议栈绰绰有余LVGL 图形界面、TFT 屏幕S3 Mini PSRAM需要大缓冲区双核处理刷新更流畅摄像头图像采集S3 Mini PSRAMJPEG 缓冲需要大量内存语音唤醒、关键词识别S3 Mini PSRAM向量指令加速内存需求大USB 设备模拟键盘、U盘S3 MiniC3 不支持 USB OTG蓝牙 LE 信标、iBeaconC3 Mini低功耗成本敏感多任务复杂逻辑S3 Mini双核可以分担 Wi-Fi 和业务逻辑电池供电的便携设备C3 Mini功耗更低外围电路更简单需要大量 GPIO 的外设矩阵S3 MiniC3 GPIO 数量有限S3 更充裕这张表是我自己在多个项目里总结出来的不一定覆盖所有情况但大方向不会错。接下来我会把每个关键点展开讲包括怎么在购买时核对参数、怎么避免买到不合适的版本、以及拿到板子之后怎么快速验证。2. 买之前必须核对的五个硬指标2.1 PSRAM 容量与接口类型买 S3 Mini 的时候PSRAM 是最容易踩坑的地方。市面上常见的配置有这几种无 PSRAM、2MB Quad SPI PSRAM、8MB Octal SPI PSRAM。注意这里的接口类型不一样Quad SPI 是四线Octal SPI 是八线后者带宽更高适合对内存带宽敏感的应用比如摄像头和高速图形刷新。怎么核对最直接的方法是看产品页面的参数表通常会写“内置 8MB PSRAM”或者“外置 2MB PSRAM”。如果写的是“可选”那就要问清楚默认发的是哪个版本。另外可以看板子上的丝印PSRAM 芯片通常是一颗小封装的 IC靠近主控芯片。如果板子上只有一颗 ESP32-S3 芯片没有额外的存储芯片那大概率是没有 PSRAM 的。还有一个细节有些板子用的是 ESP32-S3-WROOM-1 模组这个模组本身有带 PSRAM 和不带 PSRAM 的版本。模组型号里通常会标注比如 ESP32-S3-WROOM-1-N8R8 就是 8MB Flash 8MB PSRAMN8R2 就是 8MB Flash 2MB PSRAMN8 就是只有 8MB Flash 没有 PSRAM。买的时候看清楚模组型号比看板子描述更靠谱。2.2 Flash 容量决定你能存多少东西Flash 容量决定了你的固件能有多大、能存多少文件、能不能跑 OTA 双分区。常见的配置有 4MB、8MB、16MB。C3 Mini 通常是 4MB FlashS3 Mini 常见的是 8MB 或 16MB。4MB 够不够用如果你只是跑一个简单的 Arduino 程序或者 ESP-IDF 的基础例程4MB 是够的。但如果你要用 LVGL 加字体、图片资源或者要跑 MicroPython、Tasmota 这类较大的固件4MB 就很紧张了。特别是 OTA 双分区的情况下每个分区只有 2MB 左右固件稍微大一点就放不下。我的建议是C3 Mini 买 4MB 版本就行因为它本身定位就是轻量应用。S3 Mini 尽量买 8MB 或 16MB 版本差价不大但后面扩展空间大很多。尤其是你要做带界面的项目字体和图片资源很占空间16MB 会从容很多。2.3 USB 接口的物理形态与连接方式前面提到了 USB 转串口和原生 USB 的区别这里再展开说一下物理接口。Mini 板子常见的 USB 接口有 Type-C 和 Micro-USB 两种。Type-C 现在更主流正反插方便而且很多手机充电线就能用。Micro-USB 老一些但有些便宜板子还在用。关键不是接口形状而是这个接口连到哪里。你可以通过以下几个方法判断看板子上的芯片如果 USB 接口旁边有一颗 CH343、CP2102、CH9102 之类的芯片那这个口就是 USB 转串口。看设备管理器插上电脑后如果识别出来的是“USB-SERIAL CH343”或者“Silicon Labs CP210x”那就是转串口。如果识别出来的是“USB JTAG/serial debug unit”那就是原生 USB。看板子有几个 USB 口两个口的话通常一个转串口一个原生。一个口的话要看原理图或者问卖家。为什么要搞清楚这个因为如果你要用 ESP-IDF 的 USB Serial/JTAG 功能来下载和调试那必须用原生 USB 口。如果你只是用 Arduino IDE 通过串口下载那转串口口就够了。另外原生 USB 口在 ESP-IDF 里可以配置成 CDC 设备用来输出日志速度比 UART 快很多。2.4 天线形式影响信号和体积Mini 板子的天线通常有两种板载 PCB 天线和外部天线接口IPEX 或 SMA。板载天线体积小不需要额外配件但增益有限信号覆盖一般。外部天线接口可以接高增益天线信号更好但需要额外买天线而且板子会稍微大一点。怎么选如果你的设备放在路由器附近或者对信号要求不高板载天线就够了。如果设备要放在金属壳里、或者距离路由器较远、或者需要穿墙那建议选带外部天线接口的版本。另外有些板子同时有板载天线和 IPEX 接口通过一个电阻或者电容来选择这种灵活性最好。还有一个细节C3 Mini 的板载天线通常比较小因为板子本身尺寸受限。S3 Mini 的板子稍大一些天线空间更充裕。如果你对信号敏感S3 Mini 的板载天线表现通常会好一点。2.5 GPIO 数量与引出方式C3 的 GPIO 数量比 S3 少不少。C3 总共只有 22 个 GPIO其中还有一些有特殊功能或者启动时的状态要求。S3 有 45 个 GPIO可用的数量多很多。如果你要接多个传感器、屏幕、按键、LED那 C3 可能会不够用。另外要注意的是 GPIO 的引出方式。Mini 板子通常采用排针或者半孔castellated方式引出。排针方便插面包板或者杜邦线半孔适合直接焊到 PCB 上。如果你要做产品原型半孔更方便集成。如果只是学习和验证排针更灵活。买的时候还要注意板子引出了哪些 GPIO。有些板子为了缩小体积只引出了一部分 GPIO其他的要么没引出来要么被内部功能占用了。比如有些 C3 Mini 板子引出的 GPIO 很少只有几个 ADC 和几个数字口。如果你需要特定的 GPIO 功能比如某个引脚做 DAC 或者触摸一定要确认板子有没有引出来。3. 拿到板子后的验证与上手流程3.1 第一步确认电脑能识别到设备板子到手后先别急着写代码第一步是确认电脑能正确识别。如果是 USB 转串口的板子插上之后应该能在设备管理器里看到一个串口设备。Windows 上可能需要装驱动CH343 和 CP2102 的驱动都很常见去官网下载安装就行。Mac 和 Linux 通常免驱直接能看到 /dev/ttyUSB0 或者 /dev/ttyACM0。如果插上没反应先换一根 USB 线试试。这里有个坑很多 USB 线是“只充电不传数据”的尤其是那种便宜的 Type-C 线。我遇到过好几次板子插上没反应换了三根线才发现是线的问题。所以手边最好备一根确认能传数据的线作为调试专用。如果是原生 USB 口插上之后设备管理器里应该出现“USB JTAG/serial debug unit”或者类似的设备。这个口在 ESP-IDF 里可以直接用 idf.py flash 下载不需要额外的串口芯片。但在 Arduino IDE 里需要选择对应的 USB CDC 端口。3.2 第二步用 esptool 读取芯片信息确认设备识别之后可以用 esptool 来读取芯片的详细信息包括芯片型号、Flash 大小、PSRAM 大小、MAC 地址等。这个步骤很重要因为可以验证你买的板子参数是否和描述一致。esptool.py --port /dev/ttyUSB0 flash_id这个命令会输出 Flash 的制造商和容量。如果要看 PSRAM可以用esptool.py --port /dev/ttyUSB0 read_mac不过 read_mac 只读 MAC 地址。要看 PSRAM 信息更直接的方法是在 ESP-IDF 里跑一个例程用 esp_psram_get_size() 函数来读取。或者用 Arduino 的 ESP.getPsramSize() 函数。如果读出来的 Flash 大小和描述不符比如买的是 8MB 但读出来是 4MB那就要找卖家确认了。这种情况虽然不多但确实存在尤其是从一些不太正规的渠道购买的时候。3.3 第三步跑一个最小验证程序确认硬件参数没问题之后跑一个最简单的程序来验证基本功能。我通常会用串口输出加 LED 闪烁来测试。C3 Mini 和 S3 Mini 的板载 LED 引脚可能不一样需要看板子的原理图或者产品说明。用 ESP-IDF 的话可以基于 hello_world 例程改一下加上 GPIO 输出。用 Arduino 的话更简单直接 Blink 改一下引脚号就行。这个步骤的目的是确认下载正常、串口输出正常、GPIO 可控。如果串口输出乱码通常是波特率不对。ESP-IDF 默认是 115200Arduino 的 Serial.begin 也要设成 115200。如果还是乱码检查一下晶振频率设置有些板子用的是 40MHz 晶振有些是 26MHz配置不对会导致波特率偏差。3.4 第四步测试 PSRAM 是否可用如果你买的是带 PSRAM 的 S3 Mini这一步一定要做。在 ESP-IDF 里PSRAM 默认可能没有开启需要在 menuconfig 里配置。路径是 Component config - ESP PSRAM - Support for external, SPI-connected RAM然后选择对应的模式Quad SPI 或 Octal SPI。配置好之后可以用以下代码测试#include esp_psram.h #include esp_log.h void app_main(void) { size_t psram_size esp_psram_get_size(); ESP_LOGI(PSRAM, PSRAM size: %d bytes, psram_size); }如果输出是 0说明 PSRAM 没有正确初始化需要检查配置。如果输出是 2MB 或 8MB那就正常了。这个步骤很关键因为很多 PSRAM 的问题都是配置不对导致的而不是硬件坏了。3.5 第五步测试 USB 功能仅 S3如果你买 S3 是为了用 USB OTG 功能那需要单独测试。ESP-IDF 里有 USB 设备的例程比如 tinyusb 的 CDC 或者 MSC 例程。跑一个 CDC 例程把板子配置成 USB 串口设备然后插到电脑上看能不能识别出一个新的串口。这个测试需要注意的是USB 口和 UART 口可能是同一个物理接口但内部连接不同。有些板子通过电阻选择有些通过跳线。如果跑 USB 例程没反应先确认板子的 USB 口是不是连到了芯片的 USB 引脚上。可以查原理图或者用万用表测一下 USB 的 D D- 是否连通到芯片的对应引脚。4. 采购渠道与避坑经验4.1 不同渠道的差异买这类开发板常见的渠道有几种官方原厂、授权代理商、第三方模组厂商、以及各种电商平台。不同渠道的差异主要在价格、质量一致性和技术支持上。官方原厂的板子质量最有保障但价格通常也最高。授权代理商的货和原厂一样价格可能稍微便宜一点但起订量可能有限制。第三方模组厂商的板子价格便宜很多但质量参差不齐有些板子的天线匹配没做好信号差有些电源设计偷工减料USB 供电不稳有些甚至用的是拆机芯片或者翻新芯片。我的经验是如果是学习或者验证第三方板子完全可以价格便宜坏了也不心疼。但如果是做产品或者需要长期稳定运行建议用原厂或者授权渠道的板子省去的调试时间远比差价值钱。4.2 怎么判断板子质量拿到板子之后可以从几个方面快速判断质量看焊接焊点是否饱满、有没有虚焊、芯片有没有歪。尤其是 QFN 封装的芯片引脚很密焊接不好的话很难发现。看电源用万用表测一下 3.3V 输出是否稳定纹波大不大。可以接一个示波器看没有示波器的话用万用表的交流档粗略看一下。看天线板载天线的走线是否规整有没有阻抗匹配的痕迹。如果天线区域有覆铜或者走线穿过信号通常会受影响。看丝印板子上的丝印是否清晰引脚标注是否准确。有些便宜板子的丝印标错了按丝印接线会出问题。这些检查不需要很专业的设备但能筛掉大部分质量有问题的板子。4.3 配件清单别只买板子买板子的时候通常还需要一些配件才能跑起来。我整理了一个基础配件清单配件用途备注USB 数据线供电和下载确认能传数据Type-C 或 Micro-USB 对应板子接口杜邦线连接外设母对母、公对母各备一些面包板搭建电路400 孔或 830 孔看项目复杂度外部天线增强信号如果板子有 IPEX 接口按需购买电源模块独立供电如果外设较多USB 供电可能不够逻辑分析仪调试信号可选但调试 I2C、SPI 时很有用USB 转 TTL备用串口如果板子原生 USB 出问题可以用这个调试这个清单不是必须全买但至少 USB 数据线和杜邦线是必须的。面包板建议备一块调试的时候方便很多。4.4 价格区间与性价比判断C3 Mini 的价格通常在十几到二十几元人民币S3 Mini 不带 PSRAM 的版本在二十到三十元带 8MB PSRAM 的版本在四十到六十元。如果价格明显低于这个区间要警惕质量或者翻新问题。如果价格明显高于这个区间除非是原厂或者带特殊配件否则性价比不高。性价比的判断不能只看价格还要看你的时间成本。一块便宜十块钱但信号差、需要额外调试两天的板子远不如多花十块钱买一块开箱即用的。尤其是做项目的时候时间比硬件成本贵得多。5. 常见问题与排查速查5.1 下载失败怎么办下载失败是最常见的问题可能的原因有很多。我按排查顺序列一下检查 USB 线换一根确认能传数据的线。检查驱动Windows 上确认串口驱动装好了设备管理器里没有黄色感叹号。检查端口确认选对了串口端口号Arduino IDE 和 ESP-IDF 里都要选对。检查波特率下载波特率太高可能导致失败可以降到 115200 试试。检查板子状态有些板子需要按住 BOOT 键再按 RESET 键进入下载模式。如果板子没有自动下载电路就需要手动操作。检查电源USB 供电不足可能导致下载失败换一个 USB 口或者用带供电的 Hub 试试。如果以上都试过了还是不行可以用 esptool 的 --before 和 --after 参数来控制下载前后的操作比如esptool.py --port /dev/ttyUSB0 --before default_reset --after hard_reset flash_id5.2 串口无输出或乱码串口无输出通常是以下几个原因波特率不对确认代码里的波特率和串口监视器里设置的一致。引脚不对确认串口输出用的是正确的 UART 引脚。C3 和 S3 的默认 UART 引脚可能不同。晶振配置不对如果板子用的是 26MHz 晶振但配置成 40MHz波特率会偏差很大导致乱码。USB 口选错如果板子有两个 USB 口确认用的是转串口那个口而不是原生 USB 口。乱码的话优先检查晶振配置和波特率。ESP-IDF 里可以在 menuconfig 里设置晶振频率Arduino 里通常在板子定义里已经设好了。5.3 PSRAM 识别不到PSRAM 识别不到先确认板子确实有 PSRAM 芯片。然后检查 ESP-IDF 的配置Component config - ESP PSRAM - Support for external, SPI-connected RAM 要打开。模式选择要正确Quad SPI 还是 Octal SPI要和板子上的 PSRAM 芯片匹配。速度设置如果速度设得太高PSRAM 可能初始化失败可以降低速度试试。如果配置都对了还是识别不到可能是 PSRAM 芯片焊接有问题或者芯片本身坏了。这种情况只能换板子或者找卖家处理。5.4 USB 设备模式不工作S3 的 USB 设备模式不工作常见原因有USB 口没连到芯片的 USB 引脚有些板子的 USB 口只连了转串口芯片没连到芯片原生 USB。配置不对ESP-IDF 里需要选择正确的 USB 模式比如 TinyUSB 或者内置的 USB Serial/JTAG。驱动问题Windows 上可能需要装特定的 USB 驱动Linux 和 Mac 通常免驱。供电问题USB 设备模式需要主机供电如果板子功耗较大可能供电不足。排查的时候可以先用一个简单的 USB HID 例程测试确认硬件连接没问题再逐步加复杂度。5.5 常见问题速查表现象可能原因排查方法插上电脑没反应USB 线问题、驱动问题换线、装驱动、换 USB 口下载失败端口选错、波特率太高、没进下载模式检查端口、降波特率、手动进下载模式串口乱码波特率不对、晶振配置不对统一波特率、检查晶振设置PSRAM 识别不到配置没开、模式不对、硬件问题检查 menuconfig、确认芯片型号USB 设备不识别USB 口没连到芯片、配置不对查原理图、检查 USB 模式配置Wi-Fi 信号差天线问题、供电不稳检查天线连接、测电源纹波GPIO 不受控引脚被占用、配置错误查引脚定义、检查 GPIO 初始化代码这张表可以放在手边遇到问题先对照排查能省不少时间。6. 从采购到上手的完整核对清单6.1 下单前的核对项在下单之前把以下信息核对一遍避免买错芯片型号ESP32-S3 还是 ESP32-C3确认清楚。PSRAMS3 的话确认有没有 PSRAM多大容量什么接口。Flash确认容量4MB、8MB 还是 16MB。USB 接口几个口什么类型是转串口还是原生 USB。天线板载还是外部接口需不需要额外买天线。GPIO引出了多少有没有你需要的特定功能引脚。尺寸板子尺寸是否符合你的项目需求尤其是要做集成的时候。配件需不需要额外买线、天线、电源模块。把这些信息列成一个清单下单前逐项确认基本不会买错。6.2 收货后的验证项收到货之后按以下步骤验证外观检查看焊接、丝印、天线区域。上电测试插 USB看设备管理器识别情况。读芯片信息用 esptool 读 Flash 大小和 MAC 地址。跑最小程序串口输出加 LED 闪烁。测 PSRAM如果买了带 PSRAM 的版本跑测试代码确认。测 USB如果需要 USB 功能跑 USB 例程确认。测 Wi-Fi扫描周围 Wi-Fi确认信号强度正常。这七步走完板子的基本功能就验证完了。如果有问题尽早找卖家处理别拖到项目中期才发现。6.3 长期使用的注意事项板子验证没问题之后长期使用还有一些注意事项供电稳定ESP32 系列对电源比较敏感尤其是 Wi-Fi 发射瞬间电流较大电源要能提供足够的瞬时电流。建议在电源引脚附近加去耦电容。散热S3 双核 240MHz 跑起来发热不小如果放在密闭壳子里注意散热。可以加散热片或者留通风孔。天线净空板载天线周围要净空不要放金属或者覆铜否则信号会严重衰减。固件备份量产之前把验证好的固件备份一份包括分区表和配置方便后面批量烧录。版本管理如果项目会迭代建议用 Git 管理代码和配置每次改动能追溯。这些经验都是我在实际项目中踩坑总结出来的有些坑踩一次就够了没必要重复踩。6.4 一个可复用的采购核对单模板最后给一个可以直接用的采购核对单模板复制到备忘录里每次买板子的时候填一下项目名称________________ 需求场景________________ 芯片型号ESP32-S3 / ESP32-C3 PSRAM无 / 2MB / 8MB / 其他____ Flash4MB / 8MB / 16MB / 其他____ USB 接口Type-C / Micro-USB数量____ USB 类型转串口 / 原生 / 两者都有 天线板载 / IPEX / SMA GPIO 需求________________ 尺寸限制________________ 配件需求________________ 预算范围________________ 购买渠道________________ 下单日期________________ 收货日期________________ 验证结果________________ 备注________________这个模板看起来简单但能帮你把关键信息都过一遍避免遗漏。尤其是做多个项目的时候不同板子的参数容易记混有个记录会清晰很多。我个人在实际操作中的体会是买开发板这件事花十分钟核对参数能省下后面十个小时的调试时间。尤其是 PSRAM 和 USB 这两个点是最容易出问题的地方。另外手边常备一根确认能传数据的 USB 线和一块面包板调试效率会高很多。最后再分享一个小技巧拿到新板子之后先别急着焊排针用杜邦线临时接一下确认功能正常再焊这样如果板子有问题退换也方便。
阅读完成 · 觉得有帮助?
咨询建站