一板网电子技术论坛

风筝
发表于: 2021-11-23 14:55:19 | 显示全部楼层

物联网 (IoT) 产品的设计者需要不断地评估平台以及选择元器件,以降低成本和功耗,同时提高性能和加快连接应用的设计。目前有相当多的解决方案可供选择,但设计者面临的挑战是,一旦部署,如何进行无线空中下载 (OTA) 更新以保持设备固件的更新。


关键是要看一下现有的平台,看看它们有哪些额外的工具和支持来支持OTA更新。这样的支持可以大大简化过程,但前期可能需要一些知识了解。


本篇文章讨论了OTA的基本原理,以及为什么它是几乎每个物联网系统都需要支持的关键功能,尽管开发者面临着诸多挑战。然后以Espressif Systems公司的支持蓝牙和Wi-Fi的微控制器ESP32和ESP物联网开发框架 (ESP-IDF) 为例,展示如何打造一个OTA分区,并利用 otatool.py 脚本在应用仍在运行时执行固件更新。


OTA 更新介绍

大多数开发团队的核心重点是实现其产品的特定功能,也就是产品差异化业务逻辑。然而,每个物联网产品都有一个基本功能集,需要在设备的整个生命周期内进行部署、配置和维护。安全更新是一个很好的例子。鉴于需要执行这些更新,在评估一个合适的开发平台时,一个重要但容易被忽视的功能是引导程序或固件OTA (FOTA) 更新(有时只称为 OTA)能力。


OTA为工程师提供了根据技术和业务要求远程维护和升级其产品的能力,无需派维护人员到设备上或让终端客户主动对设备做一些更新。相反,所有这些成本都可以通过让设备在后台默默地或在半夜操作之类“停工”时间内升级其固件方式来消除。


OTA架构可以有许多不同的形式和配置,从定制的解决方案到云提供商提供的标准实现方案。图 1 中可以看到一个典型的架构实例。

article-202august-how-to-perform-fig1.jpg

图 1:OTA 架构概览展示在现场向所部署设备更新应用固件的示例过程。(图片来源:Beningo Embedded Group)


在这个例子中,一个OEM使用亚马逊网络服务 (AWS) 物联网内核上传新的固件版本,然后使用内置的作业功能将更新部署到现场的设备。这只是众多例子中的一个,几乎每个云供应商都有类似的解决方案。


今天有许多支持 OTA 的微控制器可供选择。ESP32是其中一个低成本系统和广受创客欢迎的微控制器。ESP32 之所以如此受欢迎,有以下几个原因:

●    集成了一个微控制器,并带有Wi-Fi/蓝牙认证模块

●    低成本

●    开源开发环境和软件框架,如 ESP-IDF 和 ESP 音频开发框架 (ESP-ADF)

●    许多现有的应用实例可在网上免费获得


选择一个 ESP32 模块进行 OTA 测试

有几种不同的 ESP32 模块和开发板可供用户购买,以便了解 OTA 实例。以 Adafruit 3405 ESP32 Huzzah Feather 板为例(图 2)。这是一块低成本的开发板,包括对 ESP32 进行编程的所有电路,并通过一个 USB 连接器为其供电。

article-202august-how-to-perform-fig2.jpg

图 2:3405 Huzzah Feather 板包含一个 ESP32 WROOM-32D 认证型 Wi-Fi/蓝牙模块,带 4 Mb 闪存。


3405 的核心是一个 ESP32-WROOM-32D 模块,它配备了 4 Mb 闪存、Wi-Fi、蓝牙和一套完整的外设,几乎适用于任何应用。


另一块可以使用的开发板是 Espressif Systems 的 ESP32-LYRATD-SYNA 音频板(图 3)。该开发板包括 ESP32-WROVER-B 模块。

article-202august-how-to-perform-fig3.jpg

图3 :ESP32-LYRATD-SYNA 板基于 ESP32 WROVER-B 认证型 Wi-Fi/蓝牙模块,带 4 Mb 闪存。


ESP32-LYRATD-SYNA 模块也有 4 Mb 闪存,以及用于音频应用的所有电路。该板包括一个音频编解码器、一个音频放大器以及耳机和扬声器插孔,以全面测试音频应用。


最后一块可用于 OTA 测试的开发板是 Espressif 的 ESP32-S2-SAOLA-1RI 开发板(图 4)。说到开发板,这款最便宜。该板包含一个 ESP32 Wrover 模块,以及对该芯片进行编程的电路。除了它所包含的引脚可以很容易地放到试验板上进行测试外,没有任何其他的装饰。

article-202august-how-to-perform-fig4.jpg

图 4:基于 Wrover 模块的 ESP32-S2-SAOLA-1RI 是一块裸开发板,成本低,但足以实现对板载模块编程。(图片来源:Espressif Systems)


为测试而选择的具体板子并不太重要,因为每个 ESP32 模块都利用了 ESP-IDF。这个框架旨在通过包括驱动程序、中间件、RTOS 以及对本文而言很重要的引导程序和 OTA 库,从而为开发者简化了软件开发活动。


引导程序允许开发者利用 OTA 更新,并在主要应用仍在运行时对内存进行分区以更新固件,这有助于最大限度地减少停机时间。引导程序的设置一开始可能看起来很复杂,但如果指导得当,是很简单的。


OTA开发工作过程

ESP32的OTA开发工作过程将根据业务需求和产品组件选择而略有不同。例如,一个利用 AWS 的团队可能会使用 AWS 的入门指南和例子来启动其 ESP32 OTA 解决方案。另一方面,一个正在定制自己解决方案的公司也可能会利用 ESP32 的说明文档。在这篇文章中,我们要看的是 ESP32 层面内容,而不是在云端。原因是这些内容是通用的,适用于 ESP32 的 OTA,无论使用哪个云提供商或解决方案。


一般来说,在 ESP32 上设置 OTA 更新的过程包括以下步骤:

1.    配置 ESP32 分区表

2.    下载支持 OTA 的固件

3.    开发一个工具,充当服务器,推送新的固件

4.    将最新的固件下载到 ESP32 上

5.   调换到新应用


很明显,这是简化的方法。开发人员应再次查看图 1 以了解整个固件更新过程。这个过程可能相当复杂,所以建议利用位于 GitHub上的现有 ESP32 OTA 实例。这些例子提供了几个关键实例,如:

●    HTTPS OTA

●    本地 OTA

●    简单 OTA

●    OTA 工具(python 脚本示例)


图 5 显示了部署和更新过程的步骤。开发者需要先执行红色的步骤,将 OTA 解决方案部署到 ESP32 模块上。橙色的步骤是下一步,执行这些步骤是为了推进 OTA 更新。

article-202august-how-to-perform-fig5.jpg

图 5:位于 GitHub 上的 Espressif Systems OTA 更新例子为开发者提供了几个简单的例子,以让其 ESP32 执行 OTA 更新。(图片来源:Espressif Systems)


为 OTA 配置一个 ESP32 应用程序

ESP32 包含一个分区表,描述了什么类型的数据位于微控制器上以及它的位置。例如,一个标准的 ESP32 分区表看起来像表 1。

article-202august-how-to-perform-table1.jpg

表 1:标准 ESP32 分区表显示了数据的类型及其在微控制器上的位置。(表格来源:Beningo Embedded)


有一个工厂应用,然后是 NVS 库和物理层 (PHY) 初始化 (init) 数据部分。为了使用 OTA 功能,该表需要更新,以便除了主要(工厂)应用外,还要为 OTA 更新固件指定存储器位置。对于 OTA,通常有两个分区被分配用于更新。一个是正在更新的固件,一个是正在下载的固件,它将成为最新版本。这使得工厂应用能够保持不变。更新后的 OTA 分区表将看起来像表 2。

article-202august-how-to-perform-table2.jpg

表2:典型的 ESP32 更新 OTA 分区表。(表格来源:Beningo Embedded)


如表所示,现在有一个 ota_0 和 一个ota_1 应用部分,其大小为 1Mb,此外还有一个数据部分 (otadata),是为更新过程分配的 RAM。这个表可以由开发者修改和更新,以适应应用。


为了运行 OTA 例子,有一套简单的说明,列在 GitHub 的“如何使用实例”部分。该部分描述了如何构建应用并对其进行编程。


还有 otatool,可以用来更新固件。这个脚本通常用于:

●    读取、写入和擦除 OTA 分

●    切换引导分区

●    切换到工厂分区


该示例脚本可以通过使用命令在终端运行该示例来执行。

  1. ./otatool_example.sh
复制代码

或者使用 Python。

  1. python otatool_example.py
复制代码

当谈到为 OTA 配置 ESP32 时,确保分区的设置是一个关键步骤。


使用的技巧和诀窍

EPS32 OTA 解决方案可以加速和简化开发者的固件更新方案。为了防止解决方案成为开发负担,有几个“技巧和诀窍”应该牢记在心。

●    如果可能的话,利用该公司的云供应商所包含的现有 OTA 框架。这可以极大地简化开发和集成。

●    使用低成本的开发板来测试 OTA 功能和引导程序。ESP32 有几个选项,可能需要一些实验来确定哪一个是最适合手头的应用。

●    对于定制解决方案,可利用 GitHub 上的 ESP32 OTA 实例。

●    对于产品作为 Wi-Fi 路由器或集线器的应用,考虑将固件镜像下载到外部存储器,并从大容量存储设备执行更新。

●    花一些时间查看关于分区表的 ESP32 说明文档。这与典型的微控制器实现有点不同。

●    出于安全考虑,最好禁用应用回滚。如果应用可以回滚到以前的版本,潜在的攻击者就有可能推送一个带有已知漏洞的版本,并破坏系统。


遵循这些“技巧和决窍”的开发者会发现,当他们试图利用 ESP32 或任何其他 OTA 解决方案时,他们可以节省大量的时间并免受煎熬。


结语

OTA更新是越来越多的物联网和嵌入式系统的一个重要功能。开发人员需要很好地掌握这种功能的有效实现方法,以便在设计和开发过程中以及在产品出厂后节省前期时间。


ESP32无线微控制器已经广泛用于各种类型的设备,如上所述,它有一个现成的 OTA 解决方案。通过利用 ESP-IDF 和相关的模块和平台,并使用一些基于经验的技巧和决窍,开发者可以大大减轻他们的设计时间,并完成他们的 OTA 解决方案并使之可靠地运行。


原文链接:https://www.digikey.cn/zh/articles/how-to-perform-ota-updates-using-esp32-microcontroller-and-esp-idf

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 34 | 回复: 55



手机版|

GMT+8, 2021-12-2 17:39 , Processed in 0.020274 second(s), 4 queries , Gzip On, MemCache On. Powered by Discuz! X3.4

YiBoard一板网 © 2015-2021 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表