如何为 arduino-esp32 编写自定义 CSV 分区表划分 OTA、NVS 与文件系统空间? 📅 发布时间:2026/9/14 6:39:39 👁 浏览次数: 如何为 arduino-esp32 编写自定义 CSV 分区表划分 OTA、NVS 与文件系统空间【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32当你用 arduino-esp32 在 Arduino IDE 中开发 ESP32 项目时默认的分区表往往给不了你想要的大小组合——比如需要两个 OTA 应用分区、一个足够大的 NVS 存 Wi-Fi 凭据和校准数据再留一块文件区存数据。本文的任务就是自己写一个partitions.csv把 flash 按 OTA、NVS、文件系统三部分划分好并让构建系统自动采用它。前提是你已在 Arduino IDE 中安装 ESP32 核心arduino-esp32并清楚板上 flash 的实际容量。分区表的格式、各列含义和完整约束见 分区表教程可用方案见 tools/partitions 目录和 Arduino IDE 的Tools - Partition Scheme菜单。准备条件先选对 Flash Size工具菜单文档对Tools - Flash Size的说明可选 2 MB / 4 MB / 8 MB / 16 MB应按板子上实际使用的 flash 型号选择“If you choose the wrong size, you may have issues when selecting the partition scheme”选错容量会导致选择分区方案时出问题。写自定义分区表前先确认两件事IDE 中 Flash Size 与板载 flash 一致——你自定义的分区总和不能超过该容量目标分区布局是否已有现成方案。tools/partitions下已有一批现成 CSV如no_ota.csv、default_8MB.csv、huge_app.csvboards.txt 中的menu.PartitionScheme.*条目把它们挂进了 IDE 菜单。只有现成方案满足不了你的大小时才需要自定义。同时注意 工具菜单文档 的警告“If you select the wrong partition, the system will crash”——分区表写错越界、未对齐的后果是系统崩溃所以下面的对齐约束必须遵守。理解 CSV 各列及其约束自定义分区表是一个 CSV 文件表头固定为# ESP-IDF Partition Table # Name, Type, SubType, Offset, Size, Flags各列的约束直接决定表能否生效列约束来自分区表教程Name必须唯一最长 16 字符不含特殊字符Type只能填app存应用或data存数据SubType定义app/data分区的具体用途见下表Offset必须是 4 kB0x1000的倍数app分区必须按 64 kB0x10000对齐。留空则由上一分区末尾自动推算含必要对齐。第一个分区固定填0x9000第一个应用分区固定填0x10000Size支持十进制、十六进制0x前缀或 K/M 单位前缀如4096 4K 0x1000Flags用于 flash 加密功能标记分区是否加密常用SubType的硬性要求data类型ota存 OTA 信息只在用 OTA 时才需要。尺寸必须固定为 8 kB0x2000。nvs存 Wi-Fi 数据、PHY 校准等通用数据。建议在自定义表中至少加一个名为nvs的分区尺寸至少 12 kB0x3000推荐范围 12 kB 到 64 kB。更大的数据不要用 NVS用 FAT/SPIFFS 文件系统。fatFAT 文件系统适合较大的、频繁更新的数据可配合 wear leveling 和加密。spiffsSPIFFS 文件系统同样适合大文件支持 wear leveling 和一致性检查不支持 flash 加密。coredump存 core dump 用于分析 crash/panic推荐 64 kB0x10000需在项目配置中启用且数据目的设为 flash。nvs_keysNVS 加密时存密钥固定 4 kB0x1000。app类型factory默认应用。没有 OTA 分区或 OTA 分区为空时bootloader 默认引导它。ota_0~ota_15OTA 至少需要两个通常ota_0和ota_1加一个ota数据分区最多可定义 16 个。test工厂测试程序。一个容易踩的取舍如果走 OTAota_0可以充当默认应用factory可以从表中删掉以省空间教程原话。反过来不用 OTA 时只需一个factory分区otadata也无需添加。主路径在 sketch 同目录放置 partitions.csv这是最短可行路径。教程的说明To create your own partition table, you can create thepartitions.csvfilein the same folder you created your sketch. The build system will automatically pick the partition table file and use it instead of the predefined ones.即把文件命名为partitions.csv放在与.ino同一个 sketch 文件夹里构建系统会自动拾取并替代预定义分区表。教程给出的自定义示例可作起点按你的 flash 容量调整Size# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 36K, 20K, otadata, data, ota, 56K, 8K, app0, app, ota_0, 64K, 2M, app1, app, ota_1, , 2M, spiffs, data, spiffs, , 8M,文档说明该布局用于 16 MB flash约占 12 MB第一个应用分区之后的Offset留空即自动计算单位用 K/M。如果目标是 8 MB flash教程给出的“8 MB with OTA and Storage”示例是# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 36K, 20K, otadata, data, ota, 56K, 8K, app0, app, ota_0, 64K, 2M, app1, app, ota_1, , 2M, spiffs, data, spiffs, , 3M,对照检查你写好的表第一个分区Offset是否为0x9000或等值如36K第一个 app 分区是否为0x10000或64Kotadata尺寸是否恰好 8 kBnvs是否 ≥ 12 kB 且不超过 64 kB 的推荐范围更大需求请改用文件系统分区所有Offset是否 4 kB 对齐所有 app 分区是否 64 kB 对齐全部分区尺寸之和是否 ≤ 板载 flash 容量。结果验证教程对“如何生效”的说明只有一句构建系统自动拾取 sketch 同目录的partitions.csv并“use it instead of the predefined ones”。因此验证路径是编译上传 sketch。构建未报分区相关错误、能正常生成镜像说明你的表被采用IDE 中此时Tools - Partition Scheme选哪个预置方案都无关紧要sketch 目录下的文件优先。若分区表本身写错失败现象参考 工具菜单文档 给出的两条Flash Size 选错会在选择分区方案时出问题分区表选错会导致系统崩溃。崩溃类问题应回到上面的对齐与容量检查逐条核对你写的表。替代路径把自定义表注册进 boards.txt 或 variants如果同一个自定义布局要跨多个 sketch 复用教程给出两种替代方式均需要修改 core 安装目录下的文件不是修改本仓库在 core 的tools/partitions目录新增一个 CSV并编辑boards.txt增加菜单项。对照本仓库 boards.txt 中现有条目的写法格式为esp32.menu.PartitionScheme.minimalMinimal (1.3MB APP/700KB SPIFFS) esp32.menu.PartitionScheme.minimal.build.partitionsminimal esp32.menu.PartitionScheme.minimal.upload.maximum_size1415579其中.build.partitions后的值是tools/partitions下对应 CSV 的文件名不带扩展名upload.maximum_size与你的应用分区尺寸匹配。把 CSV 放进variants/你的板子目录/编辑boards.txt时注意此路径必须用.build.custom_partitions而不是标准的.build.partitions.build.variant的值是 variants 下该目录名。教程以 ESP32-S3 Dev Module 为例给出的写法esp32s3.build.variantcustom_esp32s3 esp32s3.menu.PartitionScheme.huge_appCustom Huge APP (3MB No OTA/1MB SPIFFS) esp32s3.menu.PartitionScheme.huge_app.build.custom_partitionscustom_huge_app esp32s3.menu.PartitionScheme.huge_app.upload.maximum_size3145728CSV 文件按教程说明放在/variants/custom_esp32s3/文件夹内。限制与参考OTA 场景下至少两个ota_x加一个固定 8 kB 的ota数据分区不用 OTA 时otadata无需添加。spiffs分区不支持 flash 加密需要加密的数据放支持加密的 FAT 或 NVS。coredump分区要生效还需在项目配置里启用该功能并把数据目的地设为 flash仅声明分区不够。现成方案可对照 default_8MB.csv、no_ota.csv、minimal.csv 的写法注意实际文件里的spiffs尺寸与教程正文示例略有差异实际文件把空间留给了coredump分区以仓库文件内容为准。完整字段定义见 docs/en/tutorials/partition_table.rst。【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考