【野火 fireFlasher Mini 脱机烧录器】2. 多套固件下载试验 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

hehung 关注 私信
[文章]

【野火 fireFlasher Mini 脱机烧录器】2. 多套固件下载试验

前言

本次试验用于验证试用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。

20230507_140621_image.png

新建配置hex文件

  1. 选择“Edit->Fill block data”,打开填充数据窗口,如下图:
    20230507_140436_image.png

  2. 设定需要填充数据的一直范围:0x8001400-0x80014FF,填充数据选择随机方式,然后点击确定,如下图:
    20230507_140542_image.png

  3. 第二步之后就会在hexview的窗口中显示新建的255个随机数据,然后点击“File->Export->Export as Intel-Hex”导出为hex格式的文件,如下图:
    20230507_142705_image.png

  4. 导出的时候,需要指定导出范围:0x8001400-0x80014FF,每行的最大字节数,这里选择的是16(跑马灯的LED.hex每行的最大字节数也是16),这个需要和其他固件保持一致,如果不一致,使用脱机下载工具的时候会出错(实测下载不了),然后选择导出路径以及文件名,这里保存为COnfigData.hex。
    20230507_142626_image.png

2 下载多套固件

下载方式就不做过多介绍,可以参考我上一篇帖子:【野火 fireFlasher Mini 脱机烧录器】1. 上手实测

  1. 加载固件需要选择两个,第一个是跑马灯Led.hex文件,第二个是新建的随机ConfigData.hex文件。
    20230507_142657_image.png

  2. 然后点击“一键烧录”下载到fireFlasher中,再点击“退出配置”断开上位机与fireFlasher的连接。

  3. 连接烧录器与单片机,短按单击direFlasher烧录器上的红色按钮,会看到绿色的LED闪烁以及蜂鸣器响两声,表示程序下载成功

注:如果下载的时候蜂鸣器连续有节奏的响并且LED变成了红色常亮,表示从fireFlasher烧录器中下载到单片机中失败,需要检查一下两个固件的地址范围或者hex数据格式是不是一致的。

3 验证固件正确性

本文只讲解了试用JLINK反读程序的方式,其他调试工具不做说明

3.1 JLINK反读代码

  1. 安装JLINK驱动,直接网上搜索或者官网下载,不做说明;

  2. 安装好了JLINK驱动之后,打开J-FLASH RAM工具点击菜单栏“File->New Project”新建一个工程;

  3. 然后点击菜单栏“Options->Project Settings...”配置工程对应的单片机,在弹窗中选择“CPU->Device”中的“ST STM3F103R6”,点击确定;
    20230507_152338_image.png

  4. 点击菜单栏“Target->Connect”连接单片机,可以在LOG窗口中看到“Connected successfully”;

  5. 最后点击菜单栏“Target->Read back->Range”选择对应的Flash读取的范围,根据我们下载的固件的范围,我们选择0x8000000-0x8002000就可以了,最后点击OK,就可以看到反读回来的数据了。
    20230507_152752_image.png

  6. 这样的数据不方便我们做对比,我们将反读出来的数据保存为一个文件方便对比,选中“Target memory”窗口,然后使用快捷键“Ctrl+S”弹出“Save data file as”窗口,选择目录保存为hex文件即可。
    20230507_153209_image.png

3.2 比较反读数据与原始数据

使用Compare比较实用JLINK反读出来的数据和原始数据是否一致。

其实也可以使用hexview进行比较,只不过hexview比较出来不是很方便查看所以选择使用Compare进行比较,但是hexview对比有一个好处,可以看到对比的每一行的数据的地址。

注:反读出来的数据的hex格式为一行最多存在32个字节的数据,与我们原始的数据不对应,对比结果不好查看,所以我们将反读出来的数据使用hexview重新导出为单行最多16个字节的格式,方便对比,具体方式不在说明,参考前面。

如下图,对比了原始随机数据ConfigData.hex与反读的数据,可以看到,配置部分是一样的。关于LED.hex与反读数据的对比,其结果也是一致的,不再做展示。
20230507_154023_image.png

后记

验证了fireFlasher的多套固件下载功能,确实能够完整无误的将多套固件数据下载到期望的地址中去,这样可以减轻很多负担,使用这种方式可以将一些出厂信息(例如,芯片唯一标识码,产品型号,厂商信息,流水号等)作为固件的形式与源码固件一起下载到单片机中,减轻了需要下载多次的负担。

更多回帖

×
发帖