OTA 代理库 - FreeRTOS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

OTA 代理库

重要

这是《FreeRTOS 用户指南》的存档版本,可用于 FreeRTOS 版本 202012.00。有关本文档的最新版本,请参阅《FreeRTOS 用户指南》

概览

利用OTA 代理库,您可以使用 HTTP 或 MQTT 作为协议来管理 FreeRTOS 设备固件更新的通知、下载和验证。通过使用 OTA 代理库,可以从逻辑上将固件更新与设备上运行的应用程序进行隔离。OTA 代理可以与应用程序共享网络连接。通过共享网络连接,有可能节省大量的 RAM。此外,可使用 OTA 代理库来定义特定于应用程序的逻辑,以测试、提交或回滚固件更新。

有关使用 FreeRTOS 设置 OTA 更新的更多信息,请参阅 FreeRTOS 更新 Over-the-Air

特征

下面是完整的 OTA 代理接口:

OTA_AgentInit

初始化 OTA 代理。发起人提供消息收发协议上下文、可选的回调和超时。

OTA_AgentShutdown

完成使用 OTA 代理后清理资源。

OTA_GetAgentState

获取 OTA 代理的当前状态。

OTA_ActivateNewImage

激活通过 OTA 收到的最新的微控制器固件映像。(详细的作业状态现在应当为“自检”。)

OTA_SetImageState

设置当前运行的微控制器固件映像的验证状态(正在测试、已接受或已拒绝)。

OTA_GetImageState

获取当前运行的微控制器固件映像的状态(正在测试、已接受或已拒绝)。

OTA_CheckForUpdate

从 OTA 更新服务请求下一个可用的 OTA 更新。

OTA_Suspend

暂停所有 OTA 代理操作。

OTA_Resume

恢复 OTA 代理操作。

API 参考

有关更多信息,请参阅 OTA 代理 API 参考

示例用法

使用 MQTT 协议的典型的支持 OTA 的设备应用程序采用以下 API 调用顺序来驱动 OTA 代理。

  1. 连接到 AWS IoT MQTT 代理。有关更多信息,请参阅 coreMQTT 库

  2. 调用 OTA_AgentInit 初始化 OTA 代理。应用程序可以定义一个自定义 OTA 回调函数,或通过指定 NULL 回调函数指针来使用默认回调。还必须提供初始化超时。

    回调实施特定于应用程序的逻辑,于 OTA 更新作业完成后执行。超时定义了等待初始化完成所花费的时间。

  3. 如果在代理准备就绪之前 OTA_AgentInit 超时,则可以调用 OTA_GetAgentState 以确认代理已初始化并按预期运行。

  4. OTA 更新完成后,FreeRTOS 调用具有以下事件之一的作业完成回调:acceptedrejectedself test

  5. 如果新的固件映像已遭拒绝(例如,由于验证错误),应用程序通常可以忽略通知并等待下一次更新。

  6. 如果更新有效且标记为“已接受”,可调用 OTA_ActivateNewImage 重置设备并启动新的固件映像。

移植

有关将 OTA 功能移植到您的平台的信息,请参阅《FreeRTOS 移植指南》中的移植 OTA 库

内存使用

AWS IoT OTA 的代码大小(使用 GCC 为 ARM Cortex-M 生成的示例)
文件 使用 -O1 优化 使用 -Os 优化
ota.c 8.0K 7.2K
ota_interface.c 0.1K 0.1K
ota_base64.c 0.6K 0.6K
ota_mqtt.c 2.3K 2.2K
ota_cbor.c 0.8K 0.6K
ota_http.c 0.3K 0.3K
估计总数 12.1K 11.0K