嵌入式设备的程序是存在flash中的。
首先要明确flash区域的划分:
名称 地址
boot 0x0000 ~0x10000
应用层(app) 0x10000~ 0x80000
- 升级的流程步骤:
- step1: 下发升级使能的参数配置:根据通信下发的配置的参数判断要不要升级
- step2: 上位机 获取ImageBlockSize(获取升级包的大小),这样上位机每帧数据可以传固定字节数的升级包
- step3: 初始化升级过程,上位机下发的数据格式是包含两个元素的结构体, image_identifier和image_size。其中 image_identifier包含了配置文件(配置文件里面的数据就是上位机用来下发升级相关的参数的),主要包含:文件类型+对散列校验码加密的加密类型+ 校验类型+版本控制+ 散列校验码(当对散列校验码加密的加密类型) 。入伙文件类型为0xFD,加密类型位0x01,校验类型为0x01,版本控制为" VERSON001",散列校验码或散列校验码密文。重点: 上面所说的都是上位机下发下来的,下位机也就是嵌入式设备此时需要清除升级镜像和传输位图。
- step4: 传输升级包:上位机每次下发的数据是包含2个元素的结构体:block num和update_data。下位机对刚接收到的第一帧升级数据,需要进行特殊处理下(要传升级包了,嵌入式设备总的准备下呀),往后的升级包,嵌入式设备只需要正常的保存下下发的升级包内容,更新下升级包的位图就可以了。
- step5:检查升级包是否传输完成:上位机将升级包传输完成后,这时候要读下表里面的参数(也就是升级包