ESP32-S31 分区表的访问流程图

下面是一个比较符合 ESP32-S31/ESP-IDF 架构的启动与分区表关系图。

ESP32-S31 启动流程图

复制代码
┌──────────────────────┐
│      Power On        │
│       上电复位        │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│      ROM Boot        │
│  芯片内部固化代码     │
└──────────┬───────────┘
           │
           │ 通过 SPI0/1(MSPI)
           ▼
┌──────────────────────┐
│ Flash 0x0000         │
│ Bootloader           │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ Flash 0x8000         │
│ Partition Table      │
│ (分区表)             │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ 解析所有分区信息      │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ OTA Data 分区         │
│ 当前激活镜像?         │
└───────┬───────┬──────┘
        │       │
   Factory   OTA_0/1
        │       │
        └───┬───┘
            ▼
┌──────────────────────┐
│ 选择应用分区          │
│ Factory/OTA0/OTA1    │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ MMU建立Flash映射      │
│ 0x42000000(IROM)     │
│ 0x3C000000(DROM)     │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ Jump To App          │
│ app_main()           │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│ 应用运行阶段          │
│                      │
│ NVS                  │
│ SPIFFS/LittleFS      │
│ User Data            │
│ OTA Upgrade          │
└──────────────────────┘

Flash分区布局示意图

以 16MB Flash 为例:

复制代码
Flash
0x000000
│
├─────────────────────────────┐
│ Bootloader                  │
│ 约32KB                      │
└─────────────────────────────┘

0x008000
├─────────────────────────────┐
│ Partition Table             │
│ 4KB                         │
└─────────────────────────────┘

0x009000
├─────────────────────────────┐
│ NVS                         │
│ WiFi配置                    │
│ SN                          │
│ Calibration                 │
└─────────────────────────────┘

0x00F000
├─────────────────────────────┐
│ OTA Data                    │
│ 当前启动镜像信息             │
└─────────────────────────────┘

0x010000
├─────────────────────────────┐
│ Factory App                 │
│ 出厂固件                     │
└─────────────────────────────┘

0x210000
├─────────────────────────────┐
│ OTA_0                       │
│ 当前运行版本                 │
└─────────────────────────────┘

0x410000
├─────────────────────────────┐
│ OTA_1                       │
│ 新下载版本                   │
└─────────────────────────────┘

0x610000
├─────────────────────────────┐
│ SPIFFS / FATFS              │
│ 配置文件                     │
│ 图片资源                     │
│ 字库资源                     │
└─────────────────────────────┘

0xF00000
├─────────────────────────────┐
│ User Data                   │
│ 日志                         │
│ 产品信息                     │
└─────────────────────────────┘

OTA升级切换流程

复制代码
当前运行 OTA_0
      │
      ▼
下载新固件
到 OTA_1
      │
      ▼
校验镜像
      │
      ▼
更新 OTA Data
      │
      ▼
重启
      │
      ▼
Bootloader
读取分区表
      │
      ▼
发现 OTA_1 有效
      │
      ▼
启动 OTA_1
      │
      ▼
运行成功 ?
   ┌──┴──┐
   │     │
  YES   NO
   │     │
   ▼     ▼
保持     回滚
OTA_1   OTA_0

软件访问分区关系

复制代码
app_main()
    │
    ├── nvs_open()
    │      │
    │      ▼
    │   NVS分区
    │
    ├── esp_ota_begin()
    │      │
    │      ▼
    │   OTA_1分区
    │
    ├── esp_partition_read()
    │      │
    │      ▼
    │   User Data分区
    │
    └── esp_vfs_spiffs_register()
           │
           ▼
        SPIFFS分区

一句话理解:

复制代码
ROM
 ↓
Bootloader
 ↓
Partition Table
 ↓
选择APP
 ↓
MMU映射Flash
 ↓
运行APP
 ↓
APP再根据Partition Table访问
NVS / OTA / 文件系统 / 用户数据

所以在 ESP32-S31 中,分区表既是 Bootloader 的"启动导航表",也是应用软件管理整个 Flash 资源的"目录索引表"。

相关推荐
Keith Guo3 天前
Event Task Matrix(ETM)工作机制
驱动开发·esp32·etm
星野云联AIoT技术洞察5 天前
ESP32 接入 Meta Muse:Gadget SDK 能做什么,为什么不能直接做商业设备
esp32·agent·token·边缘ai·meta muse·mcu选型
学术 学术 Fun7 天前
AI 流程图图片怎样变成可编辑文件?先修文字,再核对逻辑
流程图
ITKEY_8 天前
VSCode Arduino cli 开发ESP32
esp32·iot
J_bean8 天前
Mac(Intel 芯片)ESP32 USB 串口驱动安装教程
esp32·iot·usb 串口驱动
学术 学术 Fun8 天前
截图转可编辑 PPT:旧流程图改步骤,不再靠白色方块遮字
powerpoint·流程图
tedcloud1239 天前
Docker Compose 部署 Immich:手机照片自动备份与常见故障排查
运维·前端·docker·容器·智能手机·开源·流程图
星野云联AIoT技术洞察9 天前
ESP32-P4 摄像头到屏幕的数据链路:CSI、ISP、PPA、缓冲与 DSI 如何协同
esp32·esp-idf·esp32-p4·摄像头集成·芯片集成·乐鑫芯片
weixin_4166600711 天前
AI 生成的 Mermaid 流程图和 LaTeX 公式,怎么一起导出到 Word?
人工智能·word·流程图·豆包