小猫爪:i.MX RT1050学习笔记25-NXP-MCUBootUtility的使用(RT1170)

i.MX RT1050学习笔记25-NXP-MCUBootUtility的使用(RT1170)

1 前言

  NXP-MCUBootUtility是NXP一位大佬写的一个针对RT系列的通用型下载工具,前面对它做了一个简单的介绍,该工具的下载地址如下:https://github.com/JayHeng/NXP-MCUBootUtility。下面也有对这个软件的具体说明。

  接下来我们就以NXP-RT1170-EVK板子来做一个使用示范,虽然不能涵盖所有的应用,尽量在其中穿插着一些使用的注意点。

  文中涉及到的几个镜像文件大家可以再这里下载:https://download.csdn.net/download/Oushuwen/20269270。

2 XIP启动

2.1 准备镜像

  MCUBootUtility支持的可执行文件的类型有很多,具体如下图所示:
在这里插入图片描述
  其中.out可执行文件肯定是最方便的了,因为编译器一般默认生成都是这种文件,里面不仅涵盖了原本的软件信息,还包括了调试相关等信息,至于s19,HEX以及bin则比较纯粹了。

  下面用同一个工程在编译出的.out以及bin文件做个示范。我们先以NXP的MCUXPresso为例。

  因为为了RT能够成功启动,镜像文件中不仅需要原始的APP信息,还需要FDCB,IVT,boot data, DCD等额外头信息(关于镜像的分解可参考另一篇文章:i.MX RT1050学习笔记9-镜像文件分解),而MCUBootUtility会重新对镜像附加这些额外头信息,所有我们需要对NXP的SDK工程进行一些配置,来使得编译出的可执行文件只有APP的信息。

  (附加:在MCUBootUtility的高版本中,增加了一个小功能,就是可以选择保留FDCB,意思就是可以保留原始镜像上的FDCB,所以理论上不去除额外头信息的完整的RT镜像文件也是可以的,但是不能太过绝对,这里面会存在一些小问题,原因不详,如果使用完整镜像的话,会有很大的概率导致最后下载进flash的镜像是有问题的。)

  怎么去除这些额外信息呢,其实非常简单,对于MCUXPresso的工程需要在预宏定义中改变这个值:
在这里插入图片描述
修改XIP_BOOT_HEADER_ENABLE为0,这样就OK了。

对于其他的编译器也是一样的,对于KEIL修改位置如下图:
在这里插入图片描述
IAR则如下图:
在这里插入图片描述

  之后就是编译,将编译好的可执行文件以及bin文件拿出来。接下来就是下载了。

2.2 下载

  将MCUBootUtility与板子建立连接后,先选择好上面编译出的可执行文件,按照下图配置好相应信息,点击下载:
在这里插入图片描述
  下载完成后,我们查看相关信息可以看到下载到flash中的信息已经包含了额外头信息以及原始APP数据。
在这里插入图片描述
在这里插入图片描述
  再对比一下APP信息是否一样:
在这里插入图片描述
在这里插入图片描述
  可以看到都是一样的,接下来就是启动开发板,看是否正常可以运行。

  接下来再试一下下载bin文件,对于bin文件,我们则是需要添加一个参数,程序链接起始地址,我的APP链接起始地址为0x30002000,所以如下:
在这里插入图片描述
  这个信息可以在链接文件中得到,也可以在map文件中得到,也就是中断向量表的起始地址:
在这里插入图片描述

  再次查看相关信息,运行板子,结果和上面一模一样。

3 non-XIP启动

  对于链接到RAM的工程(即non-XIP启动),除了不需要额外头信息外(对于IAR和keil的RAM版本工程默认就不带额外头信息,所以不需要配置预宏定义参数:XIP_BOOT_HEADER_ENABLE),还有一点非常重要,就是APP的起始链接地址一定不要是存储器的起始地址,最好有个0x2000的偏移,举个例子,RT1170的SDRAM起始地址为0x80000000,程序的链接起始地址就不能为0x80000000,而需要为0x80000000+0x2000,至于原因则是因为RT的non-XIP启动需要拷贝整个镜像,除了APP部分外,还需要拷贝前面的额外头信息,而这多出来的偏移则是为了容纳除了APP部分的额外头信息。所以对于链接到非flash存储器的工程,则是需要修改链接文件。

3.1 准备镜像

  接下来我们还是以MCUXPresso为例,还是以之前的工程为例,之前的工程是XIP启动,即在flash中运行,所以先得将这个工程链接到RAM中,将其变成一个non-XIP启动的工程。

  就以在SDRAM中运行为例,首先还是如上面介绍的将预宏定义XIP_BOOT_HEADER_ENABLE修改成0,还需要在配置中将SDRAM的优先级提高,并且把位置以及大小修改一下(这样做就是为了前面的0x2000大小的偏移),如下图:
在这里插入图片描述

  随后再修改一下链接配置,如下图:
在这里插入图片描述
  之后就是编译,我们查看一下map文件可以看到果然程序被链接到地址0x80002000处:
在这里插入图片描述
  程序镜像准备好了,接下来还需要一个东西,因为程序是在SDRAM中运行,所以还需要DCD数据来初始化SDRAM相关的外设和引脚,可以通过MCUXpresso的config tools生成dcd.bin,在MCUXpresso中点击Device configuration,如下图:
在这里插入图片描述
  然后按照下图设置生成dcd.bin文件:
在这里插入图片描述

  等dcd.bin文件也生成之后,准备工作就完成了,下面就是进行下载。

  而对于KEIL和IAR来说,只需要修改相应的链接文件就好,将程序的起始链接地址即中断向量表的链接地址加上一个偏移,最好是0x2000,因为0x2000可以涵盖非常多的情况,这里就不做解释了。修改也是非常的简单。

对于KEIL的scf文件如下:
在这里插入图片描述
对于IAR的icf文件如下:
在这里插入图片描述

3.2 下载

  将MCUBootUtility与板子建立连接后,先选择好上面编译出的可执行文件,按照下图配置好相应信息,点击下载:

在这里插入图片描述

  下载完成后,我们查看相关信息可以看到下载到flash中的信息已经包含了额外头信息以及原始APP数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  可以看到在IVT信息中,程序入口地址已经变成了0x800024E1,这个地址正处于SDRAM中,而APP中的堆栈地址也变成了0x83000000。

  可以看到都是一样的,接下来就是启动开发板,看是否正常可以运行。结果是正常的。

  接下来再试一下下载bin文件,对于bin文件,我们则是需要添加一个参数,程序链接起始地址,我的APP链接起始地址为0x80002000,所以如下:
在这里插入图片描述
  这个信息可以在链接文件中得到,也可以在map文件中得到,也就是中断向量表的起始地址:
在这里插入图片描述

  再次查看相关信息,运行板子,结果和上面一模一样。说到这里,关于MCUBootUtility的使用就介绍到这里了。如果有问题欢迎留言。

END

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
对于S32K3系列的I2C配置,可以参考S32K3的官方示例和使用文档。在S32K3系列中,I2C是一种常用的串行通信协议,常用于连接微控制器和外部设备,如传感器和存储器等。通过I2C总线,可以实现多个设备之间的通信。 你可以先了解S32K3系列的特点和资源,然后深入学习各个外设模块的使用,包括I2C。可以查阅S32K3系列的官方文档和示例,这些资料可以帮助你了解I2C在S32K3系列中的配置和使用方法。可以参考S32 Design Studio开发环境的使用文档,了解如何在该开发环境中进行I2C的配置和编程。 此外,还可以参考S32K3系列的MCAL配置示例,特别是与I2C相关的示例,以便更好地理解I2C的配置和使用。通过努力学习I2C的相关知识和S32K3系列的MCAL配置示例,你可以掌握S32K3系列的I2C配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【S32K 学习笔记】S32K3介绍](https://blog.csdn.net/weixin_44712171/article/details/124190407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [小猫爪:S32K3学习笔记02-S32K3之FlexCAN](https://blog.csdn.net/Oushuwen/article/details/120311785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值