ESP32S3+ESPIDF:ESP32Flash分区和分区表(了解)

Flash分区中有一部分是分区表。是包含关系。

一句话定义分区表:

把 ESP32 的 Flash 闪存划分成一块块独立区域,规定每块存什么、多大、在哪,是 Flash 的分区地图。

电脑有分盘,C盘D盘F盘。ESP32的flash存储也类似电脑分盘。

很多人习惯把程序安装在D盘,把下载资料放在F盘,把娱乐类的放在E盘。flash存储也是这么分盘的。

Flash分区见下图(正点原子提供的):

boot、partitiontable(分区表)、factory系统自带,不配置也有!

①boot:启动区域(有两级,咱们一般就看二级Boot(Bootloader))

芯片上电后,先运行片内 ROM Boot 一级引导,它只做一件事:直接跳转到Flash 里的二级 Boot(Bootloader),之后全由 Boot 接管启动流程。

二级 Boot(Bootloader)到底做什么?(它是上电第一个真正可配置可编译的程序)
1、初始化基础硬件(初始化SPIFlash、始终、串口等)
2、读取并解析分区表(就是去分区表那里,拿到整个16MBFlash的“地图”)
3、根据分区表选择启动哪个固件
4、那选择要启动的固件放在RAM中,然后开始跑app_main()。
5、下载模式(如果GPIO0上电时为低,则进入串口烧录模式)
Boot(二级 Bootloader)是 ESP32‑S3 的启动钥匙,固定在 Flash 最前面 28KB,负责上电初始化、读分区表、选固件、加载运行,16MB Flash 再大,它也只占这一小块,永不改动位置和大小。
0x0000–0x0FFF  4KB   ROM 一级 boot(芯片内置)0x1000–0x7FFF  28KB  Bootloader(二级 boot)0x8000–0x8FFF   4KB   Partition Table(分区表)

②、partitiontable(分区表)

把整块 Flash 切分成若干逻辑分区(app、nvs、文件系统、OTA 等),告诉 Bootloader 和系统:每个分区叫什么,是什么类型,从哪个地址开始,有多大。

没有它,系统完全不知道 Flash 里哪是程序、哪是数据,根本无法启动和运行。

③、NVS=Non‑Volatile Storage(非易失性存储)

掉电不丢失!

适合不频繁改写的配置,不适合频繁日志,一般存放配置参数、WiFi密码等。

④、phy_init 是无线射频专用数据分区。

上电后 WiFi / 蓝牙驱动会自动读取,保证无线信号、通信距离、功耗符合标准。

只要用到 WiFi / 蓝牙,该分区必须存在。

⑤、factory专门存放完整可运行程序。

⑥、VFS 本身不在分区表里出现;分区表里出现的是给 VFS 用的文件系统分区。

⑦、storage自定义命名的通用存储分区,存放各种自定义数据。

有人问:分区表,一听就不想学,不搞行不行?

没有分区表,Flash 就是 “大仓库乱堆”。

有了分区表 = 分房间住:程序一间、配置一间、升级包一间、文件一间,互不干扰、安全稳定。

有人问:什么时候必须改分区表?

开启 OTA 升级。

使用 SPIFFS / 文件系统 存放大量文件。

固件体积变大,默认分区不够用。

需要多份独立配置、大存储数据。


用VS图形化编辑器,修改分区表:

快捷键:Ctrl+Shift+P

发表评论