小猫爪:i.MX RT1050学习笔记10-SDRAM的提前初始化
1 前言
前面提到我们可以在运行APP之前对RT的SDRAM进行初始化,确保其可以作为RT的外部RAM正常运行,大致有使用脚本和使用DCD,接下来我们来看看具体操作。
2 使用脚本
这种方式只适用在IDE debug环境下,如果我想将代码运行至SDRAM中进行debug,则可以采用这种方式。
在IAR环境中,脚本文件可以在如下界面中设置:
我们打开该文件,看一看里面在干什么:
__writeMemory32(0xffffffff, 0x400FC068, "Memory");
__writeMemory32(0xffffffff, 0x400FC06C, "Memory");
__writeMemory32(0xffffffff, 0x400FC070, "Memory");
__writeMemory32(0xffffffff, 0x400FC074, "Memory");
__writeMemory32(0xffffffff, 0x400FC078, "Memory");
__writeMemory32(0xffffffff, 0x400FC07C, "Memory");
__writeMemory32(0xffffffff, 0x400FC080, "Memory");
里面都是一些往一些地址寄存器写数据,在这里我只截取一段。
在KEIL环境中,脚本文件可以在如下界面中设置:
打开该文件:
_WDWORD(0x400FC068,0xffffffff);
_WDWORD(0x400FC06C,0xffffffff);
_WDWORD(0x400FC070,0xffffffff);
_WDWORD(0x400FC074,0xffffffff);
_WDWORD(0x400FC078,0xffffffff);
_WDWORD(0x400FC07C,0xffffffff);
_WDWORD(0x400FC080,0xffffffff);
里面也都是一些往一些地址寄存器写数据,在这里我只截取一段。
所以我们只要把跟初始化SDRAM相关的寄存器值加到初始化脚本中,就可以在debug 代码之前将SDRAM成功初始化。
3 使用DCD
还有一种方法,则是使用镜像中的DCD数据对SDRAM接口进行提前初始化,RT1050的bootROM会先读取镜像中的DCD数据,对SDRAM接口进行初始化。在镜像分解那一章我已经对DCD进行了详细的解析。
4 使用config tools快速得到初始化数据
我们已经了解到怎样提前初始化数据,接下来介绍一种方法可以快速计算出初始化SDRAM后的相关寄存器值。
这需要用到NXP官方的工具MCUXpresso Config Tools ,下载链接为:https://www.nxp.com.cn/design/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-config-tools-pins-clocks-peripherals:MCUXpresso-Config-Tools。
打开MCUXpresso Config Tools,选择第二项 :
然后随便找一个NXP的官方demo,这里我使用的是IAR版的hello world工程(一定得是NXP的官方例程,因为它是根据一定的结构和文件名来工作的)。
然后选择其他工具的设备配置数据选项(DCD),如下:
打开后如下:
可以看到跟SDRAM有关的寄存器我们可以看得清清楚楚,在这个界面我们非常轻易看懂每一个寄存器每一位代表着什么,比如我点开SEMC_SDRAMCR1,如下:
可以看到这个寄存器非常清楚地罗列出了,我们可以非常清晰方便的对其进行配置。
配置完我们则可以将其值放入debug脚本中,或者点击更新代码按钮更新DCD数据:
更新的DCD数据最后在工程文件的dcd.c中,可以直接点击代码预览查看代码:
END