ESP32的分区表和固件大小

分区表

https://docs.espressif.com/projects/esp-idf/zh_CN/v5.4.1/esp32/api-guides/partition-tables.html

idf.py partition-table 即可打印分区的信息

可以在menuconfig中配置查看:

Partition Table

默认的配置

custom
自定义

[Error: All app partitions are too small for binary demo.bin size 0x1005c0:
  - Part 'factory' 0/0 @ 0x10000 size 0x100000 (overflow 0x5c0)
  - Part 'ota_0' 0/16 @ 0x110000 size 0x100000 (overflow 0x5c0)
  - Part 'ota_1' 0/17 @ 0x210000 size 0x100000 (overflow 0x5c0)
ninja: build stopped: subcommand failed.](Error: All app partitions are too small for binary demo.bin size 0x1005c0:
  - Part 'factory' 0/0 @ 0x10000 size 0x100000 (overflow 0x5c0)
  - Part 'ota_0' 0/16 @ 0x110000 size 0x100000 (overflow 0x5c0)
  - Part 'ota_1' 0/17 @ 0x210000 size 0x100000 (overflow 0x5c0)
ninja: build stopped: subcommand failed.)

大小超了,默认的分区大小是4M,如果你买了8MB更高,请使用自定义custom,改大。
名字需符合,放置在main文件外面

#Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,16K,
otadata,data,ota,0xd000,8K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,2M,
ota_0,app,ota_0,0x210000,2M,
ota_1,app,ota_1,0x410000,2M,

固件大小

https://docs.espressif.com/projects/esp-idf/zh_CN/v5.4.1/esp32/api-guides/tools/idf-size.html

https://docs.espressif.com/projects/esp-idf/zh_CN/v5.4.1/esp32/api-guides/memory-types.html

                             Memory Type Usage Summary
┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Memory Type/Section   ┃ Used [bytes] ┃ Used [%] ┃ Remain [bytes] ┃ Total [bytes] ┃
┡━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ Flash Code            │       723978 │    21.66 │        2618326 │       3342304 │
│    .text              │       723978 │    21.66 │                │               │
│ Flash Data            │       212192 │     5.06 │        3982080 │       4194272 │
│    .rodata            │       211936 │     5.05 │                │               │
│    .appdesc           │          256 │     0.01 │                │               │
│ IRAM                  │        97243 │    74.19 │          33829 │        131072 │
│    .text              │        96215 │    73.41 │                │               │
│    .vectors           │         1027 │     0.78 │                │               │
│ DRAM                  │        36760 │    20.34 │         143976 │        180736 │
│    .bss               │        20272 │    11.22 │                │               │
│    .data              │        16488 │     9.12 │                │               │
│ RTC FAST              │           28 │     0.34 │           8164 │          8192 │
│    .force_fast        │           28 │     0.34 │                │               │
│ RTC SLOW              │           24 │     0.29 │           8168 │          8192 │
│    .rtc_slow_reserved │           24 │     0.29 │                │               │
└───────────────────────┴──────────────┴──────────┴────────────────┴───────────────┘
Total image size: 1049928 bytes (.bin may be padded larger)

购买:集成520kB SRAM ESP32 上有 520 KB 的可用 SRAM(320 KB 的 DRAM 和 200 KB 的 IRAM)。 但是,由于技术限制,用于静态分配的 DRAM 最多可为 160 KB。 剩余的 160 KB(DRAM 总共 320 KB)只能在运行时分配为堆。

448kB ROM

16kB SRAM in RTC 对应 RTC FAST,SLOW

### ESP32 分区表配置与修改 对于ESP32设备而言,分区表用于定义Flash存储器中的不同区域及其用途。这些分区可以包含应用程序固件、参数存储空间(NVS)、文件系统等。 #### Arduino IDE 中的分区表设置 在Arduino环境中开发ESP32项目时,可以通过编辑`boards.txt`文件来指定默认使用的分区方案。该文件位于路径 `C:\Users\<用户名>\AppData\Local\Arduino15\packages\esp32\hardware\esp32\版本号\platform.txt` 下方提到的具体位置[^1]。然而,在实际操作过程中通常不需要手动更改此文件;而是通过IDE界面选择合适的预设选项即可满足大多数需求。 如果确实需要自定义,则可以在项目的根目录创建名为`partitions.csv`的新文件,并按照特定格式填写所需条目以覆盖默认设定。例如: ```csv # Name, Type, SubType, Offset, Size, Flags nvs,data,nvs, 0x9000, 0x6000, otadata,data,ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x180000, app1, app, ota_1, 0x190000, 0x180000, spiffs,data, spiffs,0x310000, 0x1F0000, ``` 上述表格展示了如何分配各个部分的空间大小以及它们之间的相对偏移量。 #### PlatformIO 环境下的处理方式 当采用PlatformIO作为集成开发环境时,同样支持灵活调整分区布局。只需于工程所在文件夹内新建一个`.csv`结尾的文本档——即所谓的“partition table”,并参照官方指南编写相应内容][^[^23]。下面给出了一种常见的多应用OTA更新友好型结构实例: ```csv # Name, Type, SubType,Offset,Size,Flags factory, app, factory,0x10000,1M, ota_0, app, ota_0, 0xd0000,1M, ota_1, app, ota_1, 0x190000,1M, storage, data, nvs, 0x250000,24K, fatfs, data, fat, 0x260000,768K, ``` 这里特别注意的是,“Offset”列代表各段数据相对于整个flash起始地址的位置;而“Size”则决定了每一块可利用的最大尺寸。“Flags”字段可用于标记某些特殊属性,比如加密标志位等。 #### 使用命令行工具管理分区表 除了图形化界面外,Esp IDF还提供了专门用来生成解析二进制形式分区列表的实用程序——`parttool.py`。借助它能够轻松完成诸如读取现有配置、写入新设计或是提取单个组件等功能。详情参见链接指向的相关手册页面获取更多信息[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值