--
痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2个月了,这一次痞子衡为大家带来了版本升级v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说明一下。
一、v2.4更新记录
二、关于Flashloader的更换支持
Flashloader在嵌入式世界里有很多种不同含义和应用场景,其中最让人熟知的非配合仿真器使用的Flashloader(下载算法)莫属,有了合适的Flashloader,我们便可以在IDE里一键下载和调试应用程序,项目开发效率大大提升。
i.MXRT(主要是四位数系列)世界里也有一个专用的Flashloader,它专门配合BootROM工具链(blhost.exe)使用,这个Flashloader可以帮助你将应用程序下载进i.MXRT可启动的各种外部设备里(NOR/NAND/SD/eMMC),关于其使用方法痞子衡之前写过一篇详细的文章 《Flashloader初体验(blhost)》。
NXP-MCUBootUtility软件核心功能都是通过这个Flashloader和blhost工具来实现的,由于Flashloader本身也是一个嵌入式应用程序,是程序就可能存在功能缺陷,我们有时候遇到的NXP-MCUBootUtility使用缺陷可能是Flashloader本身的缺陷造成的,因此必要的时候我们需要为NXP-MCUBootUtility更新Flashloader文件。
2.1 获取方式
2.1.1 下载独立包(仅可执行文件)
在恩智浦官网i.MXRT芯片主页TOOLS & SOFTWARE一栏下,我们可以下载到适用i.MXRT芯片的各种软件工具,Flashloader及其配套工具就在其中,如下是i.MXRT1050的Flashloader包:
Flashloader包解压后,可以看到里面包含了文档、example、工具以及最重要的Flashloader可执行文件:
Flashloader可执行文件有如下三种格式,其中ivt_flashloader.bin是flashloader.elf/srec经过elftosb.exe转换而来:
\Flashloader_RT1050_1.1\Flashloader\flashloader.elf
\Flashloader_RT1050_1.1\Flashloader\flashloader.srec
\Flashloader_RT1050_1.1\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware\ivt_flashloader.bin
但是Flashloader独立包的方式不是最推荐的获取方式,早期i.MXRT型号(RT1050/RT1060等)官方提供了独立包(其实并没有实时更新,V1.1版本还是2018年3月发布的),较新的i.MXRT型号(RT1170/RT1010)以及未来最新型号官方不再提供独立包。
2.1.2 下载SDK(源码和工程)
Flashloader源码其实已经被官方开源在了SDK包里,在 MCUX主页 可下载对应i.MXRT型号的SDK包(继续以i.MXRT1050为例),记得务必在middleware选项里勾选mcu-boot后再下载:
SDK包解压后,可在如下路径找到Flashloader源工程(IAR/MDK/MCUX/GCC都有)以及跟独立包里一样的ivt_flashloader.bin,注意此时我们需要自己编译Flashloader源工程生成一个flashloader.srec文件。
\SDK_2.8.2_EVKB-IMXRT1050\boards\evkbimxrt1050\bootloader_examples\flashloader
\SDK_2.8.2_EVKB-IMXRT1050\middleware\mcu-boot\bin\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware\ivt_flashloader.bin
因为SDK本身是持续更新的,Flashloader作为其中组件,也是实时在更新,因此我们不用担心Flashloader的维护问题,另外源码都开放了,不得已的情况下我们还可以自己改Flashloader。
2.2 更换方式
NXP-MCUBootUtility在其目录/src/targets/下默认存放了Flashloader可执行文件,主要是flashloader.srec和ivt_flashloader.bin。但是上一节两种方式下得到的flashloader.srec和ivt_flashloader.bin能不能直接放到NXP-MCUBootUtility里替换使用呢?答案是否定的。
NXP-MCUBootUtility其实并没有自动识别默认的flashloader链接地址,而是将其链接和跳转地址放到了src/targets/xxx/bltargetconfig.py文件中,这意味着你在替换默认flashloader文件时必须保证其跟bltargetconfig.py里的两个地址保持一致(不一致则需要改flashloader链接文件或者改bltargetconfig.py里的地址),这也是NXP-MCUBootUtility v2.3及其之前版本不方便更换Flashloader的原因。
NXP-MCUBootUtility v2.4做的一个重要更新,就是能够自动识别新flashloader地址,只有一个小小的要求,就是更新的flashloader文件(srec格式)需要固定命名为flashloader_user.srec并放到/src/targets/xxx/目录下:
NXP-MCUBootUtility运行时一旦检测到flashloader_user.srec的存在,便会获取其链接和跳转地址,并自动生成对应的ivt_flashloader_user.bin文件(在/gen/bootable_image/ivt_flashloader_user.bin)去使用,这样的设计下更换flashloader是不是相当轻松!
至此,这次更新的主要特性便介绍完了。MCUBootUtility项目地址为 https://github.com/JayHeng/NXP-MCUBootUtility , 虽然当前版本(v2.4.0)功能已经非常完备,你还是可以在此基础上再添加自己想要的功能。如此神器,还不快快去下载试用?
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。