ESP32

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

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

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

OTA 更新介绍

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

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

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

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

2.jpg

图 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.jpg

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

  • 配置 ESP32 分区表

  • 下载支持 OTA 的固件

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

  • 将最新的固件下载到ESP32 上

  • 调换到新应用

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

  • HTTPS OTA

  • 本地 OTA

  • 简单 OTA

  • OTA 工具(python 脚本示例)

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

5.jpg

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

为 OTA 配置一个 ESP32 应用程序

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

6.jpg

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

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

7.jpg

表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 解决方案并使之可靠地运行。

来源:得捷电子DigiKey(作者:Jacob Beningo)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 33

01 、前言 

STM32:意法半导体在 2007 年 6 月 11 日发布的产品,32位单片机。

GD32:兆易创新 2013 年发布的产品,在芯片开发、配置、命名上基本模仿 STM32,甚至 GPIO 和 STM32 都是 pin to pin 的,封装不改焊上去直接用。有时候 STM32 的源码不修改,重新编译烧写到 GD32 上就可以跑。当然也有很多不同,比如串口驱动、USB 、库文件等。

ESP32:乐鑫公司 2017 年开发的产品,和 STM32、GD32 不同,ESP32 主要面向物联网领域,支持功能很多,但引出 GPIO pin 脚很少,因此大多数 GPIO 都有很多复用功能。出厂就集成蓝牙、WiFi 等物联网必备功能,板子也很小,适合物联网。

02 、GD32 和 STM32 的区别

GD32 是国产单片机,据说开发人员来自ST公司,GD32 也是以 STM32 作为模板做出来的。所以 GD32 和 STM32 有很多地方都是一样的,不过 GD32 毕竟是不同的产品,不可能所有东西都沿用 STM32,有些自主开发的东西还是有区别的。不同的地方如下:

1内核

GD32 采用二代的 M3 内核,STM32 主要采用一代 M3 内核,下图是 ARM 公司的 M3 内核勘误表,GD 使用的内核只有 752419 这一个 BUG。

1.png

2主频

使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M

使用HSI(高速内部时钟):GD32的主频最大108M,STM32的主频最大64M

主频大意味着单片机代码运行的速度会更快,项目中如果需要进行刷屏,开方运算,电机控制等操作,GD 是一个不错的选择。

3供电

外部供电:GD32 外部供电范围是 2.6~3.6V,STM32 外部供电范围是2.0~ 3.6V或1.65~ 3.6V。GD 的供电范围比 STM32 相对要窄一点。

内核电压:GD32 内核电压是 1.2V,STM32 内核电压是 1.8V。GD 的内核电压比 STM32 的内核电压要低,所以 GD 的芯片在运行的时候运行功耗更低。

4Flash差异

GD32 的 Flash 是自主研发的,和 STM32 的不一样。

GD Flash 执行速度:GD32 Flash 中程序执行为 0 等待周期。

STM32 Flash 执行速度:ST 系统频率不访问 flash 等待时间关系:0 等待周期,当 0<SYSCLK<24MHz,1 等待周期,当 24MHz<SYSCLK≤48MHz,2 等待周期,当 48MHz<SYSCLK≤72MHz。

Flash 擦除时间:GD 擦除的时间要久一点,官方给出的数据是这样的:GD32F103/101 系列 Flash 128KB 及以下的型号, Page Erase 典型值 100ms, 实际测量 60ms 左右。对应的 ST 产品 Page Erase 典型值 20~40ms。

5功耗

从下面的表可以看出 GD 的产品在相同主频情况下,GD 的运行功耗比 STM32小,但是在相同的设置下 GD 的停机模式、待机模式、睡眠模式比 STM32 还是要高的。

2.png

6串口

GD 在连续发送数据的时候每两个字节之间会有一个 Bit 的 Idle,而 STM32 没有,如下图:

3.png

GD 的串口在发送的时候停止位只有 1/2 两种停止位模式。STM32 有 0.5/1/1.5/2 四种停止位模式。

GD 和 STM32 USART 的这两个差异对通信基本没有影响,只是 GD 的通信时间会加长一点。

7ADC 差异

GD 的输入阻抗和采样时间的设置和 ST 有一定差异,相同配置 GD 采样的输入阻抗相对来说要小。具体情况见下表这是跑在 72M 的主频下,ADC 的采样时钟为 14M 的输入阻抗和采样周期的关系:

4.png

8FSMC

STM32 只有 100Pin 以上的大容量(256K及以上)才有 FSMC,GD32 所有的 100Pin 或 100Pin 以上的都有 FSMC。

9103 系列 RAM&FLASH 大小差别

GD103 系列和 ST103 系列的 ram 和 flash 对比如下图:

5.png

10105&107系列STM32和GD的差别

GD的105/107的选择比ST的多很多,具体见下表:

6.png

11)抗干扰能力

GD 的抗干扰能力不如 STM32,还需要一定打磨。

04、ESP32 和 STM32

ESP32 是乐鑫公司推出的一款采用两个哈佛结构 Xtensa LX6 CPU 构成的拥有双核系统的芯片。所有的片上存储器、片外存储器以及外设都分布在两个 CPU 的数据总线和/或指令总线上。

相比于 STM32 的一个大家族,ESP32 虽然也代表一个系列,但目前来说,这个系列的成员还是比较少的,我们看下:

7.png

资源如下:

8.png

9.png

10.png

功能框图如下:

11.png

模块(非芯片)的引脚分布如下:

12.png

ESP32 这个模块的 IO 并不多,估计也就 30 个左右(芯片有34个,但是模块中外接 FLASH 用掉了一些)。但是你会发现它有几个特点:

1、集成了非常多的外设接口,SPI、IIC、IIS、AD、DA、PWM、IR、UART、CAN等等。IO 数量有限,所以基本上每个 IO 都有多个功能。

2、片内flash和ram很大,flash有448KB,ram有520KB。而模块上直接挂了一个4MB的flash。

3、速度快!虽然外接晶体的频率只有40MHZ,但通过内部主频可以支持80MHZ、160MHZ、240MHZ,运算能力高达600MIPS。

4、有wifi和蓝牙!当前两者不能同时使用。

STM32 和 ESP32 基本是有各自不同的定位。ESP32 偏向体积小巧、速度超快、功能强大,通过 wifi 接入网络,专门为物联网而生;而 STM32 偏向管脚丰富、功能全面,虽然没有 wifi 和蓝牙,速度也没有 ESP32 快,但是可以通过网口接入网络,可以控制更多的外设,为消费电子和工业控制而生。

05、总结

STM32 和 GD32 是同质化产品,区别一个是国外,一个是国产,最近流行国产化替代,所以 GD32 还是很有发展前景的。

物联网也是一个好方向,因此 ESP32 也是很有前景的。

来源:电子工程师笔记

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 97
订阅 RSS - ESP32