OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 38|回复: 0

《ESP32-S3使用指南—IDF版 V1.6》第七章 分区表

[复制链接]

1139

主题

1151

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4890
金钱
4890
注册时间
2019-5-8
在线时间
1247 小时
发表于 3 天前 | 显示全部楼层 |阅读模式
第七章 分区表
1)实验平台:正点原子DNESP32S3开发板

2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6


4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子DNESP32S3开发板技术交流群:132780729

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

分区表,主要是用来对ESP32外挂的SPI FLASH进行区域划分的一个表格,通过一个表格,可以根据多个不同的功能,将SPIFlash划分为不同的区域,方便开发者存储数据。本章,作者带大家来了解一下ESP32分区表的妙用。
本章将分为如下几个小节:
7.1 分区表概述
7.2 分区表API函数

7.1 分区表概述
一、分区表简介
ESP32分区表在ESP32的flash存储管理中扮演着至关重要的角色。其主要意义体现在以下几个方面:
1,存储空间优化:通过将flash划分为不同的区域,每个区域根据其功能进行定义,可以更有效地利用存储空间。开发者可以根据实际需求为不同的应用或数据分配适当的存储空间,确保资源得到最大化利用。
2,数据管理和维护:每个分区都有其特定的作用,比如存储应用程序、文件系统数据、校准数据等。这种分区的设置使得数据的管理和维护变得更加方便。当需要对特定数据进行更新或修复时,只需关注相关的分区,而无需对整个flash进行操作。
3,应用程序更新和回滚:ESP32支持在线升级(OTA)功能,这意味着应用程序可以在运行时进行更新。通过分区表,可以设置一个或多个用于OTA的分区,使得新版本的应用程序可以安全地下载并存储在flash中,然后在需要时切换到新版本。同时,如果新版本存在问题,还可以轻松回滚到旧版本,确保系统的稳定性。
4,灵活性:分区表可以根据用户的需求进行自定义。这意味着开发者可以根据其项目的特定需求来定义分区的数量、大小和功能。这种灵活性使得ESP32能够适应各种不同的应用场景。
在ESP32中,分区表固定长度为0xc000字节,也就是说一个分区表只能创建95条子分区(条目),并且MD5校验位和附加在分区表之后,用于在运行时验证分区表的完整性。

二、 分区表格式
ESP32的分区表主要有两种格式,一种是.csv格式,它方便开发人员进行更改和设置各个子分区的偏移与空间大小;另一种则是用于烧录设备的.bin文件格式。在系统编译时,系统会将.csv文件转化为.bin文件格式的分区表。下面展示了基础例程的分区表文件的内容。                                 
image001.png
图7.1.1 基础例程的分区表文件
上图中展示了ESP32的多个子分区及其功能。其中,nvs子分区是专为开发者设计的非易失性存储(NVS)设备区域;phy_init子分区用于存放PHY初始化数据,确保每个设备都能单独配置其PHY;factory子分区则专门用于存储应用程序区域;vfs子分区作为虚拟文件系统的存储区域;而storage子分区则是自定义的SPIFFS文件系统区域。这些子分区共同构成了ESP32的分区结构,满足了不同功能的需求。
三、分区表条目结构
从上图中可以看到,每一个子分区都由以下几个部分组成:
1,  name:子分区名称。该字段对ESP32-S3 并不是特别重要。
2,  Type:子分区的存储类型。设置子分区的存储格式,app (0x00) 和 data (0x01)。
3,  SubType:进一步描述或分类分区表的条目。如果这个子分区Type为app,则SubType只能设置factory、ota_0、ota_15和test;如果这个子分区Type为data,则SubType只能设置ota、phy、nvs和nvs_keys。
4,  Offset:偏移地址。编译地址必须是4KB的倍数
5,  Size:大小。子分区的大小
6,  Flags:标志位。一般不设置该字段。

四、分区表的类型
分区表的类型具有四种,如下表所示:
QQ截图20250218171033.png
表7.1.1 分区表的类型
根据上述内容,如果不打算使用OTA升级功能,可以根据项目的大小选择第一种或第二种分区类型。而想要使用OTA升级功能时,应选择第三种分区类型。作者推荐采用最后一种分区类型,因为它允许自定义分区表,能更精确地满足项目工程的需求,从而实现完美的契合。
从上述内容可以了解到,分区表是对flash闪存进行区域划分,以便根据不同的功能需求将flash划分为不同的区域。这些区域可以包括应用、数据等不同类型,例如应用可以进一步细分为Factory程序、OTA程序等,数据则可以包括校准数据、文件系统数据、参数存储数据等。
每个分区都有其特定的作用,开发者可以根据自己的需求进行配置以及修改。这样的设计使得开发者能够更方便地管理和使用flash空间,同时也有助于提高系统的稳定性和安全性。

7.2 分区表API函数
esp_partition 组件是 ESP-IDF中用于管理 ESP32 及其系列芯片上 flash 分区的一个关键组件。它提供了一组高层次的 API 函数,允许开发者方便地访问和操作定义在分区表中的各个分区。这些高层次的 API 函数为开发者提供了简洁和易用的接口,以进行诸如读取、写入、擦除分区内容等操作。这些函数可在components/esp_partition/include/esp_partition.h路径下找到这些分区表API函数。
1,esp_partition_find函数
该函数查找子分区,该函数原型如下所示:
  1. constesp_partition_t *esp_partition_find_first(esp_partition_type_t type,
  2.                                                 esp_partition_subtype_t subtype,
  3.                                                 const char *label)
复制代码
该函数的形参描述如下表所示:
QQ截图20250218171051.png
表7.2.1 esp_partition_find函数函数描述
该函数返回值如下:
NULL:未找到子分区。esp_partition_t指针:返回子分区。

2,esp_partition_read函数
该函数用于读取子分区的某个地址的数据,该函数原型如下所示:
  1. esp_err_t esp_partition_read( const esp_partition_t* partition,
  2.                               size_t src_offset,
  3. void* dst, size_t size)
复制代码
该函数的形参描述如下表所示:
QQ截图20250218171102.png
表7.2.2 esp_partition_read函数函数描述
该函数返回值如下:
ESP_OK:读取成功。其他:失败。

3,esp_partition_write函数
该函数用于写入子分区的某个地址的数据,该函数原型如下所示:
  1. esp_err_t esp_partition_write( const esp_partition_t* partition,
  2.                                size_t dst_offset,
  3. void* src, size_t size)
复制代码
该函数的形参描述如下表所示:
QQ截图20250218171113.png
表7.2.3 esp_partition_write函数函数描述
该函数返回值如下:
ESP_OK:读取成功。其他:失败。

4,esp_partition_range函数
该函数用于擦除子分区的某个地址的数据,该函数原型如下所示:
  1. esp_err_t esp_partition_erase_range(const esp_partition_t *partition,
  2.                                     size_t offset, size_t size)
复制代码
该函数的形参描述如下表所示:
QQ截图20250218171121.png
表7.2.4 esp_partition_range函数函数描述
该函数返回值如下:
ESP_OK:读取成功。其他:失败。
上述列举的函数是访问和操作分区表时较为常用的API函数。若需进一步了解或学习其他剩余的分区表API函数,可查阅esp_partition.h头文件。
注意:上述函数的使用方法,可打开28_chinese_display实验下的fonts.c文件,我们使用这些函数把GBK字库更新至storage分区表,然后完成了汉字实验。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-21 03:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表