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 资源的"目录索引表"。

相关推荐
智码看视界5 天前
Edge AI 与 IoT 全栈:云端时序数据库 + Grafana 看板,把数据变成洞察
物联网·mqtt·esp32·时序数据库·influxdb·tdengine
天空'之城7 天前
009基于物联网的智能厨房安全监测系统
毕业设计·esp32·电磁阀·厨房安全·燃气检测
斯普信专业组10 天前
Kafka 消费者 poll() 流程与原理详解
kafka·流程图
天空'之城12 天前
004基于语音识别的智能家居本地控制系统
毕业设计·esp32·智能家居·语音识别·离线控制
学IT的周星星16 天前
LangGraph:用「流程图」的方式编排 Agent
数据库·人工智能·大模型·llm·流程图·agent
钛生智能16 天前
OA 流程定制全参数详解(十):画流程图与美化——从“能跑”到“好看”的最后一公里
流程图·办公自动化·oa·协同办公·oa办公系统
weixin_4043806317 天前
MQTT 上云验收:ESP32-S3 从局域网控灯到远程网页控制
物联网·mqtt·esp32
探鸽小钛18 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
光子物联单片机19 天前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
编码追梦人19 天前
基于 ESP32-S3 的便携式多参数环境监护仪设计:从硬件选型到 FreeRTOS 多任务落地
数据库·单片机·嵌入式硬件·mongodb·esp32·freertos·低功耗设计