远程升级频频失败?原因竟然是…

news2024/9/30 21:42:16

最近有客户反馈在乡村里频繁出现掉线的情况。

赶紧排查原因!

通过换货、换SIM卡对比排查测试,发现只有去年采购的那批模块在客户环境附近会出现掉线的情况,而今年采购的模块批次就不会掉线。。。

继续追究原因,联系对应的销售工作人员,了解到差异就是模块内的固件版本不同。

去年采购的那批模块版本是:
AirM2M_780E_LTE_AT_V1138

今年采购的那批模块版本是:
AirM2M_780E_LTE_AT_V1162

看来是高版本对网络做了优化,但在这个地区出货的也有150多台设备了,不可能每个都单独回收回来给模块用USB烧录成高版本固件。

所以,不如直接通过FOTA远程批量升级。

图片

一、第一次尝试升级,出现失败


从合宙DOC社区上找到了FOTA远程升级的文档参考,先用手边的设备用合宙IoT平台做下测试,看能不能升级。

什么都配置好了,结果到最后模块发AT+UPGRADE触发升级的时候,却老是报错:

+UPGRADEIND: -1003

通过升级日志查询结果是“正在生成版本”?

图片

在页面右上角看到有个红色问号“ ?”,是IoT平台的帮助中心,往下滑就看到了升级日志返回结果的对应描述。

如下图示:

图片

图片

正在生成版本,请稍后再次请求——看样子是版本相差太大了,平台内部还在做差分包,那我就等一会儿再请求看看。

二、第二次尝试升级,再次出现失败

保险起见间隔了30分钟再次请求,以看到已经进入下载了,但是结果却又出现了:

+UPGRADEIND: -1003

这又是什么原因?!!

图片

先去IoT平台上看一下升级日志的结果是什么,查询看到显示的是“成功”,但实际上并没有升级成功啊,反而还报错了。

图片

紧接着找合宙的技术人员咨询了解到,差分包大小是有限制的,不能大于480KB,否则会升级不成功。

至于IoT平台上升级日志显示“成功”,原因是这个成功代表的意思不是模块升级成功——而是给予模块的升级请求,下发了升级文件成功了。

经过进一步确认,可以通过合宙自己提供的生成差分包工具的网址,把V1138和V1162的dfota.bin文件放上去,制作一个差分包看看,到底有多大。

图片

等了大概3分钟左右,差分包制作出来了,点击下载后,文件大小有550KB,那确实超出了480KB,升级不了。

图片

图片

从合宙的技术那里还得到了一份AT固件各个版本之间制作差分包的大小,以及是否可以差分升级的表格,这方便多了啊。

有数字的代表是在480KB以内,可以差分升级的版本;空白的就是不能升级的。

差分升级表格如下图示:

图片

那么通过这张图来看,例如我当前的模块版本是V1138,需要升级到1162,对应的交叉格并没有数字。

而且V1138升级到1147的差分包就已经到480KB的临界点了,只能先升到V1147,再升到1162。

图片

三、事不过三,第三次升级,成功!


那么,先获取到V1147版本的固件。

然后搜索得到AirM2M_780E_LTE_AT_V1147,
解压出来找到:
AirM2M_780E_V1147_LTE_AT.dfota.bin文件,
放到IoT平台上面。

图片

发送AT指令走下升级流程:

图片

成功从AirM2M_780E_V1138_LTE_AT,
升级到了 AirM2M_780E_V1147_LTE_AT。

接下来就是按照步骤,
升级到 AirM2M_780E_V1162_LTE_AT版本。

图片

四、总结及建议


从以前的老固件做升级,很重要的一点——要考虑到模块内部对差分升级所分配的FOTA分区有多少。如果差分包超过了分区(Air780E模块的FOTA分区看来就是480KB了),超出肯定是升级不了的。

紧接着和领导做了汇报,在本地测试了Air780E模组FOTA升级可以了,流程也写好了,先找了5台在外的设备远程升级,测试一下看升级后掉线的现象也确实减少了,那说明固件没问题。掉线的麻烦事,也完美解决了!

如果你在项目开发中也遇到类似问题,记得一定一定要先注意差分升级FOTA分区大小。

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

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

相关文章

基于springboot vue 大学生竞赛管理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

路径报错问题

项目场景: 假设这是我的项目结构,我现在需要在aa.js文件中引入并使用aa.geojson文件, 问题: 当我引入路径是const filePath ../geo/aa.geojson;的时候,系统报错 "aa.geojson is not Found",找不…

【WRF数据介绍第二期】气象驱动场数据介绍及下载

WRF数据介绍第二期:气象驱动场数据介绍及下载 WRF官网-Free Data数据下载 EAR5数据数据下载 参考 WRF运行流程如下,所需的外部数据源包括静态地理数据(Static Geography Data)和网格气象数据(Gridded Meteorological D…

基于AI网关的智慧煤矿安全监测应用

煤矿安全一直是矿业管理的重中之重。由于煤矿环境的恶劣与复杂性,例如工作中间环节多、设施设备多样且集中、空间狭小、环境闭塞、有害气体隐患、粉尘聚集等,针对煤矿的安全监测和防范时常面临着极大的挑战。 随着AI技术的发展与普及,依托AI实…

关于前端框架的对比和选择

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于【前端框架的对比和选择】相关内容&…

力扣 中等 275.H指数

文章目录 题目介绍题解 题目介绍 题解 h指数不一定都满足citations[mid] n - mid,例如[0,1,4,5,6]的h指数是3。 题目说了用对数时间复杂度来实现,说明一定是用二分法,草纸上推导一下即可得出以下代码。 class Solution {public int hInde…

MySQL自动测试框架Test Framework工具实践

导读 之前的文章(《MySQL自动测试框架Test Framework浅析》)从源码级别对MySQL自动测试框架Test Framework进行了简要分析,本文接下来从实践的角度介绍Test Framework工具的使用方法。 1 简介 Test Framework主要应用于MySQL等相关数据库项…

Docker 容器技术:颠覆传统,重塑软件世界的新势力

一、Docker简介 什么是docker Docker 是一种开源的容器化平台,它可以让开发者将应用程序及其所有的依赖项打包成一个标准化的容器,从而实现快速部署、可移植性和一致性。 从功能角度来看,Docker 主要有以下几个重要特点: 轻量…

用Python实现运筹学——Day 3: 线性规划模型构建

一、学习内容 线性规划模型构建的步骤与技巧 线性规划(Linear Programming, LP)模型构建是运筹学中的核心内容,通常用于求解资源的最优分配问题。要从实际问题中提取出一个线性规划模型,需要按照以下步骤进行: 问题描…

JavaWeb——Vue组件库Element(1/6):快速入门(什么是Element,安装,引入ElementUI组件库,复制组件代码,启动项目 )

目录 什么是Element 快速入门 安装 引入ElementUI组件库 访问官网,复制组件代码 启动项目 小结 了解完前端的工程化之后,接下来了解一门新的前端技术:Vue 的组件库 Element。 学习完 Element 之后,即使作为一名 Java 后…

VMware 如何上网

需求 在PC window中下载了VMware,并且加载的是Ubuntu系统。PC电脑连接的是手机热点。 可以看出WLAN连接的名称是:Wi-Fi 6 AX201 16MHz 如何让Ubuntu系统也能够上网。并且更新库,能够sudo apt-get install xxx相关库。 目前虚拟机中的Ubun…

PMP--二模--解题--121-130

文章目录 9.资源管理!团建不是万能的121、 [单选] 项目团队中一些经验丰富的成员抱怨项目经理。这些高级项目团队成员觉得项目经理在事无巨细地管理他们,阻碍他们完成工作。当项目经理意识到这些问题时,应该怎么做? 14.敏捷--组织…

深度学习之开发环境(CUDA、Conda、Pytorch)准备(4)

目录 1.CUDA 介绍 1.1 CUDA 的基本概念 1.2 CUDA 的工作原理 1.3 CUDA 的应用领域 2. 安装CUDA 2.1 查看GPU版本 2.2 升级驱动(可选) 2.3 查看CUDA版本驱动对应的支持的CUDA ToolKit工具包 2.4 下载Toolkit 2.5 安装(省略&#xff0…

数据结构讲解二叉树 【一】

🎁🎁创作不易,关注作者不迷路🎀🎀 C语言二叉树 【一】 前言一、数概念及结构1.数的概念1.2树的相关概念1.3树的表示 二、二叉树的概念及结构2.12.2二叉树的性质2.3二叉树的存储结构 三、二叉树的顺序结构实现3.1二叉树…

【有啥问啥】“弱激励学习(Weak Incentive Learning)”的原理与过程解析

“弱激励学习(Weak Incentive Learning)”的原理与过程解析 一、引言 在机器学习、人工智能以及更广泛的教育与培训领域,学习范式的多样性为提升智能体(AI模型、学生或企业员工)的能力提供了丰富的路径。弱激励学习作…

【最简单最直观的排序 —— 插入排序算法】

【最简单最直观的排序 —— 插入排序算法】 插入排序是一种简单直观的排序算法。其基本思想是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。 插入排序的核心就是多趟选择插…

python模块之getopt

getopt.getopt(args, shortopts, longopts[]) 解析命令行选项及参数列表。 args:要解析的参数列表,但不包括当前执行的python脚本名称,一般等同于sys.argv[1:]。 shortopts:要识别的短选项字符串,如果后接:表示需要…

C++入门day4-面向对象编程(下)

前言:C入门day3-面向对象编程(中)-CSDN博客 初识:继承特性 继承的基础语法 class A{ public:int a; }; class B:public A { public:int b; }; B类通过继承A类后,内部会继承一个int变量 a:从下图我们可以…

Mesa三角形光栅化过程关键代码

1.先看下mesa三角形光栅化效果 2.这里是主要实现代码,Mesa的代码也是非常多,看了好多天。关键实现过程代码这个s_tritemp.h中 3.这里主要介绍渲染一个矩形的过程 a)在glut中两行代码: b) 中间过程代码忽略,进入static GLboolean run_render(…

生活英语口语柯桥学英语“再确认一下“ 说成 “double confirm“?这是错误的!

在追求英语表达的过程中,我们常常会遇到一些看似合理实则错误的表达习惯。今天,我们就来聊聊一个常见的误区——“再确认一下”被误译为“double confirm”。 “再次确认”不是double confirm 首先,我们需要明确,“double confi…