搜索
bottom↓
回复: 0
打印 上一主题 下一主题

《DNESP32S3使用指南-IDF版_V1.6》第七章 分区表

[复制链接]

出0入234汤圆

跳转到指定楼层
1
发表于 2024-7-15 11:18:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 正点原子 于 2024-7-17 09:49 编辑


1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729




第七章 分区表


       分区表,主要是用来对ESP32外挂的SPI FLASH进行区域划分的一个表格,通过一个表格,可以根据多个不同的功能,将SPI Flash划分为不同的区域,方便开发者存储数据。本章,作者带大家来了解一下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文件格式的分区表。下面展示了基础例程的分区表文件的内容。

图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:标志位。一般不设置该字段。

      四、分区表的类型
      分区表的类型具有四种,如下表所示:

表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. const esp_partition_t *esp_partition_find_first(esp_partition_type_t type,
  2.                                                 esp_partition_subtype_t subtype,
  3.                                                 const char *label)
复制代码
      该函数的形参描述如下表所示:

表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)
复制代码
      该函数的形参描述如下表所示:

表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)
复制代码
      该函数的形参描述如下表所示:


表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)
复制代码
      该函数的形参描述如下表所示:

表7.2.4 esp_partition_range函数函数描述

      该函数返回值如下:
      ESP_OK:读取成功。其他:失败。
      上述列举的函数是访问和操作分区表时较为常用的API函数。若需进一步了解或学习其他剩余的分区表API函数,可查阅esp_partition.h头文件。
      注意:上述函数的使用方法,可打开28_chinese_display实验下的fonts.c文件,我们使用这些函数把GBK字库更新至storage分区表,然后完成了汉字实验。


阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-27 20:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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