微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S5PV210(TQ210)学习笔记——内存配置(DDR2)

S5PV210(TQ210)学习笔记——内存配置(DDR2)

时间:11-28 来源:互联网 点击:

  1. ameters.
  2. 4.SetthePhyControl0.ctrl_startbit-fieldto‘1’.
  3. 5.SettheConControl.Atthismoment,anautorefreshcountershouldbeoff.
  4. 6.SettheMemControl.Atthismoment,allpowerdownmodesshouldbeoff.
  5. 7.SettheMemConfig0register.Iftherearetwoexternalmemorychips,settheMemConfig1register.
  6. 8.SetthePrechConfigandPwrdnConfigregisters.
  7. 9.SettheTimingAref,TimingRow,TimingDataandTimingPowerregistersaccordingtomemoryACparameters.
  8. 10.IfQoSschemeisrequired,settheQosControl0~15andQosConfig0~15registers.
  9. 11.WaitforthePhyStatus0.ctrl_lockedbit-fieldstochangeto‘1’.CheckwhetherPHYDLLislocked.
  10. 12.PHYDLLcompensatesthechangesofdelayamountcausedbyProcess,VoltageandTemperature(PVT)variationduringmemoryoperation.Therefore,PHYDLLshouldnotbeoffforreliableoperation.Itcanbeoffexceptrunsatlowfrequency.Ifoffmodeisused,setthePhyControl0.ctrl_forcebit-fieldtocorrectvalueaccordingtothePhyStatus0.ctrl_lock_value[9:2]bit-fieldtofixdelayamount.ClearthePhyControl0.ctrl_dll_onbit-fieldtoturnoffPHYDLL.
  11. 13.Confirmwhetherstableclockisissuedminimum200usafterpoweron
  12. 14.IssueaNOPcommandusingtheDirectCmdregistertoassertandtoholdCKEtoalogichighlevel
  13. 15.Waitforminimum400ns.
  14. 16.IssueaPALLcommandusingtheDirectCmdregister.
  15. 17.IssueanEMRS2commandusingtheDirectCmdregistertoprogramtheoperatingparameters.
  16. 18.IssueanEMRS3commandusingtheDirectCmdregistertoprogramtheoperatingparameters.
  17. 19.IssueanEMRScommandusingtheDirectCmdregistertoenablethememoryDLLs.
  18. 20.IssueaMRScommandusingtheDirectCmdregistertoresetthememoryDLL.
  19. 21.IssueaPALLcommandusingtheDirectCmdregister.
  20. 22.IssuetwoAutoRefreshcommandsusingtheDirectCmdregister.
  21. 23.IssueaMRScommandusingtheDirectCmdregistertoprogramtheoperatingparameterswithoutresettingthememoryDLL.
  22. 24.Waitforminimum200clockcycles.
  23. 25.IssueanEMRScommandusingtheDirectCmdregistertoprogramtheoperatingparameters.IfOCDcalibrationisnotused,issueanEMRScommandtosetOCDCalibrationDefault.Afterthat,issueanEMRScommandtoexitOCDCalibrationModeandtoprogramtheoperatingparameters.
  24. 26.Iftherearetwoexternalmemorychips,performsteps14~25forchip1memorydevice.
  25. 27.SettheConControltoturnonanautorefreshcounter.28.Ifpowerdownmodesisrequired,settheMemControlregisters.

上面就是手册上给出的DDR2型内存芯片的初始化序列,但是单纯的根据上面的步骤配置可能有些困难,这时,我们可以参考u-boot的内存初始化代码来初始化内存,最后你会发现u-boot的操作顺序跟上面是完全一致的。

四 内存初始化代码

我将我配置内存的代码上传到CSDN的下载空间,如果需要的话可以去我资源里下载,是C语言版的。

五 遗留问题

配置好内存的代码烧写到Nand运行是正常的,但是用USB方式启动时不正常,目前还没有找到原因,如果有朋友解决了或者有其他问题请留言相告,在这里先说声谢谢。

现在找到原因了,原来S5PV210的USB启动过程跟Nand启动方式不一样,S5PV210以USB方式启动时会先将三星提供的一个固件程序下载到0xd0020010处运行,然后,再将用户代码下载0x23e00000处运行,也就是说,固件程序完成了内存的初始化,因为我们的代码位于0x23e00000处。而我们的代码中再次配置内存时会重置内存,下载到内存中的代码也就丢失了,所以程序执行到内存初始化函数就会挂掉。

为了证明上面的假设,我在代码中加上一段程序,该程序将内存的中代码拷贝到iram的16K以后的位置上(直接拷贝到0xd0020000处有问题,我是拷贝到了0xd0024000处,现在还不知道什么原因),然后将代码跳转到IRAM中,如果代码可以正常运行就可以证明内存初始化部分正常,实验结果是肯定的,下面总结下:

S5PV210以USB方式启动时用户代码是下载到内存中的(0x23e00000处),要使代码以USB方式启动时正常运行,应该注意以下两点:

(1)如果是位置相关的代码,连接地址应该链接到0x23e00000,如果是位置无关码,可以随便指定连接地址。
(2)用户代码需要检验自己运行时的位置,如果运行在内存中则需跳过内存初始化,根据需要决定是否需要代码重定位。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top