0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

得捷电子DigiKey 来源:未知 2023-11-01 20:30 次阅读

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

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

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

OTA 更新介绍

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

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

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

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

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

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

  • 它有一个集成的微控制器,有 Wi-Fi/蓝牙认证模块可用

  • 低成本

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

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

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

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

wKgaomVCRfyAVQ5bAAQR0TIhDZU276.png图 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模块。

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

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

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

wKgaomVCRfyAaBWiAATAC93f6fY352.png图 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 更新。wKgaomVCRfyAJCvVAASUAjNzucg002.png图 5:位于GitHub 上的 Espressif Systems OTA 更新例子为开发者提供了几个简单的例子,以让其 ESP32 执行 OTA 更新。(图片来源:Espressif Systems)

为 OTA 配置一个 ESP32 应用程序

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

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

wKgaomVCRf2AGXCSAAFZaW0t8Gs808.png表2:典型的 ESP32 更新 OTA 分区表。(表格来源:Beningo Embedded)如表所示,现在有一个ota_0 和 一个ota_1 应用部分,其大小为 1Mb,此外还有一个数据部分 (otadata),是为更新过程分配的 RAM。这个表可以由开发者修改和更新,以适应应用。

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

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

  • 读取、写入和擦除OTA 分区

  • 切换引导分区

  • 切换到工厂分区
该示例脚本可以通过使用命令在终端运行该示例来执行。

./otatool_example.sh

或者使用Python。

pythonotatool_example.py

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

使用的技巧和诀窍

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

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

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

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

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

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

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

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

结语

OTA 更新是越来越多的物联网和嵌入式系统的一个重要功能。开发人员需要很好地掌握这种功能的有效实现方法,以便在设计和开发过程中以及在产品出厂后节省前期时间。ESP32 无线微控制器已经广泛用于各种类型的设备,如上所述,它有一个现成的OTA 解决方案。通过利用 ESP-IDF 和相关的模块和平台,并使用一些基于经验的技巧和决窍,开发者可以大大减轻他们的设计时间,并完成他们的 OTA 解决方案并使之可靠地运行。

秘技知识学不停 专属福利享不停

就等您加入!

点此登记

赚积分、换好礼

立即到「会员权益」查看您的礼遇! 如有任何问题,欢迎联系得捷电子DigiKey的客服团队

中国(人民币)客服

wKgaomVCRf2AWlNjAAADBaTNctA797.png400-920-1199wKgaomVCRf6ABJDUAAADAQryhLs407.png服务支持 > 联系客服 > 微信客服wKgaomVCRf6AcXgTAAADNUSMvSY694.pngservice.sh@digikey.comwKgaomVCRf6AboFsAAACyRJDcPk772.png QQ在线实时咨询:4009201199

中国(美金)/ 香港客服

wKgaomVCRf2AWlNjAAADBaTNctA797.png

400-882-4440

wKgaomVCRf2AWlNjAAADBaTNctA797.png852-3104-0500wKgaomVCRf6AcXgTAAADNUSMvSY694.pngchina.support@digikey.comwKgaomVCRf6ADQsvAACBLhwpIzY806.png

wKgaomVCRf6AM3_bAAJQEo9UZ9g111.png

点击下方“阅读原文”查看更多

让我知道你在看wKgaomVCRf-ADn5bAAAD385SHbk553.png


原文标题:支持 OTA 更新的MCU很多 为何 ESP32这么受欢迎?

文章出处:【微信公众号:得捷电子DigiKey】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 得捷电子
    +关注

    关注

    1

    文章

    255

    浏览量

    8632

原文标题:支持 OTA 更新的MCU很多 为何 ESP32这么受欢迎?

文章出处:【微信号:得捷电子DigiKey,微信公众号:得捷电子DigiKey】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    esp8266和esp32区别是什么

    的内存选项,包括最小512KB的RAM和最大16MB的闪存。 Wi-Fi和蓝牙 : ESP8266 :支持2.4GHz Wi-Fi。 ESP32支持2.4GHz Wi-Fi和蓝牙5
    的头像 发表于 08-19 18:16 4253次阅读

    esp32用什么软件编程

    。 概述 ESP32具有丰富的外设接口和灵活的编程方式,支持多种编程语言和开发环境。本文将详细介绍ESP32的编程软件,包括开发环境、编程语言、库函数、开发工具等。 开发环境 2.1 Arduino IDE Arduino ID
    的头像 发表于 08-19 17:24 2770次阅读

    esp32c3 OTA镜像错误的原因?

    使用的是esp32c3参考的例程是 native_ota_example 错误日志如下 2024-07-03 09:41:17 E (24704) esp_ota_ops: OTA i
    发表于 07-19 06:50

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么区别?ESP32-WROOM-32 后缀字母代表的意思是?

    相信很多人心里都有这样的疑问,今天就教大家怎么区分它们。 32D和32U是同一个芯片ESP32-D0WD的模组,主要区别的天线模式,分别是板载和IPEX外接天线。 32E是用的升级版的芯片
    的头像 发表于 07-17 10:09 7538次阅读
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么区别?<b class='flag-5'>ESP32</b>-WROOM-32 后缀字母代表的意思是?

    请问怎么使用ardunio工程打开esp32-cam的menuconfig使能OTA

    我的esp32-cam想实现OTA升级,结果发现系统的OTA支持好像没打开。 但是由于IDE使用的ardunio,工程配置和分区表和idf的工程都不一样。 请问怎么样才能打开men
    发表于 06-20 07:44

    ESP32-S2-Kaluga-1更新了重新编译的camera代码,比出厂时噪点多很多怎么解决?

    ESP32-S2-Kaluga-1 更新了重新编译的git上camera的代码, 发现屏幕上的图像比出厂时噪点多很多,颗粒大很多,请问是哪里配置需要修改呢? 感谢!
    发表于 06-19 07:15

    请问ESP32是否支持串口在线升级?

    请问ESP32是否支持串口在线升级。对OTA升级例程进行修改,将http传输改为串口传输,是否可行。
    发表于 06-18 06:30

    请问esp32 ota升级如何获取更新进度?

    所用的是esp32-s2 idf:4.4调用esp_https_ota API进行固件升级,想获取更新进度,但不知道怎么实现,有人做过或者有思路指点一下吗?
    发表于 06-14 07:20

    esp32s3进行https-OTA时,出现wifi:m f null更新失败怎么解决?

    使用的IDF为4.4.3,芯片为esp32s3F4R2.在进行https-ota时,进行到esp_https_ota_begin()出现了wifi:m f null的log然后HTTPS OT
    发表于 06-13 08:27

    ESP32对Flash加密后能否使用OTA进行后续的维护更新

    ESP32对Flash加密后能否使用OTA进行后续的维护更新
    发表于 06-07 08:21

    请问ESP32S3的OTA过程是否支持保存烧写进度,掉电重启后从掉电前位置开始烧写?

    请问ESP32S3的OTA过程是否支持保存烧写进度,掉电重启后从掉电前位置开始烧写? 例如OTA数据共需要20帧进行传输,传输了10帧数据并通过e
    发表于 06-05 08:10

    借助ESP32-S3主控MCU、ChirpLAN™小网关搭建大网络

    借助先进的ESP32-S3主控MCU,ChirpLAN™小网关为您带来前所未有的网络体验。
    的头像 发表于 03-14 10:02 916次阅读

    ESP32-P4开发板问题揭秘!

    导读ESP32-P4是一款高性能MCU支持超大片上内存,具有强大的图像和语音处理能力。该款MCU包含一个高性能(HP)系统和一个低功耗(LP)系统。HP系统由RISC-V双核处理器驱
    的头像 发表于 02-24 08:03 1658次阅读
    <b class='flag-5'>ESP32</b>-P4开发板问题揭秘!

    如何从ESP32中删除OTA

    通过 Arduino IDE 和示例等对 ESP32 Dev 32 模块进行了一些 OTA 测试,一切正常。 现在我们想恢复到正常的串行/USB 编程,虽然我们似乎可以编程一个新程序,但它只是恢复到现有的 OTA 程序。 有没有
    发表于 01-31 07:37

    ESP32-C3模块使用问题集锦| C3的串口日志该如何禁用?

    ESP32-C3因为功能强大、低功耗一直广受欢迎,客户在使用过程中,也是有很多疑问。下面小启整理了一些C3模块实际应用客户遇到的问题,做出解答,大家如果也有关于C3模块的问题,可以评论区提出来
    的头像 发表于 01-09 08:03 839次阅读
    <b class='flag-5'>ESP32</b>-C3模块使用问题集锦| C3的串口日志该如何禁用?