ESP32C3固件更新

固件更新

OTA升级机制允许设备在正常运行时接收新固件,并将新固件写入当前未运行的应用程序分区,在校验固件有效后,切换至新固件运行。OTA升级的基本步骤如图所示。


在这里插入图片描述

从图可以看出,OTA升级的基本步骤如下:

  • 云服务器向设备推送OTA升级信息
  • 设备对云服务器身份进行验证,从受信任的云服务器中下载固件
  • 根据下载固件中的版本信息,设备决定是否进行升级,如果决定升级,则请求固件,并将固件写入Flash后对其进行校验,校验成功后切换至新的固件运行

分区表概述

ESP-IDF的分区表是指在用户层面将Flash不同位置、范围划分为特定功能的描述文件。以ESP-IDF中partition_table组件下的partitions_two_ota.csv文件为例:

# Name,   Type, SubType, Offset,   Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     ,        0x4000,
otadata,  data, ota,     ,        0x2000,
phy_init, data, phy,     ,        0x1000,
factory,  app,  factory, ,        1M,
ota_0,    app,  ota_0,   ,        1M,
ota_1,    app,  ota_1,   ,        1M,

从上面的例子可以看到,分区表每个条目都是由Name、Type、SubType、Offset、Size、Flags构成的。

  • Name字符用于标识名称,不应超过16B
  • Type字段既可以指定app或者data,也可以直接使用0-254(0x00~0xFE),主要用于标记存储的内容是应用固件还是数据
  • SubType字段的长度为8bit,具体标记内容与Type字段有关

  1. 当Type定义为app时,SubType字段可以指定为factory(0x00)、ota_0(0x10)、… 、ota_15(0x1F)或者test(0x20)。
  2. 当Type定义为data时,SubType字段可以指定为ota(0x00)、phy(0x01)、nvs(0x02)、nvs_keys(0x04)或者其他组件特定的子类型。
  • Offset与Size字段用于划分一个特定的区域
  • Flags字段用于标记是否加密

该示例分区表中的Offset未填写任何数值,但依旧是有效的分区表,这是因为分区表首个条目的位置是确定的,所以可以通过前一个条目的Size字段计算出后续条目的地址。如果分区表划分的每个条目地址不是连续的,此时就需要通过Offset来标记每个条目的起始地址。为了方便理解,可以参考下图。


在这里插入图片描述


从上图可以看出,分区表首个条目的起始地址为0x9000,即partitions_two_ota.csv中Name为nvs条目的Offset字段是0x9000,该条目的大小为0x4000,根据之前介绍的计算规则,下一个条目的Offset为0xd000,依次计算,最后一个ota_1条目的Offset为0x210000。

partitions_two_ota.csv分区表划分了6个区域:3个数据分区nvs、otadata、phy_init分别用于存储nvs数据、OTA升级数据、PHY初始化数据;3个应用分区分别存储了3个不同的应用固件。从OTA升级的基本步骤可知,要进行OTA升级,至少需要包括两个OTA升级应用分区-Type(app),SubType(ota_0/ota_1),同时也包含一个可选的应用分区,出厂应用分区-Type(app)、SubType(factory)。

  • OTA升级数据分区用于存储当前所选的OTA升级应用分区的信息,第一次OTA升级后,OTA升级数据分区数据将被更新,指定下一次启动哪个OTA升级应用分区。OTA升级数据分区的大小需要设定为0x2000,用于防止写入时电源故障引发问题,两个扇区单独擦除、写入匹配数据,若存在不一致,则用计数器字段将判定哪个扇区为最新数据。

  • 应用分区用于存储固件,出场应用分区是默认的应用分区,如果不存在OTA升级数据分区或者OTA升级数据分区无效,则优先使用出厂应用分区的固件(如果存在),其次使用OTA升级数据分区的固件。OTA升级永远都不会更新出厂应用分区中的内容。

固件启动流程

从下图可以看出,Flash被分为了8个区域,0x00地址存放了Bootloader(启动加载程序),0x8000存放了分区表,从0x9000开始便是分区表所划分的区域。在乐鑫科技的芯片程序设计中,Bootloader被称为二级引导程序,其主要作用为增加Flash分区的灵活性,并且方便实现Flash加密、安全引导和OTA升级等功能。二级引导程序默认从Flash的0x8000偏移地址处加载分区表,分区表的大小为0x1000,二级引导程序会从分区表中寻找出厂应用分区和OTA升级数据分区,并通过查询OTA升级数据分区来确定引导哪个分区。


在这里插入图片描述


ESP32-C3从上电到运行app_main()函数的过程可以分为如下3个步骤:

  • 由一级引导程序进行引导。一级引导程序被固化在了ESP32-C3内部的ROM中,芯片复位后,CPU会立即开始运行,判断启动模式并执行相关操作,从Flash的0x0偏移地址处将二级引导程序加载到RAM中。

  • 由二级引导程序进行引导。二级引导程序将首先从Flash中加载分区表,然后查询OTA升级数据分区,并选择某个应用分区的固件进行加载。当处理完所有数据后,二级引导程序将校验固件的完整性,并从二进制固件文件的头部寻找入口地址,跳转到该地址处运行。应用分区的固件拥有一些状态,这些状态会影响固件的启动。这些状态保存在OTA升级数据分区,在ESP-IDF中由一组枚举变量(esp_ota_img_states_t)定义。

  • 应用程序启动阶段。二级引导程序跳转后便是应用固件的启动阶段,该阶段包含了从应用程序开始执行到app_main()函数创建运行前的所有过程。可分为三个部分:

    1. 硬件和基本端口的初始化。
    2. 软件服务和FreeRTOS系统的初始化。
    3. 运行主任务并调用app_main()函数

OTA升级原理概述

物联网设备进行OTA升级的第一步是获取新固件。获取新固件的方式有很多,使用Wi-Fi获取是其中较为简单、方便的一种方式。物联网设备可以通过Wi-Fi连接到路由器,进而连接到OTA升级服务器,通过一些应用层协议(如HTTP、FTP)下载固件。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Blinker ESP32C3 是一款基于 ESP32C3 开发的物联网解决方案,它能够帮助用户实现设备与云端的连接和通信。 Blinker ESP32C3 提供了丰富的功能,使得用户可以方便地构建智能设备并加入到物联网中。它支持多种传感器和执行器,例如温湿度传感器、开关、继电器等,可以满足各种不同的应用场景需求。 Blinker ESP32C3 的优点在于其简单易用的开发和部署过程。它提供了完整的软硬件方案和示例代码,开发者只需按照文档指引进行简单的配置和编程,即可实现设备的连接和数据交互。同时,Blinker ESP32C3 还提供了跨平台的移动端 APP 和 Web 控制台,用户可以通过这些工具来管理和控制设备。 另外,Blinker ESP32C3 还支持OTA(远程升级)功能,用户可以利用这一功能来远程升级设备的固件,无需人工干预。这个功能非常有用,可以帮助用户及时修复和改进设备的功能。 总之,Blinker ESP32C3 是一款功能强大且简单易用的物联网解决方案。它能够帮助用户快速构建智能设备,并实现设备与云端的连接和通信。无论是个人项目还是商业应用,Blinker ESP32C3 都能够提供可靠的解决方案。 ### 回答2: blinker esp32c3是一款基于ESP32-C3芯片的物联网开发板,具有内置WiFi和蓝牙功能。它采用了迅捷的双核处理器,可在较低的功耗下实现高性能的应用。该开发板还配备了丰富的外设接口和引脚,可连接各种传感器和执行器,实现灵活多样的物联网应用。 blinker esp32c3支持Blinker智能家居平台,通过与Blinker app配合使用,用户可以方便地实现物联网设备的远程控制和监测。同时,Blinker平台还提供了丰富的应用和功能模块,用户可以通过简单的拖拽操作就能快速定制个性化的物联网应用。 这款开发板还支持Arduino编程环境,开发者可以使用C++语言编写代码,实现各种功能。同时,ESP-IDF编程工具链也可以用于高级开发,提供了更丰富的底层功能和灵活性。 blinker esp32c3在物联网应用开发领域有着广泛的应用,可以用于智能家居、工业自动化、农业监测、环境监测等各种场景。该开发板具有易用性、稳定性和高性能的特点,可以帮助开发者快速搭建物联网系统,实现智能化的控制和监测。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值