我们在使用智能设备的时候,过一段时间就会有官方推送的软件更新,大致的意思是升级到哪个版本,版本修复了哪些bug或者新增了哪些功能。大到我们的电脑、小到我们用的智能手机、智能手环等等。
用户需求和功能之间的关联从未中断,亦从未结束,这是一条无尽的道路。那么这篇文章就为大家介绍在线升级需要考虑的东西以及如何去部署我们的升级,文笔拙略,但求能解剖出其中的关键点和命脉。
一、升级流程准备
1、flash和ram大小需要考虑
在实际的项目中应用软件一般都不小,首先需要考虑到flash存放代码够不够,一般需要一个扇区存放bootloader程序,两个较大的扇区存放app应用程序。ram区看个人,如果使用数据校验功能,有时候ram也要满足一定的大小,否则无法从flash提取出来,当然也可以直接对flash数据进行校验。
2、镜像备份
在升级过程中,难免有升级失败的可能,当然在产品成熟之后不会有太大的问题,但是俗话说得好,不怕一万就怕万一,有备无患。
3、升级流程
文件传输的过程可以一次性(如果ram足够大),也可以分包下发。壳子制定自己的私有协议,只要保证数据传输完整就可以。
二、单片机为例,准备升级文件
在此之前先给大家介绍需要用到的软件Jflash,这个软件功能很强大,可以对单片机下载程序、可以合成代码、可以生成不同格式的文件。
1、bin文件
打开工程文件,在Run后面输入指令:fromelf--bin--output.\output\obj\EDFA_Project.bin .\Output\Project.axf然后重新编译整个工程,就会在\keil_project\output\obj文件夹下生成所需要的bin文件。还有另一种生成bin文件的方法,就是使用jflash打开app.Hex文件,直接另保存为bin文件即可。
2、bootloader程序
在keil软件里面建立好工程,并配置好环境,环境配置主要如下图,因为程序是在0x8000000这个地方开始的,所以引导程序必须是这个地址开始,大小是整个flash的大小,右边是ram的存储区。
bootloader详细逻辑代码在boot程序里面体现,大体逻辑如下:
①、先从flash里面获取更新标志位,如果标志位为1,则启动升级判断
②、从flash里面取出升级到哪个区0代表app1区,1代表app2区
③、boot刚开始从默认的1区启动
3、app应用程序
建立工程文件,跟一般的app文件差不多,只需要改变偏移量,具体如下:
在程序开始的地方设置偏移量,0x20000表示相对0x8000000偏移,也就是说这个app程序将会在0x8020000这个地方开始运行。这里普及一个小知识点,flash默认或者擦写的时候,内部的值都是FF,所以看到判断为0xff,就应该知道程序一烧写的时候,默认值就是0xff,默认从app1启动程序。
4、下载文件合成
前面bootloader程序和app应用程序生成的HEX文件,用jflash合成所需要的下载代码,这里注意,如果单独烧写其中一个文件程序是起不来的。如下图EDFA_down.hex就是通过前面两个程序合成的。
生成的hex文件
制作过程如下:
①首先用到软件jflash,先打开软件JFlash.exe选择芯片
新建工程
选择芯片
选择下载模式
选择菜单栏File/Open data file 选择bootloader或者app其中一个hex文件,再点击File/Merge data file 选择另一个hex文件,然后保存为下载文件即可
②、jflash下载使用
设置一下,点击 Options,选择 Project settings,选择 Production,勾选图中选项,点击 OK 就可以了。
在菜单栏 Target 中点击 connect,连接软件和芯片,连接好后在底下出现连接成功,接下来就是把文件下载到芯片,选择 Target,选择 production programming,或者直 接按 F7 就可以下载,等待下载成功,就可以正常运行。
至此,在线升级的全过程以及文件的制作给大家分享完了,有不理解的朋友欢迎交流。
,