Azure Sphere 的下游 OTA 更新
许多 Azure Sphere 解决方案将 Azure Sphere 认证的 MCU 和其他处理器合并为完整的 IoT 解决方案的一部分。 这些其他处理器需要定期固件更新。 本指南介绍如何使用 Azure Sphere 启用下游 OTA 更新。
根据特定的应用程序方案,可通过多种不同的方法来实现此目的。 每个解决方案都有一个通用流:
- 触发固件更新。
- 获取固件更新。
- 确定中间下载位置。
- 验证固件并更新下游处理器。
阶段 1:触发固件更新
问题: 固件更新过程是如何启动的?
选项:
每个 Azure Sphere 应用版本都绑定到下游固件版本:
- 说明: Azure Sphere 应用启动时,支持的固件版本与下游处理器上的已部署版本进行比较。 如果版本不匹配,则需要更新。
- 优点: 在 Azure Sphere 应用和固件版本之间定义支持协定。 此外,还利用现有的 Azure Sphere 应用更新过程。
- 缺点: 必须更新 Azure Sphere 应用以触发固件更新,即使没有 Azure Sphere 应用更改也是如此。 此外,还必须添加对更新进度的监视。
Azure IoT 中心设备管理固件更新:
- 说明: 固件更新准备就绪后,IoT 解决方案操作员会使用更新的固件创建新的设备管理配置。 Azure Sphere 应用程序接收固件更新请求,并可以开始更新。
- 优点: 轻松管理解决方案,用于定义、触发和监视更新。
- 缺点:必须使用Azure IoT 中心,不支持其他云终结点。
单独的固件检查(自定义解决方案):
- 说明: 在 Azure Sphere 应用程序中生成自定义固件检查。 定期检查已定义的终结点是否有新版本,如果检测到某个终结点,请启动更新。
- 优点: 适用于任何云终结点来下载固件。
- 缺点: 必须添加更新过程的监视。 自定义生成解决方案,因此不利用任何现有的更新路径。
建议的解决方案: 如果通过 Azure Sphere 应用更新触发下游处理器的更新适用于你的方案,则建议使用此方法。 此解决方案可确保 Azure Sphere 和下游固件版本始终匹配,并且不需要构建另一个系统来触发更新。 否则,如果应用程序已使用 Azure IoT 中心,则建议使用 IoT 设备管理,否则需要自定义解决方案。
示例:
- ExternalMcuUpdate 参考解决方案 演示如何在每个 Azure Sphere 应用程序版本的下游设备上要求特定的固件版本。
- Azure Sphere 外部 MCU OTA 使用 Azure IoT 中心 设备管理为 Azure Sphere 实现固件更新。
- Azure IoT 中心固件更新教程介绍如何通过Azure IoT 中心设备孪生属性触发更新。
阶段 2:获取固件更新
问题:在 Azure Sphere MT3620 的内存约束下,应如何下载固件?
选项:
将下游固件包含在部署到 MT3620 的 imagepackage 中。 如果 MT3620 软件(包括下游映像)的总大小不超过记录的闪存限制,则可能会发生这种情况。
从托管位置下载固件,例如使用Azure Blob 存储。 可能需要以区块形式下载固件,因为 MT3620 的 RAM 限制 可能会阻止将整个映像下载到 RAM。 请务必验证用于固件下载的服务器(例如使用 HTTPS)以确保仅下载受信任的固件并将其应用于下游处理器。 请注意,在这种情况下,在更新 Azure Sphere 应用时,设备可能处于联机状态,但在新应用可以下载新的下游固件之前脱机。 如果这是用例的可能,请务必保持 Azure Sphere 应用与较旧的下游固件版本之间的兼容性。
建议的解决方案: 如果固件映像符合 Azure Sphere 映像包的闪存限制,并且如果每次需要下游更新时都可以更新 MT3620 软件,则建议将下游映像包含在 MT3620 imagepackage 中。 否则,需要从托管位置下载固件映像。
示例:
- ExternalMcuUpdate 参考解决方案 演示如何在 Azure Sphere 映像包中包含下游固件映像。
- HTTPS Curl 简易示例 演示如何使用固定大小的 RAM 缓冲区执行分块下载。
阶段 3:确定中间下载位置
问题: 仅当未使用合并到 Azure Sphere 映像包中的固件映像以及下载的固件大于 MT3620 上的可用 RAM 时,此问题才相关。
选项:
- 连接到 Azure Sphere 的外部闪存。
- 下游 MCU 或电脑存储。
对于存储下载的固件的位置,没有正确或错误的答案。 此选项取决于硬件设置和成本。 最适合你的选择是什么? 可以考虑将外部闪存附加到 Azure Sphere 设备,或者选择具有足够大存储的下游处理器来接收固件更新。
建议的解决方案: 为设置选择最佳选项。
示例:
阶段 4:验证固件并更新下游处理器
问题: 如何验证固件更新并将其应用到下游处理器?
选项: 每个处理器都有不同的解决方案。 大多数处理器制造商都有演示如何在其设备上执行固件更新的示例,你应遵循特定解决方案的最佳做法。 固件下载和更新应在启动更新之前执行完整性检查来验证固件。
建议的解决方案: 每个处理器不同。 请参阅处理器制造商的示例。
示例: ExternalMcuUpdate 参考解决方案 演示如何从 MT3620 通过 UART 接口更新北欧 nRF52。