查看: 6810|回复: 0

从Micro SD卡启动NXP i.MX RT1052-EVK开发板

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3935

    主题

    7556

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    40182
    最后登录
    2025-9-4
    发表于 2020-2-17 11:15:46 | 显示全部楼层 |阅读模式
    从Micro SD卡启动NXP i.MX RT1052-EVK开发板



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

    1.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。一种简单的方法是在项目创建/导入期间指定:

    2.png

    链接到ram



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

    3.png

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



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

    4.png

    原来的映射图



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


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


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




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

    5.png

    改变了的内存映射图



    S19文件


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

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

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

    添加build步骤生成s19文件



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

    7.png

    s19文件


    测试调试运行

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

    xip启动配置


    然后检查一切是否正常:

    9.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
    复制代码
    10.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
    复制代码
    11.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" .
    复制代码
    12.png

    复制.s19文件


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

    13.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
    复制代码
    14.png

    创建启动映像


    生成启动映像

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

    1. copy boot_image.sb "C:\nxp\Flashloader_i.MXRT1050\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware"
    复制代码
    15.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

    16.png

    串行下载器模式


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

    17.png

    通过opensda供电板


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

    18.png

    电路板处于串行下载模式


    接下来,启动以下工具

    1. C:\nxp\McuBootUtility\Flashloader_i.MXRT1050_GA\Tools\mfgtools-rel\MgTool2.exe
    复制代码
    如果连接到Serial Loader,它应该显示如下:

    19.png

    连接mfg tool


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

    20.png

    开始


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

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

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

    25.png

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


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

    27.png

    LED不断闪烁


    总结

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



    作者:阿哲                   文章出处:点击




    qiandao qiandao
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-4 14:14 , Processed in 0.079959 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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