首页 > 其他分享 >ESP32 分区表

ESP32 分区表

时间:2022-10-14 15:35:23浏览次数:70  
标签:缓存 ota ESP32 分区表 读存储器 app data 分区

当你编译程序,发现 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

标签:缓存,ota,ESP32,分区表,读存储器,app,data,分区
From: https://www.cnblogs.com/jzcn/p/16790598.html

相关文章

  • ESP32模拟鼠标键盘
     淘宝产品https://item.taobao.com/item.htm?spm=a230r.1.14.26.283812desb4ou0&id=669444818599&ns=1&abbucket=5#detail   硬件手册https://docs.qq.com/doc/......
  • esp32-lvgl-ST7796+GT911
    1、st7789在lvgl配置菜单中使用ILI9481的驱动,如果使用st7789的驱动会出现显示颜色不正确,用ili9481的就可以2、gt911的驱动文件需要修改,修改gt911.c文件中60行,取消错误后的......
  • ESP32开发环境搭建 IDF3.3.5+VScode
    1、 软件准备:①ESP-IDF:包含ESP32API和用于操作工具链的脚本。②工具链msys32:用于编译ESP32应用程序。③编辑工具VisualStudioCode  注意:工具链和ESP-IDF需......
  • [MicroPython ESP32] 内存分析
    [MicroPythonESP32]内存分析[(1)芯片:ESP32-WROOM-DA]手册:https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D......
  • SQL Server大分区表没有空分区的情况下如何扩展分区的方法
    Alwayskeepemptypartitionsatbothendsofthepartitionrange.Keepthepartitionsatbothendstoguaranteethatthepartitionsplitandthepartitionmerge......
  • ESP32 + IDF + LED
    一、开发板ESP32-S3-DevKitC-1管脚布局由于这个程序控制比较简单,就不赘述了,直接看程序。二、程序#include"freertos/FreeRTOS.h"#include"freertos/task.h"#incl......
  • 【数据库】Postgresql、PG的分区操作:创建、删除指定分区,非分区表转分区表
    〇、参考链接 一、为表创建指定分区--表创建分区参数表名分区序列例如:ltc_customer,20220915则创建ltc_customer_20220915分区表CREATEorreplaceFUN......
  • 【MySQL】MySQL分区表
    本想整理一下MySQL分区表的内容。发现有人已经写了很详细了,这里整理一下链接第36期:MySQL原生水平拆表第37期:适当的使用MySQL原生表分区第38期:MySQL时间类分区具体实......
  • mysql创建分区表(转载)
    一、   mysql分区简介数据库分区数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以......
  • sqlserver 创建分区表(转载)
    我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆分成很多小表,查询的时候就到各个小表去查,最后进行汇总......