[解决方法]platformio没有ESP32-S3-N16R8的开发板模型
一、背景
platformio现有的板子库里面没有ESP32-S3-N16R8(8MB PSRAM + 16MB FLASH)的开发板模型,直接强行套用,要么就是解锁不了8MB PSRAM,要么就下载后运行不起来。但是Arduino可以正常解锁。
二、简单解决办法
先选用esp32-s3-devkitc-1(8MB QD,NoFLASH)作为开发板模型,在它的基础上做额外的修改:
![[解决方法]platformio没有ESP32-S3-N16R8的开发板模型](https://img.niaorui.com/blogimg/20251109/c4c3d09164e14b229b559b67c9655532.jpg)
具体修改配置已经整理到platformio.ini,如下:
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
; 指定为16MB的FLASH分区表
board_build.arduino.partitions = default_16MB.csv
; 指定FLASH和PSRAM的运行模式
board_build.arduino.memory_type = qio_opi
; 预定义宏,启用PSRAM
build_flags = -DBOARD_HAS_PSRAM
; 指定FLASH容量为16MB
board_upload.flash_size = 16MB
编译、下载和运行即可。
测试
在main.cpp 写入setup()中的4行代码,编译后上传到esp32
Serial.begin(115200);
Serial.printf("Deafult free size: %d
", heap_caps_get_free_size(MALLOC_CAP_DEFAULT));
Serial.printf("PSRAM free size: %d
", heap_caps_get_free_size(MALLOC_CAP_SPIRAM));
Serial.printf("Flash size: %d bytes
", ESP.getFlashChipSize());
终端结果:
[2025-10-28 08:49:33.177]# RECV ASCII>
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3808,len:0x4bc
load:0x403c9700,len:0xbd8
load:0x403cc700,len:0x2a0c
entry 0x403c98d0
[2025-10-28 08:49:33.256]# RECV ASCII>
Deafult free size: 8753835
PSRAM free size: 8386035
Flash size: 16777216 bytes
说明如下:
Deafult free size: 8753835
- 可能是拼写错误,正确应为 “Default free size”。
- 表明 系统默认可用内存(可能是堆内存)为 8,753,835 字节,约 8.35 MB。
PSRAM free size: 8386035
- 表明 PSRAM(外部伪静态RAM)可用空间为 8,386,035 字节,约 8.00 MB。
- 说明系统使用了 PSRAM 扩展内存,并且当前还有约 8MB 未使用。
Flash size: 16777216 bytes
- 表明 Flash 总容量为 16,777,216 字节,即 16 MB。
- 这是系统内置的闪存容量,用于存储固件、文件系统等。
三、扩展内容:解决问题的过程(问题解决方法看第二点即可)
3.1 选开发板模型
没找到ESP32-S3(8MB PSRAM + 16MB FLASH)的开发板模型,就随意ESP32-S3的其他模型,有几个能正常运行,但是没有解锁PSRAM;
好不容易发现几个标了2MB PSRAM字样的开发板模型,但是运行不起来;网上搜才知道2MB PSRAM运行模式是Quad SPI,而8MB PSRAM的运行模式是Octal SPI,两个完全不一样,肯定会运行失败;
![[解决方法]platformio没有ESP32-S3-N16R8的开发板模型](https://img.niaorui.com/blogimg/20251109/5ecd464432764aa0bb781846195b61e9.jpg)
3.2 查找配置
官方的platformio.ini指导说明里面没有说明怎么选PSRAM运行模式,只能看看那些标了2MB PSRAM字样的开发板模型是怎么做;全局搜索跟开发板名称一样的文件,看是不是有什么配置文件来控制这些参数:
![[解决方法]platformio没有ESP32-S3-N16R8的开发板模型](https://img.niaorui.com/blogimg/20251109/55e65d22fdbc4454b5e211a4d06ddc76.jpg)
打开所在的文件夹,发现全是json文件,大致率就是所有开发板模型的配置文件了。
3.3 修改配置
依次查找带PSRAM的配置json,发现adafruit_feather_esp32s3.json是2MB PSRAM的开发板模型,额外不同的是它多定义了”BOARD_HAS_PSRAM”的宏,直接复制到自己的工程修改platformio.ini,发现依旧不能解锁PSRAM;
![[解决方法]platformio没有ESP32-S3-N16R8的开发板模型](https://img.niaorui.com/blogimg/20251109/140dc4af4d2944139aaf5759e691fce2.jpg)
接着继续看其他的json配置,发现adafruit_feather_esp32s3_nopsram.json的”memory_type”: “qio_qspi”选项似乎跟PSRAM有关;
打开Arduino,工具菜单栏里面PSRAM有三项配置,分别是:
![[解决方法]platformio没有ESP32-S3-N16R8的开发板模型](https://img.niaorui.com/blogimg/20251109/a76cce110176491aac73a3d50fffc306.jpg)
尝试修改自己工程对应的json文件,”memory_type”: “qio_qspi”改成”memory_type”: “qio_opi”,8MB PSRAM解锁成功!
最后发现platformio.ini可以直接配置json文件中的某些字段,经过调整,ESP32-S3(8MB PSRAM + 16MB FLASH)只需要选择board = esp32-s3-devkitc-1板子,然后修改board_build.arduino.memory_type = qio_opi,再把FLASH容量改好,基本上就没问题了,如下(和标题二提供的内容一样):
[env:esp32s3]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
; 指定为16MB的FLASH分区表
board_build.arduino.partitions = default_16MB.csv
; 指定FLASH和PSRAM的运行模式
board_build.arduino.memory_type = qio_opi
; 预定义宏,启用PSRAM
build_flags = -DBOARD_HAS_PSRAM
; 指定FLASH容量为16MB
board_upload.flash_size = 16MB
参考文章
[1] ESP32-S3-WROOM-1-N16R8 配置PSRAM
[2] 【ESP32 S3开发】在Arduino IDE中使用PSRAM
[3] VSCode+Arduino+Platformio 如何使用ESP32上的PSRAM
[4] 入门ESP32,开始学习micropython


