sdram的初始化_第1页
sdram的初始化_第2页
sdram的初始化_第3页
sdram的初始化_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARM JTAG 仿真器调试方法之 SDRAM 篇( 转) 2007-12-16 09:28 之前介绍了使用 ARM JTAG 仿真器将映像文件加载到 ARM 处理器内部 SRAM 中进行程序调试的方法,而在实际操作中,将映像文件加载到外部SDRAM 中进行 调试的方式更为常见。要把映像文件加载到 SDRAM 中,除了要正确设置好映像文件的RO 段基地址外 (对于一个加载时域和运行时域相同的映像文件来说, RO 段基地址实际上就是该映像文件在存 储空间的起始地址) , 更关键的是要对 SDRAM 进行初始化。 因为在上电时, SDRAM 是没 有被初始化的, 所谓初始化 SDRAM ,就是要设

2、置处理器的 SDRAM 空间以及读写 SDRAM 的时序参数,因而 SDRAM 在初始化之前是不能进行读写操作的。对于 PXA270 处理器,初始化 SDRAM 的工作通过配置存储控制器寄存器来完成, 这些寄存器包括MDCNFG , MDREFR ,MDMRS 。由于这些寄存器都映射到了某一存储空间地址,因而可以在 AXD 的命令行窗口 (SystemViews-Command Line Interface Alt+L )中使用 setmem 命令来对寄存器进行配置。 setmem 命令(简写为smem)可以为存储空间的某一地址单元指定值。例如setmem0 x48000000 0 xac9

3、32”的含义就是将常数 0 xac9 保存到地址为 0 x48000000 的字中(一个字 32bit) 。实际上,通过查阅 Intel PXA27x Processor Family Developer s Manual 可知, 0 x48000000 正是寄存器MDCNFG 的地址, 因而这条命令实质上完成了对 MDCNFG 寄存器 的配置,使能 SDRAM partition 0 ,使用 32bit 宽的 SDRAM 数据总线,9 位列地址,13 位行 地址, SDRAM 内部采用 4 bank 设计, tRP=3, CL=3 ,tRCD=3 , tRAS = 7, tRC = 10,采

4、用 普通寻址模式; 不使用 SDRAM partition 2/3 。具体设置要根据实际所使用的 SDRAM 芯片进 行。因此,可使用 34 条 setmem 命令初始化 SDRAM,之后就可以正确地将映像文件 加载到 SDRAM中运行了。顺便提一句, PXA270 有两种 SDRAM 存储模式,一种是小空间 模式,支持 4 个 64M 的 partition共计 256M 字节,起始地址为 0 xa0000000;另一种是大空 间模式,支持 4 个 256M 的 partition 共计 1GB,起始地址为 0 x80000000。应根据实际情况 设置正确的 RO BASE 地址。关于使用

5、ob 命令自动初始化 SDRAM :由于每次上电后往 SDRAM 加载映像时都需要对其进行初始化,手工输入多条命令 有时是很繁琐的。这时, 可以把初始化 SDRAM 的命令序列保存在一个 *.ini 文本文件中(也 可以是 *.txt 文件) ,每条命令占一行。然后在 AXD 命令行窗口使用 obey 命令调用该 *.ini 文 件,就可以将文件中的命令顺序执行,继而完成 SDRAM的初始化。例如,将 SDRAM 初始化命令序列保存在 PXA270.ini 文件中,执行命令:ob $PATH/PXA270.ini就可自动执行初始化 SDRAM 的命令。其中,ob 是 obey 的简写,$PAT

6、H 是 PXA270.ini文件的绝对路径。更多 AXD 命令和内容可以参考 ADS 手册之 AXD and armsd Debuggers Guide 。启动 AXD 时自动初始化 SDRAM :感谢网友 Garfield 的指点,他提出了在硬件平台不变的情况下,在启动 AXD 时自动 初始化 SDRAM的一劳永逸的办法,经笔者证实,该方法确实是可行的。具体办法如下:将初始化 SDRAM 的命令序列保存为一个 *.txt 文本文件(可以直接将上述的 *.ini 文件后缀 改为 .txt ),然后在AXD 的主窗口下选择菜单 Options Configure Interface. ,在 Se

7、ssion File 一页中选择“ RunConfiguration Script ”,将该 .txt 文本文件作为一个脚本加进来,确定。这 样以后每次启动 AXD 时,就会自动运行该脚本来完成对 SDRAM 的初始化。昨天又仔细的看了看我们现在要做的 SDRAM 初始化,发现还是有些不明白的地方: 对于 SDRAM 芯片,一般的初始化流程都是标准的,即:开机上电 - 200us 稳定期 - 所 有 Bank Precharge - Auto-refresh -MRS Command - 进入正常模式,那也就是说在这个过 程中,主 MPU 的 SDRAM 控制器中 MR 寄存器(我用的是 92

8、00,估计应该对应你的 270 中的 MDMRS )的值是一直在变化的, 并且每个步骤间都是由严格的时序和延时要求的。 我 现在的问题就在这里:固然tRP、 CL、 tRCD 和 tRC 等可以由 Config 寄存器进行配置, 但开机上电后的 200us 稳定期是 如何体现出来的?另外既然要修改 MR 的值,那又怎么能在脚本文件中一次性配置呢? 唉, 彻底倒塌了盼解答!Blog 作者的回复 :个人愚见:(1)上电后 200us 稳定期是为了等待 SDRAM 的输入时钟稳定下来,只要干等即可(上电 后等我们启动 AXD 对 SDRAM 执行初始化命令序列时已经大大超过了200us 等待)。(2

9、)所有 bank precharge,通过片上 SDRAM 控制器发出 PALL (precharge all banks)命令 来实现,可以参考 SDRAM 控制器状态图,对于 PXA270, 上电时处于 NOP 状态,此时如果 发出新的 MRS 命令(即写寄存器 MDMRS )会自动转入 PALL 状态进行所有 BANK 的预充 电,然后才由 SDRAM 控制器将控制信号置 MRS命令状态,将地址信号置 MDMRS 内容, 对 SDRAM 芯片的模式寄存器进行设置。另外,在 NOP 状态下,其他一些操作如置位 MDREFRSLFRESH 也会导致 PALL 。(3)因此, 在初始化 SDR

10、AM 时, 使用简单的命令配置寄存器 MDCNFG ,MDREFR 和 MDMRS 时,SDRAM控制器是会自动进入 PALL 状态对所有 BANK 进行预充电的。(4)至于 auto-refresh,是指通常的 CBR 吧,在 infineon 的 HYB25L256160AC (mobile-RAM ) 的datasheet 中指出,该步骤可以在 MRS 命令之前,也可以在其之后。 在 PXA27X 的 manual 中指出,初始化SDRAM 时要根据具体的 SDRAM 芯片来决定进行 CBR 的次数,具体做法 是对 SDRAM 进行非突发式的通常的读写操作(而且在首次进行 CBR 时,也

11、会自动转入 PALL 先进行预充电) 。(5)因此, SDRAM 控制器的状态机实际上保证了在用简单命令序列进行SDRAM 初始化时, SDRAM 所需要的初始化流程。 (由于命令序列通过 JTAG 仿真器上位机程序控制目标 处理器执行,所以执行速度较慢,而在启动代码中初始化 SDRAM 时,通常需要在配置寄 存器的操作之间插入 NOP 操作或适当延时,保证 SDRAM 初始化流程中的必要时延。 )(6)使用简单命令序列来初始化 SDRAM ,其目的仅仅是为了将映像文件加载到 SDRAM 中,而在启动代码中初始化 SDRAM 时,实际上不仅仅是初始化 SDRAM 芯片,之前还要 初始化 SDR

12、AM 控制器,使两者之间的配置相匹配,目的是为了在目标系统运行阶段,保 证目标处理器能无差错地对 SDRAM 进行读写操作,因此必须严格按照目标处理器的 datasheet 描述的上电复位初始化流程和步骤执行,包括严格的时序要求。(7)以上只是个人愚见,纰漏之处有待指正。这样使用简单命令序列来初始化SDRAM 的内部过程如下:上电等待 200us 以上-写控制寄存器(实际上进行了所有 BANK 的预充电), 包括写 MDMRS( 发 MRS 命令,设置 SDRAM 芯片工作模式) -auto-refresh- 正常模式。 不过, auto-refresh 这一步似乎没有找到合理的对应点,因为写

13、控制寄存器的命令序列并没 有对 SDRAM 进行读写操作(或者是在加载映像文件到 SDRAM 时对其进行了写操作而进 行了 auto-refresh?)。首先谢谢博主这么认真地帮我分析这个问题,你的这种严谨治学的态度真的让我很感谢!你说的 PXA270 由写MR 寄存器而自动触发所有 Bank 预充电的情况给我了很大的启发,对 照着 Atmel 的 9200 说明书,看到在它的 SDRAM 控制器启动流程中明确写着在 CBR 之前 “ Previously, an “ All Banks Precharge ” commandmust be issued. ” 也就是说,在这个启 动过程中,的

14、确是每一个 SDRAM 模式变化都需要人工去修改SDRAMC 的对应寄存器的。 看来,还是 Intel 比 Atmel 要更牛一些,难怪能成.PC 处理器的老大:)那现在就是在脚本文件中如何简单命令序列来进行配置的问题了,首先毫无疑问应该先配置Config 寄存器,以确定 tRP、CL、tRCD 和 tRC 对应的时钟周期;接下来就是按标准化流程 由 PALL - CBR(8 SDclock) - MRS - Normal依次修改 MPU 片内 SDRAMC_MR 寄存器的模式选择位,以实现模式的切换。在这个过程中可能会出现两种情况:一种是正像博主所说的,由于JTAG 仿真速度较慢,不同 se

15、tmem 命令直接执行的时延已经足够,那么就万事大吉;另一种情况是不同 setmem 命令对同一个 SDRAMC_MR 寄存器进行多次修改,造成了时许 的混乱,那就跟你说的一样:需要在中间加入以保证时延;具体结果如何,就等着过两天 Demo 板回来就真相大白了! 嘿嘿 你好,看了你的文章很受启发,我有个问题想请教一下你,你在文中说了SDRAM 初始化的问题, 我用的是三星的 44B0,在它的初始化程序 44binit.s中已经有了对 SDRAM的初始 化, 包括对有关的 13个寄存器的初始化。请问这样还用在 AXD 下初始化 SDRAM 吗,为 什么,谢谢Blog 作者的回复 :在程序中初始化

16、 SDRAM 是为了程序正常运行时能正常访问 SDRAM ,而把映像文件加载到 SDRAM 中进行调试时在 AXD 下初始化 SDRAM 是为了在加载映像文件时能正常访问 SDRAM ,以便把映像文件暂时写入SDRAM 。两者是两码事。所以,要在 SDRAM 中调试程序,就必须先初始化 SDRAM 。 你好,感谢你的回复,还有个问题请教一下你,是不是每次运行程序都要在 AXD 下初始化 SDRAM ,还是只要在第一次使用时初始化一下就可以了,先 谢谢了Blog 作者的回复 : 每次系统重新上电或硬件复位后都需要重新初始化 SDRAM 才能把映像文件加载到SDRAM 。可以设置在 AXD 启动时

17、自动对 SDRAM 进行初始化, 见“启动 AXD 时自动初始 化 SDRAM ”部分。有时候 AXD 启动后需要重新配置,这是 ADS 自身的问题,主要是看启 动后在 Command Line Interface窗口有没有出现初始化 SDRAM 的命令,另外在 AXD 的源 码窗口右键 Interleave Disassembly ,看各条代码在 SDRAM 中对应地址的内容是否为正确的 机器码,来检查映像文件是否成功加载。谢谢,非常感谢你的回复, 谢谢你不厌其烦的回答, 再看你的帖子前,我的程序一直没有在 AXD 中对 SDRAM初始化,也没有向你在“启动 AXD 时自动初始化 SDRAM

18、 :”中体的那 样做,就是什么也没做,可是程序也能在 SDRAM 中调试,这是为什么呀,还是先谢谢了, 麻烦你了Blog 作者的回复 :1.确认映像文件是否真的在 SDRAM 中;2.确认所用的 JTAG 仿真器上位机后台服务程序是否自动对 SDRAM 进行初始化;3.开发板的启动 ROM 中是否有对 SDRAM 进行初始化的代码。如果上电后 SDRAM 没有进行初始化,是不可能正常工作的。是否存在上电后能自动按照 前次的模式寄存器设置进行初始化的 SDRAM ,这就不得而知了。你好,看了你的文章很有收获我刚接触 AXD,很多不明白,我用的是 S3C2410,我想调试bootloader,初始化 SDRAM 后,把 bootloader 加载到 SDRAM, 但 S3C2410 默认是上电后自动将 NANDFLASH 中的前 4K 复制到 SRAM 即从 0 x0000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论