介绍
ESP32 微控制器是一款高度集成且功能丰富的设备,它在物联网 (IoT) 和嵌入式系统应用中扮演着重要角色。这款微控制器的一个显著特性是其能够在内部闪存中存储多个固件镜像,并能够在这些镜像之间灵活切换。这项功能为开发者提供了极大的便利,无论是用于测试不同版本的固件、同时运行多个应用程序 ,还是为了维护一个备份固件以备不时之需。
本文旨在深入探讨如何利用 ESP32 的图形引导加载程序在多个存储于闪存中的固件镜像之间进行切换。该引导程序作为一个主应用程序,赋予用户选择并执行不同固件镜像的能力。此外,我们还将展示每个应用程序如何能够重新切换回引导程序,以便于进行进一步的固件选择或系统维护。
工作方式
图形引导加载程序提供了一个用户友好的图形界面,允许用户从菜单中选择并启动特定的应用程序。用户通过图形菜单选择一个应用程序时,引导加载程序会识别并选择与该应用程序关联的特定闪存分区。随后,设备将执行重启操作,引导加载程序切换到新选择的应用程序。在新应用程序启动的过程中,会运行一段特定的代码,该代码负责将设备的引导分区重新指向包含图形引导加载程序的原始分区。这一关键步骤确保了在下一次设备重启时,引导加载程序能够重新成为启动固件,从而允许用户再次进行应用程序的选择。整个固件切换过程采用了 OTA 机制,但所有应用程序固件均已预先存储在设备的闪存中。
分区表
要启用 ESP32 微控制器上的多个固件映像,我们需要一个自定义分区表。以下是文件 partitions.csv 的示例,该文件可容纳引导加载程序和五个 OTA 分区,专为 ESP32-S3-BOX-3 和 M5Stack-CoreS3 中常用的 16 MB 闪存而设计:
# Name, Type, Subtype, Offset, Size, Flags
nvs, data, nvs, 0x9000, 24K,
otadata, data, ota, , 8K,
phy_init, data, phy, , 4K,
factory, app, factory, , 2M,
ota_0, app, ota_0, , 2816K,
ota_1, app, ota_1, , 2816K,
ota_2, app, ota_2, , 2816K,
ota_3, app, ota_3, , 2816K,
ota_4, app, ota_4, , 2816K,
此分区表需要在您的项目中定义,并且必须在