Over The Air Updates
Over The Air Updates (OTA)
OTA 流程概述
OTA 更新机制允许设备根据正常固件运行时收到的数据进行更新(例如,通过WiFi或蓝牙).
OTA 要求至少使用两个 “OTA app slot” 分区(即 ota_0
和 ota_1
)和 “OTA Data Partition” 来配置设备的分区表.
OTA 操作功能将新的应用程序固件映像写入当前未用于启动的 OTA 应用程序位置. 验证映像后,将更新 OTA 数据分区以指定此映像应用于下次启动.
OTA 数据分区
OTA 数据分区 (type data
, subtype ota
) 必须包含在使用 OTA 功能的任何项目的分区表中.
对于出厂启动设置,OTA 数据分区不应包含任何数据(所有字节都擦除为 0xFF). 在这种情况下,esp-idf 软件引导加载程序将启动 factory 应用程序(如果它存在于分区表中). 如果分区表中不包含 factory 应用程序,则会启动第一个可用的 OTA 程序(通常为 ota_0
).
在第一次 OTA 更新之后,更新 OTA 数据分区以指定下一个应该引导哪个 OTA 应用程序分区.
OTA 数据分区的大小为两个闪存扇区(0x2000 字节),以防止在写入时出现电源故障时出现问题. 扇区被独立擦除并用匹配数据写入,如果它们不同意,则使用计数器字段来确定最近写入哪个扇区.
APP 回滚
应用程序回滚的主要目的是在更新后使设备保持工作。此功能允许您回滚到以前的工作应用程序,以防新应用程序出现严重错误。启用回滚过程并且 OTA 更新提供应用程序的新版本时,可能会发生以下三种情况之一:
- 应用程序正常,
esp_ota_mark_app_valid_cancel_rollback()
使用状态ESP_OTA_IMG_VALID
标记正在运行的应用程序。启动此应用程序没有任何限制。 - 应用程序存在严重错误,无法进行进一步的工作,需要回滚到先前的应用程序,
esp_ota_mark_app_invalid_rollback_and_reboot()
将正在运行的应用程序标记为ESP_OTA_IMG_INVALID
并重置。引导加载程序不会选择此应用程序进行引导,并将引导以前工作的应用程序。 - 如果设置了
CONFIG_APP_ROLLBACK_ENABLE
选项,并且在不调用任何函数的情况下发生重置,则会发生并回滚。
注意:状态不会写入应用程序的二进制映像,