支持@@ OTA 更新@@的@@@@MCU很多@@ 为@@何@@ ESP32这么受欢迎@@?

作者@@: Jacob Beningo,来源@@:得捷电子@@@@DigiKey微信公众号@@

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

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

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

OTA 更新@@介绍@@

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

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

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

图@@ 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 连接器为@@其供电@@。


    图@@ 2:3405 Huzzah Feather 板包含一个@@@@ ESP32 WROOM-32D 认证型@@ Wi-Fi/蓝牙模块@@@@,带@@ 4 Mb 闪存@@。该板包括所有@@必要的@@硬件@@,可通过@@ USB 编程和@@与模块@@通信@@。(图@@片@@来源@@@@:Adafruit)

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

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


    图@@3 :ESP32-LYRATD-SYNA 板基于@@@@ ESP32 WROVER-B 认证型@@ Wi-Fi/蓝牙模块@@@@,带@@ 4 Mb 闪存@@。除了能够让设计者通过@@ USB 编程和@@与模块@@通信@@外@@,它还具有@@开发音频应用所需的@@电路@@。(图@@片@@来源@@@@:Espressif Systems)

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

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


    图@@ 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 更新@@的@@@@过程包括以@@下步骤@@:

  • 配置@@ ESP32 分区@@表@@@@
  • 下载支持@@@@ OTA 的@@固件@@
  • 开发一个@@工具@@@@,充当服务器@@,推送新的@@固件@@@@
  • 将@@最新的@@固件@@下载到@@ESP32 上@@
  • 很明显@@,这是简化的@@方法@@。开发人员应再次查看图@@@@ 1 以@@了解整个固件更新@@过程@@。这个过程可能相当复杂@@,所以@@建议利用位于@@@@ GitHub 上@@的@@@@现有@@@@ ESP32 OTA 实例@@。这些例子@@提供了几个关键实例@@@@,如@@:

  • HTTPS OTA
  • 本地@@ OTA
  • 简单@@ OTA
  • OTA 工具@@(python 脚本示例@@)
  • 调换到新应用@@
  • 图@@ 5 显示了部署和@@更新@@过程的@@步骤@@。开发者需要先执行@@红色的@@步骤@@,将@@ OTA 解决方案@@部署到@@ ESP32 模块@@上@@@@。橙色的@@步骤是下一步@@,执行@@这些步骤是为@@了推进@@ OTA 更新@@。


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

    为@@ OTA 配置@@一个@@@@ ESP32 应用程序@@

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


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

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

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

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

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

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

  • 读取@@、写入和@@擦除@@OTA 分区@@
  • 切换引导分区@@@@
  • 切换到工厂@@分区@@@@
  • 该示例脚本可以@@通过使用命令在@@终端运行该示例来执行@@@@。
    ./otatool_example.sh

    或@@者使用@@Python。
    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 解决方案@@并使之可靠地运行@@。