阿哲
发表于: 2019-3-29 16:33:59 | 显示全部楼层

对于Linux系统来说,从micro SD卡启动是一件很常见的事情,如Raspberry Pi。但微控制器并不常见。恩智浦i.MX RT ARM Cortex-M7填补了这两个世界之间的空白。这并不奇怪,它带有ROM引导程序,可以从micro SD卡启动。

sd-card-with-i.mx-rt1052.png

i.MX RT1052开发板上的SD卡


从SD卡启动有点酷:将新软件加载到SD卡上,插入并从中启动。在某些应用程序中,这非常有用:在我的配置中,处理器启动ROM引导加载程序,然后将镜像文件从SD卡加载到RAM中,然后运行它。在该配置中,不需要内部或外部FLASH存储器。


软件和工具

在本文中,我使用了以下软件和工具:

●    恩智浦MCUXpresso IDE 10.3.0

●    适用于i.MX RT1052(EVKB)的恩智浦MCUXpresso SDK SDK 2.5.0

●    恩智浦i.MX RT1050-EVKB

●    适用于RT1052的恩智浦Flashloader


新建工程

为了验证加载是否按预期工作,我喜欢创建一个LED闪烁的工程'blinky':这很简单,不需要太多。


因为i.MX RT上的引导加载程序会将应用程序加载到RAM空间,所以我确保我的项目链接到RAM。一种简单的方法是在项目创建/导入期间指定:

link-to-ram.png

链接到ram


RAM设置反映在项目设置中:

link-application-to-ram-in-linker-settings.png

在链接器设置中将应用程序链接到ram


在下一步中,我需要更改位于项目设置中的内存映射:

original-memory-map.png

原来的映射图


请注意,这会将应用程序加载到大小为64 KB的ITC RAM中。因此,加载大于此值或超出内存范围的应用程序将失败!

引导加载程序需要ITC SRAM下端的某些部分,所以我必须释放0x2000的大小。

请注意,恩智浦文档使用0xa000作为应用程序向量和起始地址。我无法使用该地址,对我有用的是这个0x2000地址。


我使用原始SRAM_ITC上的“Split”按钮,将Location更改为0x2000并将大小减小了0x2000。最后,我已经移动到底部的低0x0-0x2000 RAM区域(只是我仍然列出它)。最重要的是:将带有0x2000起始地址的SRAM_ITC移动到列表的开头:这样链接器脚本就会将向量表放在那里。目标是将向量表放在该定义的地址处。下面是截图:

changed-ram-memory-map.png

改变了的内存映射图


S19文件

接下来是配置MCUXpresso项目以生成S19(S-Record)文件,因为将来需要这样做。


所以将它添加到项目设置和后期构建步骤:

  1. arm-none-eabi-size "${BuildArtifactFileName}"
  2. arm-none-eabi-objcopy -v -O srec "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.s19"
复制代码

post-build-step-to-generate-s19-file.png

添加build步骤生成s19文件


构建项目,应生成S19文件:

s19-file.png

s19文件


测试调试运行

现在是构建和调试该项目以确保其运行的好时机:使用MCUXpresso IDE并下载应用程序。我正在使用XiP(外部闪存eXecute就地)启动设置:

xip-boot-configuration.png

xip启动配置


然后检查一切是否正常:

executing-in-ram.png

在ram中执行


看着LED闪烁,你知道已经实现了闪烁功能。


创建SD卡启动映像

要从SD卡启动应用程序,我必须将.s19转换为特殊格式。有不同的可启动映像,从不安全,已注册到安全启动映像。为了简单起见,我选择了一个“不安全”的。


为此,我需要安装在以下目录中的'Flashloader'实用程序:

  1. C:\nxp\Flashloader_i.MXRT1050
复制代码

另外,我的'blinky'应用程序位于此文件夹中:

  1. C:\Users\Erich Styger\Data\GitRepos\McuOnEclipse\Examples\MCUXpresso\i.MX RT1050_EVK\MIMXRT1052_blinky_in_RAM
复制代码

flashloader.png

flashloader安装文件夹


首先在编辑器中打开以下文件:

  1. C:\nxp\Flashloader_i.MXRT1050\Tools\bd_file\imx10xx\imx-itccm-unsigned.bd
复制代码

并检查它是否具有.bd配置文件的以下值/内容

  1. options {
  2.     flags = 0x00;
  3.     # Note: This is an example address, it can be any non-zero address in ITCM region
  4.     startAddress = 0x1000;
  5.     ivtOffset = 0x400;
  6.     initialLoadSize = 0x2000;
  7.     # Note: This is required if the default entrypoint is not the Reset_Handler
  8.     #       Please set the entryPointAddress to Reset_Handler address
  9.     entryPointAddress = 0x00002000;
  10. }

  11. sources {
  12.     elfFile = extern(0);
  13. }

  14. section (0)
  15. {
  16. }
复制代码

请注意,NXP默认和文档将0x8000列为“startAddress”。我需要将其更改为0x1000以使其正常工作!


启动DOS shell并使用'cd'命令进入以下文件夹:

  1. C:\nxp\Flashloader_i.MXRT1050\Tools\elftosb\win
复制代码

dos-shell.png

dos shell


接下来,将s19文件复制到该elftosb文件夹:C:\nxp\McuBootUtility\Flashloader_i.MXRT1050_GA\Tools\elftosb\win>

  1. copy "C:\Users\Erich Styger\Data\GitRepos\McuOnEclipse\Examples\MCUXpresso\i.MX RT1050_EVK\MIMXRT1052_blinky_in_RAM\Debug\evkbimxrt1050_iled_blinky_in_RAM.s19" .
复制代码

copied-.s19-file.png

复制.s19文件


接下来,从.s19文件构建.bin

bin-files-generated.png

生成bin文件


这实际上创建了两个文件。 'padding'从0x0000开始。我们需要的是'nopadding.bin',因为这个从0x2000开始。


在下一步中,使用以下命令生成引导映像文件boot_image.sb:

  1. elftosb.exe -f kinetis -V -c ../../bd_file/imx10xx/program_sdcard_image.bd -o  boot_image.sb application_nopadding.bin
复制代码

created-boot-image.png

创建启动映像


生成启动映像

将boot_image.sb复制到mfgtools的“OS Firmware”文件夹:

  1. copy boot_image.sb "C:\nxp\Flashloader_i.MXRT1050\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware"
复制代码

copied-boot-image.png

复制启动映像


验证以下文件的内容:

  1. C:\nxp\Flashloader_i.MXRT1050\Tools\mfgtools-rel\cfg.ini
复制代码

应该这样:

  1. [profiles]

  2. chip = MXRT105X

  3. [platform]

  4. board =

  5. [LIST]

  6. name = MXRT105X-DevBoot
复制代码

将SW07开关设置为在串行下载模式下启动电路板:

SW07:1-OFF,2-OFF,3-OFF,4-ON

serial-downloader-mode.png

串行下载器模式


我正在使用OpenSDA USB连接器上的USB电缆为电路板供电。所以为此,我必须将跳线放在SW1附近的中间位置:

powering-board-through-opensda.png

通过opensda供电板


首先使用调试USB端口(右下方的黑色电缆)为电路板供电,然后插入串行下载器的USB电缆(下方底部的白色/蓝色电缆):

board-in-serial-download-mode.png

电路板处于串行下载模式


接下来,启动以下工具

  1. C:\nxp\McuBootUtility\Flashloader_i.MXRT1050_GA\Tools\mfgtools-rel\MgTool2.exe
复制代码

如果连接到Serial Loader,它应该显示如下:

connected-mfg-tool.png

连接mfg tool


按“开始”按钮,它应该将启动图像写入SD卡:

started.png

开始


按停止,然后按退出以关闭工具。现在最后一步:

关闭电路板并将SW7更改为从SD卡启动:

SW07:1-ON,2-OFF,3-ON,4-OFF

sw7-on-i.mxrt1050-evkb-for-sd-card-boot-1.png

用于sd卡启动的i.MXRT1050-EVKB上的SW7


现在享受SD卡加载的应用程序:

blinky-blinky-blinky-blinky-blinky.png

LED不断闪烁


总结

从SD卡启动i.MX RT开发板是可以实现的。 数据存储在卡上的“RAW块”中,并由ROM引导加载程序加载到RAM中并从那里执行。 应该可以从这里编程闪存,使用SD卡上的文件系统和更多的东西。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 13 | 回复: 15



手机版|

GMT+8, 2024-4-28 01:17 , Processed in 0.041278 second(s), 7 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表