发博文
Aquarius

http://blog.chinaunix.net/space.php?uid=20492558

积累是思考的基石,思考是智慧的源泉。 <a href="http://aaronwong.cublog.cn"><span style="color:rgb(255,249,157);">我思故我为</span></a>   
个人资料
  • 博客访问:587915
  • 博文数量:90
  • 博客积分:10011
  • 博客等级:上将
  • 关注人气: 3
  • 注册时间:2006-11-19 22:52:33
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
分类: ARM

       之前介绍了使用ARM JTAG仿真器将映像文件加载到ARM处理器内部SRAM中进行程序调试的方法,而在实际操作中,将映像文件加载到外部SDRAM中进行调试的方式更为常见。

       要把映像文件加载到SDRAM中,除了要正确设置好映像文件的RO段基地址外(对于一个加载时域和运行时域相同的映像文件来说,RO段基地址实际上就是该映像文件在存储空间的起始地址),更关键的是要对SDRAM进行初始化。因为在上电时,SDRAM是没有被初始化的,所谓初始化SDRAM,就是要设置处理器的SDRAM空间以及读写SDRAM的时序参数,因而SDRAM在初始化之前是不能进行读写操作的。

       对于PXA270处理器,初始化SDRAM的工作通过配置存储控制器寄存器来完成,这些寄存器包括MDCNFGMDREFRMDMRS

       由于这些寄存器都映射到了某一存储空间地址,因而可以在AXD的命令行窗口(System Views->Command Line Interface [Alt+L])中使用setmem命令来对寄存器进行配置。setmem命令(简写为smem)可以为存储空间的某一地址单元指定值。例如“setmem 0x48000000 0xac9 32的含义就是将常数0xac9保存到地址为0x48000000的字中(一个字32bit)。实际上,通过查阅Intel PXA27x Processor Family Developer’s Manual可知,0x48000000正是寄存器MDCNFG的地址,因而这条命令实质上完成了对MDCNFG寄存器的配置,使能SDRAM partition 0,使用32bit宽的SDRAM数据总线,9位列地址,13位行地址,SDRAM内部采用4 bank设计,tRP=3CL=3tRCD=3tRAS7tRC10,采用普通寻址模式;不使用SDRAM partition 2/3。具体设置要根据实际所使用的SDRAM芯片进行。

       因此,可使用34setmem命令初始化SDRAM,之后就可以正确地将映像文件加载到SDRAM中运行了。顺便提一句,PXA270有两种SDRAM存储模式,一种是小空间模式,支持464Mpartition共计256M字节,起始地址为0xa0000000;另一种是大空间模式,支持4256Mpartition共计1GB,起始地址为0x80000000。应根据实际情况设置正确的RO BASE地址。

       

    关于使用ob命令自动初始化SDRAM

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

       例如,将SDRAM初始化命令序列保存在PXA270.ini文件中,执行命令:

       ob $PATH/PXA270.ini

       就可自动执行初始化SDRAM的命令。其中,obobey的简写,$PATHPXA270.ini文件的绝对路径。

       更多AXD命令和内容可以参考ADS手册之《AXD and armsd Debuggers Guide》。

 

       启动AXD时自动初始化SDRAM

       感谢网友Garfield的指点,他提出了在硬件平台不变的情况下,在启动AXD时自动初始化SDRAM的一劳永逸的办法,经笔者证实,该方法确实是可行的。

具体办法如下:

将初始化SDRAM的命令序列保存为一个*.txt文本文件(可以直接将上述的*.ini文件后缀改为.txt),然后在AXD的主窗口下选择菜单Options>Configure Interface...,在Session File一页中选择“Run Configuration Script”,将该.txt文本文件作为一个脚本加进来,确定。这样以后每次启动AXD时,就会自动运行该脚本来完成对SDRAM的初始化。


我的更多文章
[发评论] 评论 重要提示:警惕虚假中奖信息!
  • chinaunix网友 2009-11-24 11:20
    谢谢博主,读你的文章受益匪浅!!
  • chinaunix网友 2009-11-24 11:20
    谢谢博主,读你的文章受益匪浅!!
  • chinaunix网友 2007-12-15 11:16
    我的板子开始的时候能够正常的运行和调试,但是后来怎么都不能进行AXD调试了,期间也没动过板子啊,SDRAM也进行了初始化,就是不能正常加载运行调试,希望版主可以帮忙解决一下。wuleitianshi911@gmail.com 非常感谢
  • chinaunix网友 2007-11-24 20:02
    太感大家了,我新做了一块板,点一个LED点了二天都没有点亮,仿真加载到SDRAM就是加不进,我把板子上所有没有用的元件都焊下来了,只剩下CPU和SDRAM了,结果还是不行,同样的程序在人家开发板跑得好好的,我只好拼命的查硬件,还是没有查到原因,多亏看到这篇文章,才搞定。原来人家的开发板的FLASH内有程序,一上电就初始化了SDRAM,当我调试下载到SDRAM跑时当然没有事,但我新板子FLASH是空的所以上电没有初始化SDRAM,所以跑不起来!!
  • chinaunix网友 2007-05-29 14:19
    你好,看了你的文章很有收获.我刚接触AXD,很多不明白,我用的是S3C2410,我想调试bootloader,初始化SDRAM后,把bootloader加载到SDRAM,但S3C2410默认是上电后自动将NAND FLASH中的前4K复制到SRAM即从0x00000000开始启动,而我现在的bootloader在SDRAM即0x30000000开始,我该如何处理?谢谢!
  • richardvip 2007-05-28 21:01
    谢谢,非常感谢你的回复,谢谢你不厌其烦的回答,再看你的帖子前,我的程序一直没有在AXD中对SDRAM初始化,也没有向你在“启动AXD时自动初始化SDRAM:”中体的那样做,就是什么也没做,可是程序也能在SDRAM中调试,这是为什么呀,还是先谢谢了,麻烦你了
  • richardvip 2007-05-26 11:39
    你好,感谢你的回复,还有个问题请教一下你,是不是每次运行程序都要在AXD下初始化SDRAM,还是只要在第一次使用时初始化一下就可以了,先 谢谢了
  • richardvip 2007-05-23 19:38
    你好,看了你的文章很受启发,我有个问题想请教一下你,你在文中说了SDRAM初始化的问题,我用的是三星的44B0,在它的初始化程序44binit.s中已经有了对SDRAM的初始化,包括对有关的13个寄存器的初始化。请问这样还用在AXD下初始化SDRAM吗,为什么,谢谢
  • chinaunix网友 2007-05-17 17:30
    奇文共欣赏,疑义共与析。大家共同讨论,共同提高。我也受益匪浅,感谢!^-^
  • chinaunix网友 2007-05-12 18:11
    哥们,你这文章对我帮助太大了,我在44b0上练“点灯大法”,弄了两天才看到你这文章,一下解决问题。。太感谢你了。。
共 2 页
12
亲,您还没有登录,请[登录][注册]后再进行评论