我在使用ixmrt1170的开发板,因为程序操作片内ROM去的大小,有7兆左右,现在想把代码段放到SDRAM中,如何处理?
原来开发板的ram.icf示例为:
define symbol m_interrupts_start = 0x00000000;
define symbol m_interrupts_end = 0x000003FF;
define symbol m_text_start = 0x00000400;
define symbol m_text_end = 0x0003FFFF;
现在已知SDRAM的起始地址是0x80000000,如何进行分配,以使程序烧录后,能正确运行
Solved! Go to Solution.
你这里面只有 0x1000 的偏移,改成 0x2000 的偏移试试。这个_end 也没改完全。
define symbol m_interrupts_end = 0x800003FF;
另外可以生成 srec 格式文件给 MCUBootUtility
当代码 RO 段全部链在 SDRAM 时,这时候在 IDE 里无法将工程直接下载进 Flash 离线启动,需要借助额外工具(比如 MCUBootUtility)做下载(下载过程还要使能 DCD)。
在原 IDE 工程里只能在 SDRAM 调试(仿真器直接将二进制下载进 SDRAM 运行),这种方式断电程序会丢失。调试前 SDRAM 需要单独初始化,如下脚本里都包含了 SDRAM 初始化操作
\SDK_2.12.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7\iar\evkmimxrt1170_connect_cm7.mac
\SDK_2.12.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7\evkmimxrt1170_connect_cm4_cm7side.jlinkscript
目前是用MCU BootUtility烧录,配置如下:
其中DCD bin的路径为\NXP-MCUBootUtility-3.5.0\NXP-MCUBootUtility-3.5.0\src\targets\MIMXRT1176\evkmimxrt1170_xip_boot_header_dcd.bin
使用的例程是\SDK_2.12.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world
链接文件为MIMXRT1176xxxxx_cm7_sdram_txt.icf
点击"ALL-In-One-Action",显示:
你这里面只有 0x1000 的偏移,改成 0x2000 的偏移试试。这个_end 也没改完全。
define symbol m_interrupts_end = 0x800003FF;
另外可以生成 srec 格式文件给 MCUBootUtility
另外我还想问下,使用DCD.c文件如何产生dcd.cfg文件;或者有没有MXRT1176\evkmimxrt1170_xip_boot_header_dcd.bin这个文件对应的cfg参考下
这两个小工具都可以将 dcd.cfg 转换成 dcd.bin
\NXP-MCUBootUtility-3.5.0\tools\dcdgen
\NXP-MCUBootUtility-3.5.0\tools\imgutil
dcd.c 就是 dcd.bin 吧,前者只是直接用于工程编译。
通过查看,bin文件不是dcd.c,打开发现是二进制文件,请问BootUtility这个工具是依据什么产生的这个evkmimxrt1170_xip_boot_header_dcd.bin
好的,我试下
如果你是想工程全部 RO 代码都放在 SDRAM,可以使用 SDK 包里的 \SDK_2.12.0_MIMXRT1170-EVK\devices\MIMXRT1176\iar\MIMXRT1176xxxxx_cm7_sdram_txt.icf 链接文件。如果你想工程二进制能下进 Flash 里离线启动,需要做如下修改:
define symbol m_interrupts_start = 0x80002000;
define symbol m_interrupts_end = 0x800023FF;
define symbol m_text_start = 0x80002400;
define symbol m_text_end = 0x801FFFFF;
编译生成了out文件,但是MCU BootUtility烧录失败,在“connect bootROM”就报错
你可以生成 hex 或者 srec 格式镜像文件,然后打开文件看里面是不是全是连续地址(仅在一个Device Map空间)。你如果想把二进制下载进 Flash,必须是连续地址的镜像文件。