【嵌入式】ESP32 Flash专题

发布于:2025-05-20 ⋅ 阅读:(13) ⋅ 点赞:(0)

Flash是嵌入式环境中的“固态硬盘”。在ESP32中,Flash被用来保存代码和数据,下面对ESP32的Falsh进行解读。

1. ESP32烧写程序时写入的文件

1.1 bootloader.bin

作用

  • 系统启动时第一个执行的程序
  • 初始化硬件(时钟、Flash、RAM等)
  • 验证应用程序的完整性
  • 加载并跳转到应用程序

Flash 地址

  • 默认地址:0x1000
  • 大小:通常为 28KB
  • 分区表中对应:bootloader 分区

1.2 分区表 (partition_table.bin)

作用

  • 定义 Flash 存储空间的布局
  • 指定各个分区的位置和大小
  • 包含分区类型和属性信息

Flash 地址

  • 默认地址:0x8000
  • 大小:通常为 3KB
  • 分区表中对应:partition 分区

1.3 app.bin

作用

  • 用户应用程序
  • 包含主程序代码
  • 包含用户数据

Flash 地址

  • 默认地址:0x10000
  • 大小:根据分区表定义,通常为 1MB 或更大
  • 分区表中对应:app 分区

1.4 Flash 布局示例

0x0000  +------------------+
        |                  |
        |                  |
        |                  |
0x1000  +------------------+  <- bootloader.bin
        |                  |
        |                  |
        |                  |
0x8000  +------------------+  <- partition_table.bin
        |                  |
        |                  |
0x10000 +------------------+  <- app.bin
        |                  |
        |                  |
        |                  |
        +------------------+

1.5 分区表示例

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 1M,

1.6 Flash烧写方法

Flash和CPU是通过SPI通信的。

可以使用以下方式烧写Flash:

  • esptool.py:官方烧写工具
  • Flash 下载工具:官方图形界面工具,flash download tool
  • 自定义烧写程序:通过 SPI 接口直接操作

使用VSCode可以修改烧写参数:
在这里插入图片描述

2. ESP32启动流程

  1. 系统上电后,ROM 中的引导程序首先执行,和BIOS程序类似。ROM和Flash的区别是,ROM中的程序是出厂就固定的,像BIOS一样,而Flash是可以反复读写的。
  2. 引导程序从 0x1000 加载 bootloader,类似于UBoot
  3. bootloader 从 0x8000 读取分区表
  4. 根据分区表找到 app 分区
  5. 验证并加载应用程序
  6. 跳转到应用程序执行

可以看出,计算机启动的方式很类似,不管是嵌入式计算机还是PC机,启动过程都被分为了若干步骤,每个步骤专注做一件事,承上启下,互相协作,最终目标是让计算机把各种软件程序正确运行起来,给用户使用。

3. 其他

注意事项

  1. 地址和大小可以通过分区表自定义
  2. 不同型号的 ESP32 可能有不同的默认配置
  3. 分区表可以根据应用需求修改
  4. 建议保留 bootloader 和分区表的默认地址
  5. 应用程序地址可以根据需要调整

设计优势

  1. 模块化:各个组件职责明确
  2. 灵活性:可以自定义分区布局
  3. 安全性:支持应用程序验证
  4. 可维护性:便于更新和调试
  5. 可扩展性:支持多种分区类型

网站公告

今日签到

点亮在社区的每一天
去签到