我正在尝试修改现有的初始化序列(SDRAM 的低级初始化)以适应硬件配置的变化:我的 iMX31 上的现有 SDRAM 被替换为不同的大小,否则相同的 type/manufacturer/layout/pins/timings 。 . 根据规格。
简要设置场景和错误行为:我设法让电路板启动(顺序如下:从 NAND 执行引导加载程序,将“step2 bootloader”复制到 RAM,从 RAM 执行“step2 bootloader”)。但我似乎有一些设置错误,因为从 RAM 执行(跳转到第 2 步后)始终失败。
我进行了大量深入测试以识别错误参数,我的结果如下: - 从 NAND 或 JTAG 执行时,单字节/字读/写工作 - 从 NAND 执行时,逐块/突发写入似乎工作( JTAG 也是)有趣的事情: - 在逐块写入之后,我需要对任何 SDRAM 地址进行多次读取以读取正确的字节/字(!) - 如果我将列设置修改为仅使用更高的(+1)数量“加载模式”列但不用于预充电/刷新,然后它可以工作,但不一致(根据我的理论,它在较低的地址范围内可靠地工作,丢失的列无关紧要)。
要了解我的配置:RAM 中的设置几乎与此问题中的设置相同。这并不奇怪,因为它们是由 Freescale 提供的,除了 RAM 时序: 在 Freescale iMX31 上,我如何将 SDRAM 地址转换为 CPU 地址? 我的原始设置是相同的(链接中也是 64MB SDRAM),我的新 RAM 是 128MB。所有参考板都提供 64MB 或 128MB,因此 iMX31 和衍生产品都支持这两个值。
我必须做出的改变(注意:假设!)仅在 RAM 的 COLUMN 配置(它是另一列)中。RAM 的大小是两倍,但除此之外,规范要求完全相同的时序等。由于它只有一列(参见上面的链接,我的预充电、刷新和加载模式寄存器从 0x92100000 更改为新 RAM 的 0x92200000 - 例如) 没有其他任何改变。
问题 1:我的假设是否有意义,即如果所有时序和物理芯片特性(影响驱动强度、时序和功耗)都相似,那么列数的变化可能是“本地的”(不影响其他设置)?有趣的是,我将我的设置与在线提供的许多其他设置(U-Boot、Red-Boot 128MB)进行了比较,除了板级特定设置(例如驱动强度)之外,我没有发现差异。
问题 2:我上面的错误行为(写入工作,仅读取部分)可能是 RAM 的某个无效设置所独有的。有谁能给我一个建议,让我仔细看看哪个设置?也可以设置“安全”参数,这样即使性能下降,系统也可以让我缩小罪魁祸首。