固件在线升级流程

article/2025/8/29 22:18:03

 

从事硬件开发,为了方便维护,免不了对模块进行固件升级,所以对于固件升级,简单整理了一下完整的在线升级的实现思路,该思路适用于所有带通讯总线的模块。

需要注意的是,需要额外的上位机配合。

下位机在线升级流程如下图:

 

原创图片,转发请标注出处。

APP升级步骤

(1)读软件版本、CPU型号、模块型号

(2)UDP包,每包长度1024字节,写入update区

(3)接收n包升级数据包,正常长度1024,将255整数长度的写入FLASH

(4)若接收到回读固件指令,则说明数据发送完成,将最后小于255长度的数据补全0xFF写入FLASH,且根据索引依次返回固件数据,进行校验比较

(5)比较通过后,写入APP升级标志,供重启后boot识别

(6)重启,boot判断升级标志,将升级区域数据复制到APP区,清除升级标志,跳入APP开始运行

BOOT升级步骤

(1)读软件版本、CPU型号、模块型号

(2)UDP包,每包长度1024字节,写入update区

(3)接收n包升级数据包,正常长度1024,将255整数长度的写入FLASH

(4)若接收到回读固件指令,则说明数据发送完毕,将小于255长度的数据补全0xFF写入FLASH,且根据索引依次返回固件标志,进行校验比较

(5)比较通过后,将update区域数据复制到boot区,注意最后未满足255长度的数据,需要补全后再写入。

(6)重启,正常运行。


在线升级笔记1:

(1)需要安装Agv_tool工具包,且本机电脑IP为192.168.0.xx网段

(2)打开AgvTool后,在车辆管理中新增车辆,输入参考。 编号:3;IP:192.168.0.3;端口号:4410

(3)配置管理界面:选中新增车辆,点击“连接”按钮进行连接;

(4)固件升级界面中,“选择目标文件”选中xml文件(需要xml文件和bin文件在同一路径下,xml文件是配置文件,bin是固件)。然后开始获取固件操作。

若固件获取失败,可以通过抓包,查看网口数据包,排查问题。


在线升级笔记2:

(1)由于UDP发送时未获取到目标IP地址,导致VCU无法获取到模块类型、软件版本、CPU类型;

(2)获取类型成功后,点击升级开始升级;

(3)升级逻辑:由于升级代码存放在0x40000,所以可以通过bin文件查看工具打开bin文件,并于写入FLASH中的0x40000中的数据进行对比,若完全一样,则说明写入成功;否则,写入失败,检查写入失败原因。


在线升级笔记3:调试在线升级遇到的问题:

(1)无法获得模块型号、软件版本号、CPU型号

原因:由于udp应答时,协议控制块中没有赋给目标IP地址和目标port,导致发送IP地址为0.0.0.0,MAC地址为FF FF FF FF FF FF ;VCU无法处理

(2)写FLASH错误,每次写0x400长度,前0x100写成功,之后写均失败,写FLASH逻辑问题。

原因:VCU一次写请求长度为0x400,即1KB,但是单次写FLASH最小长度为0x100,故要分开写4次,且最后不够0x100时,用0xFF凑够,再写入FLASH,修改逻辑后,写FLASH问题修复

(3)写完FLASH后,重启失败

原因:重启失败是因为写FLASH完成后,没发送重启响应给VCU,导致VCU以为响应超时,其实已经重启完成。在控制板重启前保证成功发送重启i响应给VCU,解决问题。

(4)存在概率性文件对比失败问题(通过抓包排查了问题)

原因:

(1)没有清除UDP接收标志,导致UpdataProcess()一直被执行,数据一致性出现问题,响应的索引值与请求索引值不一致,导致文件对比失败。

(2)UDP发送函数中,pbuf赋值采用pbuf_tack()函数;修改该项无影响。

(3)写完FLASH后,第一次读FLASH,会因为刚写完立马去做读操作,IAP会来不及处理,导致第一次读取FLASH都是00,做延时处理解决;

(4)将UpdataProcess()处理,放在UDP接收回调中处理,会解决数据一致性,以及第一次读FLASH错误问题。


http://chatgpt.dhexx.cn/article/eP42vlWE.shtml

相关文章

php 在线升级

php 在线升级 功能 目前已修改为通用解决方案 点击下方链接下载 此为最新优化过的版本 之后的贴图 说明 仅用来做思路参考 我就不再修改了 下面是思路解析思路一思路二升级程序服务器检测版本至此整个升级程序已经结束 感谢大家参考有任何问题都可以直接联系我咨询 一定不吝赐教…

软件在线升级系统设计

需求描述 一直用Qt开发PC版本的程序,常用的方法都是打包发布。目前开发的程序比较复杂,涉及到上百个独立的进程以及4000多个相关文件,采用原来的打包发布就变得很麻烦,第一改动比较频繁,打包次数过多;第二…

Nginx在线升级

1、查看当前nginx版本,nginx -v(小写v) 2、下载最新版本nginx包,nginx-1.23.1.tar.gz 3、解压tar -zxvf nginx-1.23.1.tar.gz 4、进入解压目录cd nginx-1.23.1.tar.gz 5、查看nginx当前配置,nginx -V注意这里是大写…

在线升级:OTA升级的原理和实现方式

目录 1、OTA 在线升级 2、实现方式 3、操作方式 3.1、后台式升级 3.2、非后台式式更新 4、STM32 的在线升级 4.1、划分 Flash 区域 4.2、实操1 - Flash空间地址的划分 4.3、实操2 - 设置工程 4.4、实操3 - 接收固件更新包 4.5、实操4 - 拷贝程序至Flash 4.6、实操5 - 跳转至 Ap…

halcon 彩色图转灰度图

read_image (Image, jiao1.bmp) //读取图像 get_image_size (Image, Width, Height) //获取宽高 dev_close_window () //关闭图形窗口 rgb1_to_gray (Image, GrayImage) //彩色图转灰度图 dev_open_window (0, 0, Width, Height, black, WindowHandle) //打开图形窗口 d…

Python中使用PIL快速实现灰度图

效果 原图 效果图 实现 新建文件夹grayImage,在此文件夹下新建gray.py from PIL import Image imgImage.open(1111.jpg) imgimg.convert(L) img.save(灰度图.jpg) 其中1111.jpg是原图,将其放在同目录下。 运行即可。 源码以及资源下载 https://do…

计算机灰度分析,计算机中的256级灰度图像

【建议1】使用GltraEdit软件观察字符“((Z20享有声望的学校联盟)”的内部代码. 以下说法正确 A. 字符“(”的内部代码占用两个字节 B. 字符“ Lian”的代码值的二进制表示形式是11010001 10101010 C. 图片中有5个ASCⅡ字符,其中字符“ 2”的代码值的十六进制表示为32 D. 字符“…

C++-灰度图上色GrayToColor

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 场景需求 最近有客户提出,想要将解包裹图像转化为有颜色的图像,具备更佳的视觉效果。解包裹图是一个floa…

灰度图与二值化

图像处理的灰度化和二值化 在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的…

opencv学习5:cvtColor RGB图像转灰度图像原理

简介 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、…

Matplotlib显示灰度图

引言 matplotlib中的imshow()函数不能自动显示灰度图像,这一点应该是众所周知的,需要调用cmap“gray"以进行设置,但是cmap"gray"实际上并不是如opencv中的imshow函数一样将单通道图显示为灰度图,私以为是引入了灰度…

python显示灰度图像,Python读取图像并显示灰度图的实现

python读取图像 原图: import cv2 # 利用opencv读取图像 import numpy as np # 利用matplotlib显示图像 import matplotlib.pyplot as plt img cv2.imread("./lena.png") #读取图像 # 显示图像 plt.imshow(img) plt.axis(off) plt.show() 效果: 问&#…

OpenCV灰度图

什么是灰度图&#xff1a; 百度百科 什么是灰度图 #include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using namespace std;int main(int argc, char** argv) {Mat src Mat(4,4,CV_8UC3,Scalar(28,128,228));cout << src << en…

RGB图像转化为灰度图原理

RGB图像转化为灰度图原理 1 原理 利用MATLAB对RGB图像进行读取&#xff1a; imgimread(蒙娜丽莎.jpg);可以知道存储RGB图像数据为 256 256 3 u i n t 8 256\times256 \times3\quad uint8 2562563uint8&#xff0c;其中 256 256 256\times256 256256表示长和宽的像素个数&…

彩色图像转换灰度图像

数字图像 现在我们所接触到的图像绝大多数都是数字图像&#xff0c;图像数字化后&#xff0c;每个像素点就可以看作是一个小方格&#xff0c;每个小方格里面存储的就是图像的像素信息。如果把一副数字图像抽象出来&#xff0c;就是一个二维矩阵&#xff08;灰度图&#xff09;或…

Python灰度图像彩色化

1️⃣作业要求 给定一幅灰度图像&#xff0c;使用任意方法将其变成一幅彩色图像&#xff0c;并尽量使得添加的色彩显得较为真实。 2️⃣核心代码 这里我们是直接调用了eccv16和siggraph17的模型&#xff0c;运行程序时会自动下载这两个model文件&#xff0c;然后经过对图像的…

matlab 绘制灰度图

matlab 将矩阵中不同数值所对应的区域用 不同深度的灰度图画出来&#xff0c;不显示坐标轴标签&#xff0c;并设置在画布上全屏显示。 if 1close allrng (7)mask_allrand(256,256)*10;mask_allround(mod(mask_all,2));mask_allsort(mask_all);mask_all(1:100,1:50)0;mask_all(…

matlab读取一幅灰度图,Matlab处理灰度图

作业2&#xff1a;通过图像分析的方法对如下图像进行分析&#xff0c;获取颗粒特性参数。具体参数包括图像中的颗粒个数&#xff0c;颗粒面积&#xff0c;颗粒等效直径&#xff0c;非球形颗粒的长/短轴&#xff0c;非球形颗粒的方位。 图1 待处理颗粒图像 步骤&#xff1a; (1)…

python灰度图

任务描述 背景   真彩色图像和灰度图像是数字图像的两种常见类型&#xff0c;如下图所示&#xff0c;左图是真彩色图像&#xff0c;右图是灰度图像。    在真彩色图像中&#xff0c;像素颜色是 RGB 颜色&#xff0c;每个颜色包含 R、G、B 三个颜色分量。而在灰度图像中&…

图像处理--灰度图

灰度图 灰度图&#xff0c;Gray Scale Image 或是Grey Scale Image&#xff0c;又称灰阶图。把白色与黑色之间按对数关系分为若干等级&#xff0c;称为灰度。灰度分为256阶。 灰度图定义 什么叫灰度图&#xff1f;任何颜色都有红、绿、蓝三原色组成&#xff0c;假如原来某点…