15-partition table (分区表)

ESP32-S3的分区表

什么是分区表?🤔

ESP32-S3的分区表是用来确定在ESP32-S3的闪存中数据和应用程序的布局。每个ESP32-S3的闪存可以包含多个应用程序,以及多种不同类型的数据(例如校准数据、文件系统数据、参数存储数据等)。因此,我们在闪存的默认偏移地址0x8000处烧写一张分区表。

分区表的结构

分区表的长度为0xC00字节,最多可以保存95条分区表条目。分区表数据后还保存着该表的MD5校验和,用于验证分区表的完整性。因此,分区表占据了一个整个的闪存扇区,大小为0x1000(4KB)。结果是,任何在其后的分区必须至少位于(默认偏移量)+0x1000的位置

分区表中的每个条目都有一个名称(标签)、类型(应用、数据或其他内容)、子类型和加载分区的闪存中的偏移量。
在这里插入图片描述

如何使用分区表?

在使用分区表时,最简单的方法就是打开项目配置菜单(idf.py menuconfig),搜索partition在partition Table 选择栏下选择一个预定义的分区表。
在这里插入图片描述

这些预定义的分区表在我们idf安装的以下👇路径上可以找到

D:\Espressif\frameworks\esp-idf-v5.2.1\components\partition_table

在这里插入图片描述

例如,以下是“Single factory app, no OTA”选项的分区表信息摘要:

# ESP-IDF Partition Table
# Name,   Type, SubType, Offset,  Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 1M,

在flash的0x10000 (64 KB)偏移地址处存放一个标记为“factory”的二进制应用程序,且启动加载器将默认加载这个应用程序。分区表中还定义了两个数据区域,分别用于存储NVS库专用分区和PHY初始化数据。

创建自定义表

如果在 menuconfig 中选择“自定义分区表 CSV”,我们一般选用这个👇CSV文件作为我们的自定义分区表,复制将这个文件粘贴到项目的根目录下。
在这里插入图片描述
在这里插入图片描述

✨我们来详细看一下当前分区表中的内容都有什么
在这里插入图片描述

分区名称类型子类型偏移量大小描述
nvsdatanvs留空(具体地址值未指定)0x6000非易失性存储区,用于保存设备重启后仍需保留的配置数据,如Wi-Fi凭据等
phy_initdataphy留空(具体地址值未指定)0x1000物理层初始化数据区,通常存放与硬件初始化相关的固件或配置信息
factoryappfactory留空(具体地址值未指定)1M (1MiB)出厂固件或用户可升级的应用程序固件存储区,用于存储设备的主要应用程序代码

可见我还有很多的Flash没有使用(毕竟我的核心板有16MB的Flash😙)

✨接下来我们对分区进行修改

1️⃣添加一个分区,起名myapp 2️⃣修改分区表文件名为我们自定义的名称
在这里插入图片描述

3️⃣在 menuconfig 中修改为“自定义分区表 CSV”,并将CSV文件名改成我们自己创建的
在这里插入图片描述
在这里插入图片描述

之后我们在上传程序会按照分区表的内容对ESP32进行分区

✨在编写程序时只需要稍微修改nvs_flash_init()nvs_open()这两个函数即可如下👇,其他操作和操作nvs相同

    char* partition_name="myapp";   //我们添加的分区名
    nvs_flash_init_partition(partition_name);   //初始化分区

    char* name_space="学习资料";
    nvs_handle_t learning_handle;   
    nvs_open_from_partition(partition_name,name_space,NVS_READWRITE,&learning_handle); //打开

结论

参考资料:
ESP-IDF Partition Tables

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值