PlatformIO 新手指南:为 ESP32-S3 N16R8 开发板配置 16MB Flash 与 8MB PSRAM

一、问题背景

当你使用 ESP32-S3 N16R8(16MB Flash + 8MB PSRAM)开发时,会发现 PlatformIO 的 boards 列表中没有完全匹配的型号。默认选择 esp32-s3-devkitc-1 虽能编译,但系统仍按 4MB Flash 分配资源,导致大量存储空间无法使用。

二、解决方案:自定义配置三步走

步骤 1:配置 platformio.ini
1
2
3
4
5
6
7
8
9
10
11
12
[env:esp32s3-n16r8]
platform = espressif32
board = esp32-s3-devkitc-1 ; 使用最接近的板子定义
framework = arduino

; 关键:指定 16MB Flash
board_upload.flash_size = 16MB

; 启用 8MB PSRAM(OPI 模式,高速)
board_build.arduino.memory_type = qio_opi
build_flags =
-DBOARD_HAS_PSRAM
步骤 2:验证配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void setup() {

    Serial.begin(115200);
    Serial.println("=== ESP32 设备信息 ===");

    // 芯片型号
    esp_chip_info_t chip_info;

    esp_chip_info(&chip_info);

    Serial.printf("芯片型号: ESP32");

    if (chip_info.model == CHIP_ESP32S3) Serial.print("-S3");

    Serial.println();
   
    // Flash 大小
    size_t flash_size = 0;

    esp_flash_get_size(NULL, &flash_size);

    Serial.printf("Flash 容量: %u MB\n", flash_size / (1024 * 1024));



    // PSRAM
    if (psramFound()) {
        Serial.printf("PSRAM 容量: %u MB\n", ESP.getPsramSize() / (1024 * 1024));
    } else {
        Serial.println("PSRAM: 未检测到");
    }

    // SDK 版本
    Serial.printf("ESP-IDF 版本: %s\n", esp_get_idf_version());

    // MAC 地址
    uint8_t mac[6];

    esp_read_mac(mac, ESP_MAC_WIFI_STA);

    Serial.printf("MAC 地址: %02X:%02X:%02X:%02X:%02X:%02X\n",

                    mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

}

三、常见问题

  • Q:为什么不用 OTA 分区?
    A:单应用模式可为 App 节省 4–8MB 空间,适合资源密集型项目(如摄像头、AI 推理)。

  • Q:文件系统能更大吗?
    A:可以!若 App ≤ 8MB,则 storage 可达 7.6MB(参考前文计算)。