在我们日常开发中,都倾向于直接把应用代码下载到 SRAM/SDRAM 里调试(视应用代码大小),因为代码下载到 RAM 比较快,也无需过多的擦写 flash,那当调试完成,又该如何把应用代码下载到 flash 里启动呢?本文提供了一篇指导,教大家如何把 RT1170跑在 SDRAM 的代码下载到外部 flash 并通过 None XIP 模式从 flash 启动。
本文是基于 NXP RT1170 SDK 2.15 的 HelloWorld demo, 官方 MIMXRT1170-EVK开发板,生成 ARMGCC SDRAM 工程,偏移 APP image entry,使用工具生成 image,然后下载到外部 flash 中。具体步骤如下:
1.App image 的生成
1.1 下载 RT1170 SDK 2.15 并解压到本地
1.2 参考 Getting Started 文档建立 ARMGCC 编译环境
1.3 修改相应的 LD 文件中 image 的起始地址,这里为了保证 IVT 等 image 头部数据的空间,偏移了 0x2000 字节,但不是固定的,客户可根据自己需要微调。
1.4 进入对应项目的 armgcc 目录,运行 build_sdram_debug.bat 文件
2. 获取 XMCD 文件
因为 SDRAM debug 下载代码的时候,是由 IDE 工具执行相应的脚本来初始化设备的 SDRAM接口,因此当把 image 下载到 flash 启动时,需要配置 XMCD 文件,由 BootROM 来完成这一部分的初始化工作。这里使用了一点小技巧,是用了 SPT 工具直接从 flexspi_nor_sdram 的image 中提取了 XMCD 信息。
记住这个路径,待会会用到。
3.使用 MCUBootUtility 完成 image 的下载
3.1 配置 boot mode 为 serial download,通过 USB 连接 RT1170EVK。
3.2 加载 XMCD 文件,就是从前面那个路径导入
3.3 加载 elf 文件并生成完整的 image
3.4 下载 image 到 RT1170EVK
4. 从 flash 启动
配置 boot mode 为 internal boot 后,上电启动。
小伙伴们,你们学会了吗