前言
本次试验用于验证试用fireFLasher Mini下载多套固件的功能。
使用跑马灯程序加上一个随机创建的hex文件(本文将创建一个有255哥数据的hex文件,用来当做程序的一个配置文件),这个hex文件会连同跑马灯程序一起下载到stm32f103中,用来验证该功能。
hex文件需要使用特别的工具来创建,本文讲解使用hexview工具来创建,然后试用fireFlasher的多套固件下载功能下载到stm32f103中,最后使用JLINK反读单片机中的代码,查看是否正确下载到单片机中。
1 创建随机hex数据
使用Vector的工具hexview新建一个有255个数据的hex文件,这个文件就当做是我们程序的配置文件,后续连同跑马灯程序一同下载到stm32f103中。下面详细说明如何创建。
1.1 查看跑马灯程序地址
我们使用了一个是stm32f103的跑马灯程序(LED.hex文件),使用hexview打开查看一下地址范围,方便后续创建配置文件的时候避开这些范围,如下图,可以看到跑马灯程序的地址范围是0x8000000-0x800135B。我们创建配置数据的地址需要避开这部分区域,所以选择了0x8001400-0x80014FF。
新建配置hex文件
-
选择“Edit->Fill block data”,打开填充数据窗口,如下图:
-
设定需要填充数据的一直范围:0x8001400-0x80014FF,填充数据选择随机方式,然后点击确定,如下图:
-
第二步之后就会在hexview的窗口中显示新建的255个随机数据,然后点击“File->Export->Export as Intel-Hex”导出为hex格式的文件,如下图:
-
导出的时候,需要指定导出范围:0x8001400-0x80014FF,每行的最大字节数,这里选择的是16(跑马灯的LED.hex每行的最大字节数也是16),这个需要和其他固件保持一致,如果不一致,使用脱机下载工具的时候会出错(实测下载不了),然后选择导出路径以及文件名,这里保存为COnfigData.hex。
2 下载多套固件
下载方式就不做过多介绍,可以参考我上一篇帖子:【野火 fireFlasher Mini 脱机烧录器】1. 上手实测。
-
加载固件需要选择两个,第一个是跑马灯Led.hex文件,第二个是新建的随机ConfigData.hex文件。
-
然后点击“一键烧录”下载到fireFlasher中,再点击“退出配置”断开上位机与fireFlasher的连接。
-
连接烧录器与单片机,短按单击direFlasher烧录器上的红色按钮,会看到绿色的LED闪烁以及蜂鸣器响两声,表示程序下载成功
注:如果下载的时候蜂鸣器连续有节奏的响并且LED变成了红色常亮,表示从fireFlasher烧录器中下载到单片机中失败,需要检查一下两个固件的地址范围或者hex数据格式是不是一致的。
3 验证固件正确性
本文只讲解了试用JLINK反读程序的方式,其他调试工具不做说明
3.1 JLINK反读代码
-
安装JLINK驱动,直接网上搜索或者官网下载,不做说明;
-
安装好了JLINK驱动之后,打开J-FLASH RAM 工具点击菜单栏“File->New Project”新建一个工程;
-
然后点击菜单栏“Options->Project Settings...”配置工程对应的单片机,在弹窗中选择“CPU->Device”中的“ST STM3F103R6”,点击确定;
-
点击菜单栏“Target->Connect”连接单片机,可以在LOG窗口中看到“Connected successfully”;
-
最后点击菜单栏“Target->Read back->Range”选择对应的Flash读取的范围,根据我们下载的固件的范围,我们选择0x8000000-0x8002000就可以了,最后点击OK,就可以看到反读回来的数据了。
-
这样的数据不方便我们做对比,我们将反读出来的数据保存为一个文件方便对比,选中“Target memory”窗口,然后使用快捷键“Ctrl+S”弹出“Save data file as”窗口,选择目录保存为hex文件即可。
3.2 比较反读数据与原始数据
使用Compare比较实用JLINK反读出来的数据和原始数据是否一致。
其实也可以使用hexview进行比较,只不过hexview比较出来不是很方便查看所以选择使用Compare进行比较,但是hexview对比有一个好处,可以看到对比的每一行的数据的地址。
注:反读出来的数据的hex格式为一行最多存在32个字节的数据,与我们原始的数据不对应,对比结果不好查看,所以我们将反读出来的数据使用hexview重新导出为单行最多16个字节的格式,方便对比,具体方式不在说明,参考前面。
如下图,对比了原始随机数据ConfigData.hex与反读的数据,可以看到,配置部分是一样的。关于LED.hex与反读数据的对比,其结果也是一致的,不再做展示。
后记
验证了fireFlasher的多套固件下载功能,确实能够完整无误的将多套固件数据下载到期望的地址中去,这样可以减轻很多负担,使用这种方式可以将一些出厂信息(例如,芯片唯一标识码,产品型号,厂商信息,流水号等)作为固件的形式与源码固件一起下载到单片机中,减轻了需要下载多次的负担。
|