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,一经查实,立即删除!

相关文章

查找最小的K个元素

输入n个正整数&#xff08;可以有重复的情况出现&#xff09;&#xff0c;输出其中最小的k个&#xff08;如有重复的情况出现&#xff0c;重复输出&#xff09;&#xff0c;其中1≤k≤n≤10000&#xff0c;每个正整数小于10000。 例如输入1、4、8、2、5、7、6、3这8个数字&…

QT等比例缩放图片

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

PostgreSQL查看当前锁信息

PostgreSQL查看当前锁信息 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777查看当前锁信息的sql SELECT pg_s…

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开发环…

数据库----1

一、MVCC多版本并发控制 MVCC&#xff0c;多版本并发控制是现代数据库引擎中常用的处理读写冲突的手段&#xff0c;目的在于提高数据库高并发场景下的吞吐性能。&#xff08;可以用来解决可重复读的问题&#xff09; 二、数据库ACID实现原理 MYSQL通过支持ACID原理来保证事务…

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

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

mysql GROUP BY 语句报错处理

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘test.test_baobiao.qty’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by, Time: 0.00000…

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

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

kaggle竞赛实战7——其他方案之lightgbm

本文换种方案&#xff0c;用wrapperlightgbm建模TPE调优 接下来是特征筛选过程&#xff0c;此处先择使用Wrapper方法进行特征筛选&#xff0c;通过带入全部数据训练一个LightGBM模型&#xff0c;然后通过观察特征重要性&#xff0c;选取最重要的300个特征。当然&#xff0c;为…

4.00002 Postgresql的内存管理-一条sql执行过程中的内存上下文是怎么样的?

文章目录 调试前动作调试步骤总结一条sql的内存上下文复杂查询简单查询调试前动作 1、后台启动postgresql -D x 2、使用客户端登录psql,且执行\d+ 3、此时查看进程 ps ux [db_postg@iZ2ze5nkcqlxobs6vm854iZ ~]$ ps ux USER PID %CPU %MEM VSZ RSS TTY STA…

PTA 7-4 按层遍历二叉树

用先序和中序序列构造一棵二叉树&#xff08;树中结点个数不超过10个&#xff09;&#xff0c;通过用队记录结点访问次序的方法实现对二叉树进行按层遍历&#xff0c;即按层数由小到大、同层由左到右输出按层遍历序列。 输入格式: 第一行输入元素个数 第二行输入先序序列&am…

撸广告小游戏开发app源码搭建

开发一个基于观看广告赚钱的小游戏App&#xff0c;源码搭建的过程会涉及到多个方面&#xff0c;包括游戏设计、广告集成、用户奖励机制、后端服务搭建等。以下是一个大致的开发流程和考虑点&#xff1a; 游戏设计与规划 确定游戏类型&#xff1a;选择适合观看广告赚钱的游戏类…

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

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

Web Components与框架集成:Vue React案例分析

一直以来&#xff0c;都梦想着打造一个完全自定义、可复用且跨框架的UI组件库&#xff0c;让我的项目开发变得更加高效。在一次偶然的机会下&#xff0c;我接触到了Web Components&#xff0c;一种原生的Web API&#xff0c;它允许我们创建自定义的HTML标签&#xff0c;实现组件…

【Qt】styleSheet设置

1. ui中设置 #toolButton1{color: rgb(190, 192, 193); background-color:#404142; border:0px solid #2E2E2E;padding-top: 15px } #toolButton1::hover{background-color:rgb(94,95,96); } #toolButton1::checked{color:black; background-color:#f0f0f0; border:0px soli…