当前位置: 首页 > news >正文

ESP32 IDF 分区表

在esp32的一些项目里面我们都会看到这样一个文件:partions.csv

点进去一看,发现里面装着的很多个键值对,这个文件叫做分区表。

在 ESP32(及其他嵌入式设备)中,分区表(Partition Table)是一份存储在 Flash 中的 “索引文件”,用于定义 Flash 存储空间的 “区域划分规则”—— 就像电脑硬盘的分区(C 盘、D 盘、E 盘),每个分区有明确的用途、大小和地址范围,避免不同类型的数据(如程序固件、配置参数、用户文件)互相干扰。

简介

一、分区表的核心作用:给 Flash 做 “规划图”

ESP32 的所有数据(程序代码、WiFi 配置、用户参数等)都存在外部 SPI Flash 中,但 Flash 本身是 “连续的字节空间”,如果不做划分,程序无法区分 “哪里存固件”“哪里存配置”,可能导致写入配置时覆盖程序代码,或读取参数时读到无效数据。

分区表的作用就是解决这个问题:

  • 它用 “表格” 形式记录了 Flash 中每个 “分区” 的名称、用途(类型)、具体地址范围和大小
  • 设备上电后,Bootloader(启动程序)和应用程序会先读取分区表,再根据表中的规则访问对应区域(比如 “从 factory 分区加载程序”“往 nvs 分区写配置”)。

二、分区表的组成:每个分区包含 5 个关键信息

一份完整的分区表由多个 “分区项” 组成,每个分区项描述一个独立的 Flash 区域。以 ESP32 常用的 partitions.csv 为例,每个分区的格式为:

# 名称,   类型,   子类型,   起始地址,   大小,   标志
nvs,      data,   nvs,      0x9000,    0x6000,  # NVS配置分区
phy_init, data,   phy,      0xF000,    0x1000,  # PHY初始化数据分区
factory,  app,    factory,  0x10000,   0x100000,# 应用程序分区
  1. 名称(Name):分区的标识(如 “nvs”“factory”),方便代码中引用;
  2. 类型(Type):分区的大类,主要分两种:
    • app:存储应用程序固件(如 factory 分区、ota 分区);
    • data:存储数据(如 NVS 配置、PHY 校准数据、SPIFFS 文件系统);
  3. 子类型(SubType):细分类型,明确具体用途:
    • nvs(data 子类型):用于 NVS 存储键值对;
    • phy(data 子类型):存储 WiFi / 蓝牙 物理层校准数据;
    • factory(app 子类型):存储默认的出厂固件;
  4. 起始地址(Offset):分区在 Flash 中的起始位置(必须 4KB 对齐);
  5. 大小(Size):分区的容量(如 0x6000 表示 24KB)。

三、分区表的存储位置:固定在 Flash 的 0x8000 地址

分区表本身也是一段数据,必须存储在 Flash 的固定位置,才能让设备启动时找到它。ESP32 约定:

  • 分区表存储在 Flash 的 0x8000 ~ 0x8FFF 地址(共 4KB);
  • 设备上电后,第一步是 Bootloader(启动程序)从 0x0 地址加载自身,然后立即读取 0x8000 处的分区表,再根据分区表找到应用程序分区(如 factory),加载程序运行。

四、分区域表的参数设置

分区表的参数其实并不是可以随意设置的,那分区表的组成成员来说,factory部分是缺一不可的,因为当前运行的程序都储存在factory部分,nvs和phy_init(需要网络组件必须选)是可选的。

需要注意的是起始地址和偏移地址,起始地址在官网分区表 - ESP32 - — ESP-IDF 编程指南 release-v5.5 文档 的这个位置有写

就是说分区表的起始地址在0x8000,结束地址在0x8ffff,分区表的偏移大小基本在0x1000的整数倍

接着是其他分区的分布规律:

1.所有分区的地址范围(起始地址 + 大小)互不重叠;

3.数据类型分区(如 NVS)起始地址是 4KB(0x1000)的整数倍

4.应用类型分区(如 factory)起始地址是 64KB(0x10000)的整数倍

5.所有分区都在 Flash 总容量范围内(如 16MB Flash 地址上限为 0xFFFFFF)。

五、分区表有自动设置还有自定义分区表

一般推荐自定义分区表

创建流程如下

1.进入menuconfig并在搜索栏中填入cus

2.在partition table选择custom partition table csv,然后在custom partition csv file输入分区表的名称

3.在工程目录新建一个同你在custom partition csv file输入分区表的名称相同的.csv文件

更多问题

1.像是嵌入式的.pem格式的ca证书使用EMBED_TXTFILES存放在分区表的哪里?

答:EMBED_TXTFILES一般存储在factory和应用程序一起储存,存放在只读数据段中

六、参考文章

ESP32的分区表(partitions)及如何配置_esp32分区-CSDN博客

分区表 - ESP32 - — ESP-IDF 编程指南 v5.5.1 文档

http://www.dtcms.com/a/403793.html

相关文章:

  • 房地产网站怎么推广贵阳网站建设方案推广
  • 开源 | 充电桩 运维 管理平台(IoT+运维工单平台)功能清单 - 慧知开源充电桩平台
  • 写给初学网站开发们的一封信宁波微信开发
  • 百度代理公司怎么样seo联盟
  • 在指定的进程中查找特定DLL模块
  • 关于页表过长的一些思考
  • 添加网站备案号链接建设网站应该注意的地方
  • 每日AI学习笔记----Qwen3-Omni 、HuatuoGPT-o1医学复杂推理
  • 专门做儿童的店铺网站长沙网络推广只选智投未来
  • 深圳网站制作厂家电子商务网站建设与管理课程设计
  • 微网站开发框架电子商务平台中搜索词拆解包括
  • 邢台市建设工程质量监督网站wordpress学校主题
  • Pytorch框架笔记
  • OD C卷 - 剩余银饰的重量
  • Linux 用户和组管理
  • phpstudy建设网站教程网站快捷导航ie怎么做
  • 网站颜色字体颜色网站建设宀金手指花总十五
  • 毕赤酵母(K. phaffii)番茄红素细胞工厂构建:材料方法详解与关键技术细节
  • SpringCloud项目阶段八:利用redis分布式锁解决集群状态下任务抢占以及实现延迟队列异步审核文章
  • 广州seo网站多少钱河北邯郸seo网站建设网站优化
  • 湘潭市建设路学校网站国内最新新闻事件今天
  • .NET MVC 框架基础大全
  • 系统性学习C++-第一讲-C++入门基础
  • MySQL笔记9
  • 【算法】day5 二分查找
  • 2016年做网站好不好上海百姓网
  • 什么是推免生?具备哪些条件才能保研成功?
  • 11. Linux 防火墙管理
  • 江苏专业网站建设公司电话手机淘宝官网首页
  • 百度 如何 关键字 网站域名 关联网站loading动画效果