本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录       _ O x

是否进入ESP32教学导航(基于ESP-IDF)?

       确定


文章目录

  • 一、分区表简介
    • 1、什么是分区表
    • 2、ESP32 内置分区表
    • 3、分区表的格式
      • (1) 注释
      • (2) Name —— 分区名
      • (3) Type —— 主类型
      • (4) SubType —— 子类型
      • (5) Offset & Size —— 偏移地址 & 分区大小
      • (6) Flag —— 标记
  • 二、通过分区表设置分区
    • 1、使用内置分区表
    • 2、自定义分区表

一、分区表简介

1、什么是分区表

分区表是 ESP32 划分内部 flash 闪存的清单,它将 flash 划分为多个不同功能的区域用于其他功能。

分区类型分为两种,分别为 “应用” 和 “数据”。如应用分为Factory程序,OTA程序等,又如数据分为校准数据、文件系统数据、参数存储数据等。

分区表的长度为 0xC00 字节(最多可以保存 95 条分区表条目)。分区表数据后还保存着该表的 MD5 校验和,用于验证分区表的完整性。此外,如果芯片使能了 “安全启动” 功能,则该分区表后还会保存签名信息。

2、ESP32 内置分区表

分区表可以自定义,也可以使用两种内置的简单分区表。在idf.py monitor下有两张预定义的分区表,分别是:

  • “Single factory app, no OTA”
    (单APP,无OTA分区)
  • “Factory app, two OTA definitions”
    (单APP + 两个OTA分区)

idf.py menuconfig 中分区表设置:

首页 -> Partitions Table

对应的分区表分别为:

1. “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,
Name Type SubType Offset Size Flag
nvs data nvs 0x9000 0x6000
phy_init data phy 0xf000 0x1000
factory app factory 0x10000 1M
2. “Factory app, two OTA definitions”
# 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,  1M,
ota_0,    app,  ota_0,   0x110000, 1M,
ota_1,    app,  ota_1,   0x210000, 1M,
Name Type SubType Offset Size Flag
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 0x110000 1M
ota_1 app ota_1 0x210000 1M

从上方两张内置分区表中我们可以发现,分区表具有一定的格式,接下来我们来探究分区表的格式

3、分区表的格式

分区表有两种格式,一种是给人阅读的,是ASCII文件,文件类型为*.CSV
另一种是烧录到 ESP32 中的,是二进制文件,通常编译成*.bin文件。对于上文给出的两种分区表,毋庸置疑是第一种。包括下边部分

(1) 注释

字段之间的空字符会被忽略,任何以 # 开头的行(注释)都会被忽略。

(2) Name —— 分区名

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

(3) Type —— 主类型

Type 字段可以指定为 app (0x00) 或者 data (0x01),也可以直接使用数字 0-254(或者十六进制 0x00-0xFE)。但二级引导程序bootloader会忽略除appdata 的类型

如果您的应用程序需要以 ESP-IDF 尚未支持的格式存储数据,请在 0x40-0xFE 内添加一个自定义分区类型。因为 0x00-0x3F 是预留给 esp-idf 的核心功能的

(4) SubType —— 子类型

子类型用于明确具体类型,该字段本质上为长度 8 bit 的数字,内容与具体分区 Type 有关。目前,esp-idf 仅仅规定了 “app”“data” 两种分区类型的子类型含义。

目前esp-idf能识别的已知关键字有:

  • app 类型下:

    factory, test, ota_0, ota_1, ota_2, ota_3, ota_4, ota_5, ota_6, ota_7, ota_8, ota_9, ota_10, ota_11, ota_12, ota_13, ota_14, ota_15

  • data 类型下:

    ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs

其余自定义类型要通过数字来表示:见官方文档

(5) Offset & Size —— 偏移地址 & 分区大小

偏移地址指此分区开始的位置,语法上分区的大小和偏移地址可以采用以下表示方法:

  1. 十进制数(支持 K 或 M 的倍数单位(分别代表 10241024² 字节)
  2. 0x 为前缀的十六进制数,

对于主类型为 app 的分区,要求分区偏移地址必须与0x10000 (64K) 对齐,否则编译分区表时,gen_esp32part.py 工具会报错!

另外,Offset 字段可以留空。如果留空则会发生以下情况:
① 若为首个分区,则将紧跟着分区表开始。
② 若为 app 分区,gen_esp32part.py 工具会自动计算得到一个满足偏移地址对齐要求的偏移地址。
③ 对于其余情况,偏移地址将紧跟在前一个分区之后。

(6) Flag —— 标记

当前仅支持 encrypted 标记。如果 Flags 字段设置为 encrypted,且已启用 Flash 加密 功能,则该分区将会被加密。其余情况此标记可以省略。

二、通过分区表设置分区

1、使用内置分区表

进入工程文件夹,打开idf.py menuconfig (这里假设大家已经执行过export.bat (Windows)export.sh (Linux)



如上图,可以看到内置的两张分区表(前两个选项),按空格键即可选中,然后按Q之后按Y即可保存。

之后使用idf.py buildidf.py flash即可编译并烧录整个应用程序。

如果只是想编译分区表,请用idf.py partition_tableidf.py partition_table-flash分别来编译和烧录分区表。

2、自定义分区表

内置分区表功能很少,例如无文件系统等分区。
使用自定义分区表时,要先在工程根目录下新建一个*.csv文件,内容按照上文规则编写自定义分区表。分区表文件名随意。如下csv.csv

$ tree.
├── main
│   ├── CMakeLists.txt
│   └── Hello.cpp
├── CMakeLists.txt
└── csv.csv   #这个文件

之后打开idf.py menuconfig 参考上文打开分区表设置界面,选择第三项“自定义分区表 CSV文件”

按空格键选中之后,在如图位置填写自定义分区表的文件名。例如本示例里分区表叫csv.csv


按Enter键即可确认,然后按Q之后按Y即可保存。

之后使用idf.py buildidf.py flash即可编译并烧录整个应用程序。

如果只是想编译分区表,请用idf.py partition_tableidf.py partition_table-flash分别来编译和烧录分区表。

ESP32之 ESP-IDF 教学(十三)—— 分区表相关推荐

  1. ESP32开发学习(IDF)--简介

    注:对于ESP32开源技术感兴趣的可以加群,我们一起探索交流学习,群号:782473783.群名:ESP32开源技术交流群. 您可能已经知道Espressif制造的esp8266,wifi芯片.它在2 ...

  2. ESP32 partition(分区表)(15)

    提示:本博客作为学习笔记,有错误的地方希望指正,主要参考乐鑫技术手册说明结合实例代码分析,结合理论知识学习后示例分析以及常见问题说明. 文章目录 一.ESP32 Partition概述 二.内置分区表 ...

  3. Linux下搭建ESP-IDF 开发环境教程,适合ESP32/S2/C3/S3系列模组二次开发

    1 Ubuntu安装 在Linux下编译速度比Windows快很多,一般推荐优先使用Linux开发.Ubuntu是非常常见的Linux操作系统. 网上已经有非常多的Ubuntu安装教程,这里推荐一篇, ...

  4. ESP32 (Timer)-定时器学习(7)

    提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32定时器介绍 1.1.概述 1.2.使用esp_timer api 1.3.回调函数 1.4.esp_timer在浅睡眠期间 1. ...

  5. ESP32 (WIFI)-AP、STA模式(14)

    提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32 WIFI模式概述 二.ESP32 WIFI-AP初始化流程 三.WIFI-AP示例 四.ESP32 WIFI-STA初始化流程 ...

  6. ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL演示

    陈拓 2022/08/30-2022/09/01 1. 开发板和显示屏 上网看看你就会发现在同等尺寸的情况下彩色显示屏的价格已经低于单色屏.用彩色屏代替单色屏可以提高产品的档次,并降低成本. 彩色屏的 ...

  7. ESP32 ESP-IDF看门狗TWDT

    陈拓 2022/07/02-2022/07/02 1. 概述 此示例演示如何使用任务看门狗计时器Task Watchdog Timer (TWDT)的以下功能: 如何初始化和取消初始化TWDT 如何订 ...

  8. ESP32任务看门狗实践

    默认情况下,TWDT(任务看门狗) 将监视每个 CPU 的空闲任务,但任何任务都可以选择由 TWDT 监视.每个观察任务必须定期"重置" TWDT 以指示它们已被分配 CPU 时间 ...

  9. ESP32 web WiFi 管理器esp32-wifi-manager

    拓 2023/04/09-2022/04/11 1. 简介 github仓库 https://github.com/tonyp7/esp32-wifi-manager 说明 esp32-wifi-ma ...

  10. 物联网开发笔记(68)- 使用Micropython开发ESP32开发板之使用官方工具esptool烧录

    一.目的 这一节我们学习如何使用我们的ESP32开发板来烧录. 二.环境 ESP32 + esptool + Win10 + python3.10 + 其他工具. ESP32开发板购买地址: http ...

最新文章

  1. 嵌入式自学多久可以找工作?应届生找嵌入式工作难吗?
  2. Debian Linux下安装配置 Pure-ftpd
  3. 如何将浮点型准确地转换成字符串
  4. ASP.NET Core 单元测试:如何Mock Url.Page()
  5. bzoj4567: [Scoi2016]背单词
  6. oracle 日期型函数转换,oracle中,日期转换函数
  7. matlab仿真脉冲响应函,Matlab仿真下的动态响应分析
  8. VBA-1-如何在右键中添加“新建启用宏的工作簿.xlsm”
  9. 《七哥说道》第十三章:我的室友白羽鸡
  10. MINIST数据集手写数字识别单张图片读入测试代码
  11. 讯飞配音使用记录:Excel VBA 编程处理多段短文字配音切分及 Hedit、GoldWave 后期处理、编程合成 WAV 文件
  12. Java虚拟机理解-内存管理
  13. AutoCAD制作自定义填充图案
  14. 在Linux打包成jar
  15. 百货商城销售管理系统
  16. 线程函数参数(LPVOID Param)
  17. MEMS--微机电系统
  18. python下载谷歌地图瓦片_python抓取天地图瓦片
  19. c#轻松实现磁性窗口
  20. 使用matlab从气象数据文件提取所需站点信息到excel

热门文章

  1. 【自然语言处理】ELMo 讲解
  2. 初步使用bootstrap框架
  3. Hdu 5454,Minimum Cut,最近公共祖先+dfs遍历
  4. 缠论是一种交易方法炒股是不是一定要学习缠论(利用缠论如何选股)
  5. 两百行代码实现动态圣诞树—你值得拥有
  6. MakeItTalk: 让图像开口说话!
  7. 【WSL】配置zsh
  8. 3d渲染服务器系统,3d渲染云服务器
  9. java memorystream 包_C#使用MemoryStream类读写内存
  10. CRITICAL_SECTION的使用方法——模拟售票功能