当你编译程序,发现 app partition is too small for binary 错误的时候,就涉及到 ESP32 分区表的内容了。

一、基本概念

在了解分区之前,先了解一下以下概率,便于 ESPe32 分区的理解

  1. 缓存(cache)

    缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。而缓存分为:一级缓存、二级缓存、三级缓存,原理如下图所示:



    从图中可以看出,为了减少争用Cache所造成的冲突,提高了处理器效能,将一级缓存分为:数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache),想要了解更多信息,参考缓存

  2. 随机存取存储器(RAM)

    随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。根据存储单元的工作原理不同, RAM分为静态SRAM和动态DRAM

    • SRAM

      优点:速度快、使用简单、不需刷新、静态功耗极低;常用作Cache。 [8]

      缺点:元件数多、集成度低、运行功耗大。
    • DRAM

      优点: 集成度远高于SRAM、功耗低,价格也低。 [8]

      缺点:因需刷新而使外围电路复杂;刷新也使存取速度较SRAM慢,所以在计算机中,DRAM常用于作主存储器。

    了解更多,请参考随机存取存储器

  3. 只读存储器(ROM)

    只读存储器(Read-Only Memory,ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。

    ROM有多种类型,且每种只读存储器都有各自的特性和适用范围。从其制造工艺和功能上分,ROM有五种类型,即掩膜编程的只读存储器MROM(Mask-programmedROM)、可编程的只读存储器PROM(Programmable ROM)、可擦除可编程的只读存储器EPROM(Erasable Programmable ROM)、可电擦除可编程的只读存储器 EEPROM(Elecrically Erasable Programmable ROM)和快擦除读写存储器(Flash Memory)。

    了解更多,请参考只读存储器

  4. 闪存(Flash)

    flash存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。

  5. 电磁频率(RadioFrequency)

    RF 是Radio Frequency的缩写,表示可以辐射到空间的电磁频率,频率范围从300KHz~30GHz之间。

  6. 实时时钟(RTC)

    实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。

  7. 安全系统(Security)

    主要是各种安全算法,确保系统和数据的安全

了解完成后上面的基本概念后,我们在看一下ESP32 的架构就很容易了,如下图所示:

二、芯片配置

分区配置需要根据自己芯片的 Flash 大小进行配置的,所以在配置之前首先得了解自己芯片的信息,如下图所示:

三、选择分区方式

  1. 设置 flash 大小,并选择分区方式



    注意:这个可以主要可以分为两种配置方式,除自定义(Custom partition table CSV)分区方式外,其他的都是预定义分区,主要分析自定义分区方式

  2. 设置自定义分区

  3. 在工程文件中创建 partitions.csv 文件,如下图所示:

  4. partitions.csv 文件中添加自定义分区内容

    # ESP-IDF Partition Table
    # Name, Type, SubType, Offset, Size, Flags
    nvs, data, nvs, 0x9000, 0x4000,
    otadata, data, ota, 0xd000, 0x2000,
    phy_init, data, phy, 0xf000, 0x1000,
    factory, app, factory, 0x10000, 4M,

三、分区类容

# Name,   Type, SubType,  Offset,   Size,  Flags
nvs, data, nvs, 0x9000, 0x4000
otadata, data, ota, 0xd000, 0x2000
phy_init, data, phy, 0xf000, 0x1000
factory, app, factory, 0x10000, 1M
ota_0, app, ota_0, , 1M
ota_1, app, ota_1, , 1M
nvs_key, data, nvs_keys, , 0x1000
  • 字段之间的空格会被忽略,任何以 # 开头的行(注释)也会被忽略。
  • CSV 文件中的每个非注释行均为一个分区定义。
  • 每个分区的 Offset 字段可以为空,gen_esp32part.py 工具会从分区表位置的后面开始自动计算并填充该分区的偏移

    地址,同时确保每个分区的偏移地址正确对齐。

Name字段

Name 字段可以是任何有意义的名称,但不能超过 16 个字符(之后的内容将被截断)。该字段对 ESP32-S3 并不是特别重要。

Type 字段

Type 字段可以指定为 app (0x00) 或者 data (0x01),也可以直接使用数字 0-254(或者十六进制 0x00-0xFE)。注意,0x00-0x3F 不得使用(预留给 esp-idf 的核心功能)。

注意:启动加载器将忽略 app (0x00) 和 data (0x01) 以外的其他分区类型。

SubType 字段

  • 当 Type 定义为 app 时,SubType 字段可以指定为 factory (0x00)、 ota_0 (0x10) … ota_15 (0x1F) 或者 test (0x20)。
  • 当 Type 定义为 data 时,SubType 字段可以指定为 ota (0x00)、phy (0x01)、nvs (0x02)、nvs_keys (0x04) 或者其他组件特定的子类型

Offset 字段

Offset(偏移地址) 为空时,则会紧跟着前一个分区之后开始;若为首个分区,则将紧跟着分区表开始。

注意:app 分区的偏移地址必须要与 0x10000 (64K) 对齐

Size 字段

分区的大小

Flags字段

当前仅支持 encrypted 标记。如果 Flags 字段设置为 encrypted,且已启用 Flash 加密 功能,则该分区将会被加密。

详细见 ESP-IDF 编程指南

配置完成后,在编译过程中会打印 分区配置表的信息,如下所示:

*******************************************************************************
# ESP-IDF Partition Table
# 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,4M,
*******************************************************************************

参考文献

缓存:https://baike.baidu.com/item/缓存/100710?fr=aladdin

随机存取存储器:https://baike.baidu.com/item/随机存取存储器/4099402

只读存储器:https://baike.baidu.com/item/只读存储器/2399075

RF:https://baike.baidu.com/item/RF/3756791

实时时钟:https://baike.baidu.com/item/实时时钟/5563907

ESP32 分区表的更多相关文章

  1. 关于esp32的系统初始化启动过程及设计学习方法

    对于esp32,其开发程序中有且只能有一个app_main函数,该函数是用户程序的入口,这在没有调用FreeRTOS的系统中相当于函数main,但其实在app_main之前,系统还有一段初始化的过程, ...

  2. 重新学习ESP32(零)之环境搭建——转载——windows平台

    原文来自:https://www.makingfun.xyz/2018/09/18/esp32-hello-world/ 前言 前几天看到乐鑫的公众号推送了一篇文章,说是ESP8266最新的SDK风格 ...

  3. ESP32构建系统 (传统 GNU Make)

    概述: 一个 ESP-IDF 项目可以看作是多个不同组件的集合,ESP-IDF 可以显式地指定和配置每个组件.在构建项目的时候,构建系统会前往 ESP-IDF 目录.项目目录和用户自定义目录(可选)中 ...

  4. ESP32构建系统(CMake版)

    ESP32 芯片是一款 2.4 GHz Wi-Fi 和蓝牙双模芯片,内置 1 或 2 个 32 位处理器,运算能力最高可达 600 DMIPS. ESP-IDF 即乐鑫物联网开发框架,可为在 Wind ...

  5. ESP32 ADF windows开发环境搭建 适配ADF到ESP32A1S(转)

    搭建ESP32A1S的ADF开发环境 一,获取IDF和IDF-TOOL adf是乐鑫的音频开发框架,里面有许多乐鑫的音频开发API,同时ADF是基于IDF的.这一部分可以按照官网的教程一步一步来.官网 ...

  6. Sql Server系列:分区表操作

    1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...

  7. Partition1:新建分区表

    未分区的表,只能存储在一个FileGroup中:对Table进行分区后,每一个分区都存储在一个FileGroup,或分布式存储在不同的FileGroup中.对表进行分区的过程,是将逻辑上完整的一个表, ...

  8. ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  9. Vertica 分区表设计

    Vertica数据库中的表只是一个逻辑概念. 实际存储在磁盘上的是projection. 当创建一张表,没有创建projection时,那么插入数据的时候会自动创建一个默认的projection.如果 ...

  10. Vertica 分区表设计(续)

    在上篇Vertica 分区表设计中,已经提过了Vertica的分区表创建和分区删除,但举例上并不系统, 本篇文章将系统的对分区表设计及后续的删除分区进行讲解. 概述:Vertica分区表(天和月)创建 ...

随机推荐

  1. PowerDesigner操作要点

    一.PowerDesigner解决name和code同步问题 工具-常规选项-General  Options-Dialog-Name to Code mirroring√去掉 二.PowerDesi ...

  2. LOTO示波器参加2023第101届中国(深圳)电子展

    西安乐拓精益信息科技有限公司,专注研发虚拟测量仪器,以虚拟示波器(USB示波器)以及相关衍生产品为主,包括信号发生器,逻辑分析仪等.乐拓科技以研发团队为核心,着力开发高性价比的示波器产品.无论您是资深 ...

  3. C# OpenCvSharp MatchTemplate 多目标匹配

    效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  4. AXI4协议的物理模型

    AXI4的物理传输模型 1.AXI4的组成部分 首先说一下文章是学习<基于AXI4的IP核互联的设计与验证>莫锦辉的学习笔记.文中大部分的知识都是来源于这篇论文,这里学习以便理解AXI4协 ...

  5. KingbaseES数据目录结构

    KingbaseES数据库结构 [kingbase@postgres V8]$ tree -LP 2 data/ . ├── data │   ├── base # 存储用户创建的数据库文件及隶属于用 ...

  6. Java学习路线之redis

    1.redis 大数据时代三V:海量Volume.多样Variety.实时Velocity 大数据时代三高:高并发.高可用(无限套娃+彼此监控).高性能 - Redis(Remote Dictiona ...

  7. mybatis一次执行多条SQL语句报错

    如果这样来写一个 mapper 1 <update id="createTable3" parameterType="map"> 2 drop ta ...

  8. 如在 Java 中分割 Excel 工作表

    前言 在Excel中创建的大多数商业报告不是单页的文档,而是包含了多个上下文相关的信息,这些信息被存储在多个工作表中.例如我们的一些地区销售报告.按部门分类的员工记录.每家店铺的库存清单等. 然而,随 ...

  9. WPF开发分页控件:实现可定制化分页功能及实现原理解析

    概要 本文将详细介绍如何使用WPF(Windows Presentation Foundation)开发一个分页控件,并深入解析其实现原理.我们将通过使用XAML和C#代码相结合的方式构建分页控件,并 ...

  10. CH392作服务器TCP Server应用配置使用

    CH392工作在TCP Server模式时,参考手册说明需要打开监听Socket端口,也要设置数据连接Socket端口,注意数据连接Socket的源端口和监听Socket的源端口一致. 配置TCP S ...