当前位置:首页|资讯

如何在闪存中切换多个 ESP32 固件二进制文件

作者:乐鑫信息科技发布时间:2024-10-22

介绍

ESP32 微控制器是一款高度集成且功能丰富的设备,它在物联网 (IoT) 和嵌入式系统应用中扮演着重要角色。这款微控制器的一个显著特性是其能够在内部闪存中存储多个固件镜像,并能够在这些镜像之间灵活切换。这项功能为开发者提供了极大的便利,无论是用于测试不同版本的固件、同时运行多个应用程序 ,还是为了维护一个备份固件以备不时之需。

本文旨在深入探讨如何利用 ESP32 的图形引导加载程序在多个存储于闪存中的固件镜像之间进行切换。该引导程序作为一个主应用程序,赋予用户选择并执行不同固件镜像的能力。此外,我们还将展示每个应用程序如何能够重新切换回引导程序,以便于进行进一步的固件选择或系统维护。


工作方式

图形引导加载程序提供了一个用户友好的图形界面,允许用户从菜单中选择并启动特定的应用程序。用户通过图形菜单选择一个应用程序时,引导加载程序会识别并选择与该应用程序关联的特定闪存分区。随后,设备将执行重启操作,引导加载程序切换到新选择的应用程序。在新应用程序启动的过程中,会运行一段特定的代码,该代码负责将设备的引导分区重新指向包含图形引导加载程序的原始分区。这一关键步骤确保了在下一次设备重启时,引导加载程序能够重新成为启动固件,从而允许用户再次进行应用程序的选择。整个固件切换过程采用了 OTA 机制,但所有应用程序固件均已预先存储在设备的闪存中。


分区表

要启用 ESP32 微控制器上的多个固件映像,我们需要一个自定义分区表。以下是文件 partitions.csv 的示例,该文件可容纳引导加载程序和五个 OTA 分区,专为 ESP32-S3-BOX-3M5Stack-CoreS3 中常用的 16 MB 闪存而设计:

此分区表需要在您的项目中定义,并且必须在 sdkconfig 文件中启用以下选项:

置图形引导程序

使用预建固件快速入门

示例应用程序在 Releases 中以二进制固件的形式提供。

它可以从地址 0x0 烧录到设备。

您还可以使用 Wokwi 在 Web 浏览器中运行应用程序的模拟。


在 Wokwi Simulator 中在线运行

克隆仓库

如果您想构建自己的版本,请按照本章中的说明进行操作。

从克隆项目仓库开始:

选择目标板

使用 BUILD_BOARD 变量设置适当的板。例如,要配置 ESP32-S3-BOX-3,请使用:

其他受支持的板列表可以在 boards 目录中找到。

将二进制文件合并为单个固件

上述构建完成后,将二进制文件合并为单个固件:


将合并后的二进制文件烧录到 ESP32 上

最后,将合并后的二进制文件烧录到 ESP32 上:

如何使用引导程序

烧录完成后,ESP32 将启动进入图形引导加载程序。该引导程序允许您选择要运行的应用程序。用户界面十分直观,您可以直接浏览存储在 OTA 分区中的不同应用程序。

创建自定义应用程序

以下步骤将解释如何为 ESP32-S3-BOX-3 创建与图形引导加载程序配合使用的自定义 ESP-IDF 应用程序。


切换到存储在 OTA 分区中的应用程序

引导程序中的以下代码片段显示了如何切换到另一个应用程序。这对于管理存储在不同 OTA 分区中的多个应用程序十分有效:


返回工厂分区中的原始应用程序

每个应用程序都可以包含一个切换回原始应用程序(图形引导加载程序)的机制。以下是其中一个子应用程序的示例功能:

该函数可以在应用程序开始时调用此功能,以确保设备在发生崩溃时能够恢复到出厂固件(引导程序)。完成此操作后,任何重置都将启动到原始固件中。

在您应用程序的 CMakeLists.txt 中,请确保包含所需的依赖项:

应用代码

更新 main/hello_app.c 的代码,以切换到出厂应用程序并在屏幕上显示信息。

刷新应用程序

您可以将应用程序直接构建并烧录到 OTA 分区。

更改应用程序图标

图形引导加载程序中显示的图标是图形加载引导程序固件的一部分,并非应用程序的一部分。图标存储在 resources/images 中。

您只需要替换其中一个现有的 png 文件。

如果您想使用您自己的图标名称,请更新引导加载程序 mainmain/bootloader_ui.c:

并将您的图标在 main/CMakeLists.txt 中进行注册。IDF 构建过程会将该图标转换为正确的格式。

更改图标后,您需要重建并烧录主应用程序:

结论

ESP32 的图形引导加载程序为在单一设备上管理多个应用程序提供了一种优越的方式。通过利用 OTA 分区,您可以轻松地存储和切换不同的应用程序。无论您是希望尝试不同项目的创客,还是需要多个应用环境的专业人士,这款引导程序都简化了这一过程。


相关链接:

  • OTA 机制:

    https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/ota.html

  • partitions.csv 示例:

    https://github.com/georgik/esp32-graphical-bootloader/blob/main/partitions.csv

  • ESP32-S3-BOX-3:

    https://github.com/espressif/esp-box

  • M5Stack-CoreS3:

    https://docs.m5stack.com/en/core/CoreS3

  • sdkconfig 文件:

    https://github.com/georgik/esp32-graphical-bootloader/blob/main/sdkconfig.defaults

  • Releases:

    https://github.com/georgik/esp32-graphical-bootloader/releases

  • 在 Wokwi Simulator 中在线运行:

    https://wokwi.com/experimental/viewer?diagram=https://gist.githubusercontent.com/urish/c3d58ddaa0817465605ecad5dc171396/raw/ab1abfa902835a9503d412d55a97ee2b7e0a6b96/diagram.json&firmware=https://github.com/georgik/esp32-graphical-bootloader/releases/latest/download/graphical-bootloader-esp32-s3-box.uf2

  • ESP32 图形引导加载程序 GitHub 仓存储库

    https://github.com/georgik/esp32-graphical-bootloader

  • ESP-IDF 文件

    https://docs.espressif.com/projects/esp-idf/en/latest/esp32/

  • ESP-BSP 组件

    https://components.espressif.com/components?q=tags:bsp



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1