ESP32-C3模组上跑通OTA升级(11)

接前一篇文章:ESP32-C3模组上跑通OTA升级(10)

本文内容参考:

《ESP3-C3 物联网工程开发实战》 乐鑫科技

特此致谢!

上一回说到解决了证书验证的问题,但紧接着又出现了一个新的问题:版本相同无法升级。本回就来讲解一下这个问题如何解决,并也给出正常OTA的显示。

八、程序调试过程中遇到的问题及解决

2. Current running version is the same as a new. We will not continue the update.问题

详细的问题log如下:

I (22596) esp_https_ota: Starting OTA...
I (22596) esp_https_ota: Writing to partition subtype 17 at offset 0x190000
I (22596) Wi-Fi Module: Reading Image Description
I (22606) Wi-Fi Module: Running firmware version: 1
W (22616) Wi-Fi Module: Current running version is the same as a new. We will not continue the update.
E (22626) Wi-Fi Module: image header verification failed
I (22626) Wi-Fi Module: OTA abort
E (22636) Wi-Fi Module: ESP_HTTPS_OTA upgrade failed

之所以会出现这个问题,是因为笔者之前在之前研究固件版本管理的时候(参见ESP32-C3模组上跑通OTA升级(8)-CSDN博客),在menuconfig中进行了设置,如下图所示:

制作升级文件的时候,也忘记把它去掉了。

笔者尝试了以下解决方法:

(1)在menuconfig中去掉以上选项

如下图所示:

保存退出,编译并运行。结果发现问题依旧,这个方法行不通。

(2)配置menuconfig,OTA时不进行版本检查

经过代码定位,发现以上提示信息出自于main\advanced_https_ota_example.c的validate_image_header函数中,代码片段如下:

#ifndef CONFIG_EXAMPLE_SKIP_VERSION_CHECKif (memcmp(new_app_info->version, running_app_info.version, sizeof(new_app_info->version)) == 0) {ESP_LOGW(TAG, "Current running version is the same as a new. We will not continue the update.");return ESP_FAIL;}
#endif

可以看到,版本检查时通过宏CONFIG_EXAMPLE_SKIP_VERSION_CHECK控制的。这个宏对应到menuconfig中是如下配置项:

将“Skip firmware version check”项设置为“*”即选中:

保存退出,编译并运行。结果发现是可以正常升级的,此方法行得通。

(3)将固件版本修改为不同值

本方法既无须选中“Skip fireware version check”项,也无须不勾选“Get the project version from Kconfig”项,而是将固件版本修改为不同值。如下所示:

或者

保存退出,编译并运行。结果发现是可以正常升级的,此方法也行得通。

接下来,看一下最终成功进行OTA的完整过程。完整的log如下:

……
I (10776) Wi-Fi Module: OTA started
W (10776) esp_https_ota: Continuing with insecure option because CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is set.       
I (11676) Wi-Fi Module: Connected to server
I (11676) esp_https_ota: Starting OTA...
I (11676) esp_https_ota: Writing to partition subtype 17 at offset 0x190000
I (11686) Wi-Fi Module: Reading Image Description
I (11876) Wi-Fi Module: Running firmware version: 0
I (11876) Wi-Fi Module: Verifying chip id of new image: 5
I (19926) esp_image: segment 0: paddr=00190020 vaddr=3c020020 size=0b580h ( 46464) map
I (19936) esp_image: segment 1: paddr=0019b5a8 vaddr=3fc8c800 size=0128ch (  4748)
I (19936) esp_image: segment 2: paddr=0019c83c vaddr=40380000 size=037dch ( 14300)
I (19946) esp_image: segment 3: paddr=001a0020 vaddr=42000020 size=1ec5ch (126044) map
I (19966) esp_image: segment 4: paddr=001bec84 vaddr=403837dc size=08f20h ( 36640) 
I (19976) esp_image: segment 0: paddr=00190020 vaddr=3c020020 size=0b580h ( 46464) map
I (19986) esp_image: segment 1: paddr=0019b5a8 vaddr=3fc8c800 size=0128ch (  4748)
I (19986) esp_image: segment 2: paddr=0019c83c vaddr=40380000 size=037dch ( 14300) 
I (19996) esp_image: segment 3: paddr=001a0020 vaddr=42000020 size=1ec5ch (126044) map
I (20016) esp_image: segment 4: paddr=001bec84 vaddr=403837dc size=08f20h ( 36640) 
I (20096) Wi-Fi Module: Boot partition updated. Next Partition: 17
I (20096) Wi-Fi Module: OTA finish
I (20096) Wi-Fi Module: ESP_HTTPS_OTA upgrade successful. Rebooting ...
I (21096) wifi:state: run -> init (0)
I (21096) wifi:pm stop, total sleep time: 940136 us / 17407619 usI (21096) wifi:<ba-del>idx:0, tid:0
I (21096) wifi:new:<1,0>, old:<1,1>, ap:<255,255>, sta:<1,1>, prof:1
E (21106) transport_base: poll_read select error 113, errno = Software caused connection abort, fd = 54        
E (21106) mqtt_client: Poll read error: 119, aborting connection
I (21116) wifi:flush txq
I (21116) wifi:stop sw txq
I (21116) wifi:lmac stop hw txq
I (21126) Wi-Fi Module: MQTT_EVENT_DISCONNECTED
I (21126) wifi:Deinit lldesc rx mblock:10
ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0xc (RTC_SW_CPU_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
Saved PC:0x403806bc
0x403806bc: esp_restart_noos at C:/Espressif/frameworks/esp-idf-v5.2.1/components/esp_system/port/soc/esp32c3/system_internal.c:111SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5820,len:0x1738
load:0x403cc710,len:0xb9c
load:0x403ce710,len:0x2e40
entry 0x403cc71a
I (35) boot: ESP-IDF v5.2.1-dirty 2nd stage bootloader
I (35) boot: compile time Jun  1 2024 13:49:40
I (35) boot: chip revision: v0.4
I (39) boot.esp32c3: SPI Speed      : 80MHz
I (43) boot.esp32c3: SPI Mode       : DIO
I (48) boot.esp32c3: SPI Flash Size : 4MB
I (53) boot: Enabling RNG early entropy source...
I (58) boot: Partition Table:
I (62) boot: ## Label            Usage          Type ST Offset   Length
I (69) boot:  0 nvs              WiFi data        01 02 00009000 00004000
I (77) boot:  1 otadata          OTA data         01 00 0000d000 00002000
I (84) boot:  2 phy_init         RF data          01 01 0000f000 00001000
I (91) boot:  3 ota_0            OTA app          00 10 00010000 00180000
I (99) boot:  4 ota_1            OTA app          00 11 00190000 00180000
I (106) boot:  5 nvs_2            WiFi data        01 02 00310000 0004b000
I (114) boot: End of partition table
I (118) esp_image: segment 0: paddr=00190020 vaddr=3c020020 size=0b580h ( 46464) map
I (134) esp_image: segment 1: paddr=0019b5a8 vaddr=3fc8c800 size=0128ch (  4748) load
I (136) esp_image: segment 2: paddr=0019c83c vaddr=40380000 size=037dch ( 14300) load
I (146) esp_image: segment 3: paddr=001a0020 vaddr=42000020 size=1ec5ch (126044) map
I (172) esp_image: segment 4: paddr=001bec84 vaddr=403837dc size=08f20h ( 36640) load
I (183) boot: Loaded app from partition at offset 0x190000
I (183) boot: Disabling RNG early entropy source...
I (194) cpu_start: Unicore app
I (203) cpu_start: Pro cpu start user code
I (203) cpu_start: cpu freq: 160000000 Hz
I (203) cpu_start: Application information:
I (206) cpu_start: Project name:     Wi-Fi_InterMediator
I (212) cpu_start: App version:      1
I (216) cpu_start: Compile time:     May 31 2024 09:08:42
I (222) cpu_start: ELF file SHA256:  19a43d3f1...
Warning: checksum mismatch between flashed and built applications. Checksum of built application is 5613e903b84aab210bbe7593a85bec2bcddb198640f2b72ae57a5d604852e29e
I (228) cpu_start: ESP-IDF:          v5.2.1-dirty
I (233) cpu_start: Min chip rev:     v0.3
I (238) cpu_start: Max chip rev:     v1.99
I (243) cpu_start: Chip rev:         v0.4
I (248) heap_init: Initializing. RAM available for dynamic allocation:
I (255) heap_init: At 3FC8EA40 len 000315C0 (197 KiB): RAM
I (261) heap_init: At 3FCC0000 len 0001C710 (113 KiB): Retention RAM
I (268) heap_init: At 3FCDC710 len 00002950 (10 KiB): Retention RAM
I (275) heap_init: At 50000010 len 00001FD8 (7 KiB): RTCRAM
I (282) spi_flash: detected chip: generic
I (286) spi_flash: flash io: dio
I (290) sleep: Configure to isolate all GPIO pins in sleep state
I (296) sleep: Enable automatic switching of GPIO sleep configuration
I (304) main_task: Started on CPU0
I (304) main_task: Calling app_main()
I (304) Wi-Fi Module: OTA example app_main start
uart_resp_data is: report event 0

这里要特别说明一下。网上也有很多博客给出了OTA的log,但是都没有动态地即描述。在这里笔者更为深入地描述一下过程。

从收到升级命令开始(打印输出“OTA Started”)到“Verify chip id of new image”这一段很快。 

但是“Verify chip id of new image”这一个动作停顿时间较长,在笔者这里是20秒左右,之后再往下进行(从上边log中的时间戳上也能看出来)。接下来就是:

准备重启了。重启的同时MQTT任务也会出现中止的提示,链接也会断开。

接下来就差不多该启动的log输出了:

这就是完整且正常的OTA过程。

至此,本系列(ESP32-C3模组上跑通OTA升级)的内容就全部讲完了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT等比例缩放图片

1、这里使用QLabe控件显示图片&#xff0c;如下&#xff1a; label->setPixmap(QPixmap::fromImage(image_2)); 以上是直接原始大小来显示QImage image_2图片。 label->setAlignment(Qt::AlignCenter); 以上代码&#xff0c;是将显示的图片居中展示&#xff0c;默认…

Vue3-Pinia(大菠萝)附源码

文章目录 Pinia 开源地址Pinia 定义与起源优点与特性Pinia使用准备一个小模块(可参考以下程序)搭建 pinia 环境存储读取数据修改数据(三种方式)storeToRefsgetters$subscribestore组合式写法 更多相关内容可查看 Pinia 开源地址 git地址&#xff1a;https://gitee.com/its-a-l…

干货分享 | 详解TSMaster CAN 与 CANFD 的 CRCE2E 校验方法

面对切换工具链的用户来说&#xff0c;在 TSMaster 上完成总线通讯中的 CRC/E2E 校验处理不是特别熟悉&#xff0c;该文章可以协助客户快速使用 TSMaster 完成 CAN/CAN FD 总线通讯的 CRC/E2E 校验。 本文关键字&#xff1a;TSMaster&#xff0c;CAN/CANFD&#xff0c;CRC 校验…

RK3588平台编译zlog 日志模块

下载zlog之后 解压 进入zlog目录 新建一个build_rk3588.sh脚本 内容如下 make CCaarch64-linux-gcc PREFIX./install_rk3588 将工具链导入环境变量 export PATH/home/QMCY/RK3588/arm64tools/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/:$PATH 编译无问题 产生的…

【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日内容 二、&#x1f30f;前端页面的改造 2.1新增电子书管理页面 2.2新增路由规则 2.3修改the-header代码 三、&#x1f697;SpringBoot后端Ebook模块改造 3.1增加电子书增/改接口 3.1.…

基于SpringBoot+Vue租房网站设计和实现(源码+LW+部署文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

基于全志T507-H的Igh EtherCAT主站案例分享

基于全志T507-H的Linux-RT IgH EtherCAT主站演示 下文主要介绍基于全志T507-H&#xff08;硬件平台&#xff1a;创龙科技TLT507-EVM评估板&#xff09;案例&#xff0c;按照创龙科技提供的案例用户手册进行操作得出测试结果。 本次演示的开发环境&#xff1a; Windows开发环…

【二进制部署k8s-1.29.4】九、cilium1.15.4安装

文章目录 简介 一.安装helm和cilium 客户端命令二.安装cilium2.1.安装cilium对于系统内核的版本的要求2.2.安装的命令及参数如下&#xff1a;参数注释&#xff1a; 三.确认cilium的安装状态四.访问cilium的监控页面hubble-ui 简介 本章节主要讲解k8s集群网络插件cni的安装&…

react-native运行程序 出现 Application XXX is waiting for the debugger

1.重启adb: adb kill-server、 adb start-server. 2、确定USB调试模式是否开启&#xff0c;如果已经开启了&#xff0c;关闭了重新打开一下 3.选择调试模式并关闭等待调试程序

STM32(十):SPI (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中USART通信协议来串口通信&#xff0c;并向XCOM串口助手发送信息。这篇文章我们来介绍一下如何用STM32单片机中SPI接口来实现LED的闪亮并玩转WS2812B灯带。 一、实验原理 串行通信之前的博客里有所介绍&#xff0c;可以查看以下…

故障预警 vs 故障分类:哪个更有意义,哪个更具挑战性?

故障预警 vs 故障分类&#xff1a;哪个更有意义&#xff0c;哪个更具挑战性&#xff1f; 在现代工业系统中&#xff0c;风力发电机、制造设备等关键装置的可靠性和稳定性对生产效率至关重要。为此&#xff0c;故障预警和故障分类成为保障设备正常运行的重要手段。那么&#xf…

UI案例——登陆系统

UI的登陆界面实例 在学习了UILabel&#xff0c;UIButton&#xff0c;UIView&#xff0c;UITextField的内容之后&#xff0c;我们就可以写一个简单的登陆界面 我们可以通过UILabel来编写我们显示在登陆界面上的文字比方说下面这两行字就是通过UILabel去实现的。 下面给出一下实现…

每日5题Day17 - LeetCode 81 - 85

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;81. 搜索旋转排序数组 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean search(int[] nums, int target) {int n nums.length;if (n…

【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)

一、安装软件 Navicat&#xff0c;SQLyog 这些软件都不错&#xff0c;不过都需要收费&#xff0c;当然也有破解版。下面用 MySQL Workbench&#xff0c;它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端&#xff0c;现在要让数据库能够远程登录。不过一般不会远程…

Love-Yi情侣网站3.0存在SQL注入漏洞

目录 1. 前言 2. 网站简介 3. 寻找特征点 3.1 第一次尝试 3.2 第二次尝试 4.资产搜索 5.漏洞复现 5.1 寻找漏洞点 5.2 进行进一步测试 5.2.1 手动测试 1.寻找字段 2.寻找回显位 3.查询当前用户 5.2.2 sqlmap去跑 6.总结 1. 前言 朋友说自己建了一个情侣网站,看到…

Golang省市二级联动实现 从数据收集、清洗到数据存储

1.背景&#xff1a; 最近在写项目&#xff0c;在项目中有一个需求是获取用户的地理位置&#xff0c;一开始是打算让前端使用JSON包的形式去实现&#xff0c;但是考虑到后期可能需要对省市的数据做一些修改和控制操作&#xff0c;所以改为后端实现&#xff0c;并向后台暴露一套…

密码加密及验证

目录 为什么需要加密&#xff1f; 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密&#xff1f; 在MySQL数据库中&#xff0c;我们常常需要对用户密码、身份证号、手机号码等敏感信息进…

【数据结构】树与二叉树——树的基本概念

树的基本概念 导读一、树的定义二、树的基本术语2.1 结点之间的关系2.2 基本概念2.3 度为m的树与m叉树 三、树的性质结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 从今天开始&#xff0c;我们将进入第五章的内容——树与二叉树的学…

微服务:Rabbitmq的WorkQueue模型的使用、默认消费方式(消息队列中间件)

文章目录 WorkQueue模型控制预取消息个数 WorkQueue模型 当然&#xff0c;一个队列&#xff0c;可以由多个消费者去监听。 来实现一下. 生产者&#xff1a; Testpublic void testWorkQueue() throws InterruptedException {// 队列名称String queueName "simple.queue…

NoSQL实战(MongoDB搭建主从复制)

什么是复制集&#xff1f; MongoDB复制是将数据同步到多个服务器的过程&#xff1b; 复制集提供了数据的冗余备份并提高了数据的可用性&#xff0c;通常可以保证数据的安全性&#xff1b; 复制集还允许您从硬件故障和服务中断中恢复数据。 保障数据的安全性 数据高可用性 (2…