[ZLG-ARM] SDRAM问题

[复制链接]
 楼主| ybqchj 发表于 2009-2-10 10:35 | 显示全部楼层 |阅读模式
我用的芯片是LPC2468,SDRAM是K4S561632H,在调试EMC模块(SDRAM)的时候碰到下面的问题,请教周工及高手帮忙<br />EMC_DYN_RP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;2;&nbsp;&nbsp;/*&nbsp;command&nbsp;period:&nbsp;3(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RAS&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;3;&nbsp;&nbsp;/*&nbsp;RAS&nbsp;command&nbsp;period:&nbsp;4(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_SREX&nbsp;&nbsp;&nbsp;=&nbsp;7;&nbsp;&nbsp;/*&nbsp;Self-refresh&nbsp;period:&nbsp;8(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_APR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;2;&nbsp;&nbsp;/*&nbsp;Data&nbsp;out&nbsp;to&nbsp;active:&nbsp;3(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_DAL&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;5;&nbsp;&nbsp;/*&nbsp;Data&nbsp;in&nbsp;to&nbsp;active:&nbsp;5(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_WR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;/*&nbsp;Write&nbsp;recovery:&nbsp;2(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;5;&nbsp;&nbsp;/*&nbsp;Active&nbsp;to&nbsp;Active&nbsp;cmd:&nbsp;6(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RFC&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;5;&nbsp;&nbsp;/*&nbsp;Auto-refresh:&nbsp;6(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_XSR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;7;&nbsp;&nbsp;/*&nbsp;Exit&nbsp;self-refresh:&nbsp;8(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RRD&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;/*&nbsp;Active&nbsp;bank&nbsp;A-&gtB:&nbsp;2(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_MRD&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;2;&nbsp;&nbsp;/*&nbsp;Load&nbsp;Mode&nbsp;to&nbsp;Active&nbsp;cmd:&nbsp;3(n+1)&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RD_CFG&nbsp;=&nbsp;1;&nbsp;&nbsp;/*&nbsp;Command&nbsp;delayed&nbsp;strategy&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;Default&nbsp;setting,&nbsp;RAS&nbsp;latency&nbsp;3&nbsp;CCLKs,&nbsp;CAS&nbsp;latenty&nbsp;3&nbsp;CCLKs.&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RASCAS0&nbsp;=&nbsp;0x00000303;<br />//#if&nbsp;ENG_BOARD_LPC24XX&nbsp;&nbsp;/*&nbsp;NXP&nbsp;engineering&nbsp;board&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;256MB,&nbsp;16Mx16,&nbsp;4&nbsp;banks,&nbsp;row=12,&nbsp;column=9&nbsp;*/<br />&nbsp;&nbsp;//EMC_DYN_CFG0&nbsp;=&nbsp;0x00000480;<br />//#else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Embedded&nbsp;Artists&nbsp;board&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;256MB,&nbsp;16Mx16,&nbsp;4&nbsp;banks,&nbsp;row=13,&nbsp;column=9&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_CFG0&nbsp;=&nbsp;0x00000680;<br />//#endif<br />&nbsp;&nbsp;delayMs(1,&nbsp;100);&nbsp;&nbsp;&nbsp;/*&nbsp;use&nbsp;timer&nbsp;1&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;Mem&nbsp;clock&nbsp;enable,&nbsp;CLKOUT&nbsp;runs,&nbsp;send&nbsp;command:&nbsp;NOP&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_CTRL&nbsp;=&nbsp;0x00000183;<br />&nbsp;&nbsp;delayMs(1,&nbsp;200);&nbsp;&nbsp;&nbsp;/*&nbsp;use&nbsp;timer&nbsp;1&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Send&nbsp;command:&nbsp;PRECHARGE-ALL,&nbsp;shortest&nbsp;possible&nbsp;refresh&nbsp;period&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_CTRL&nbsp;=&nbsp;0x00000103;<br />&nbsp;&nbsp;/*&nbsp;set&nbsp;32&nbsp;CCLKs&nbsp;between&nbsp;SDRAM&nbsp;refresh&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RFSH&nbsp;=&nbsp;0x00000002;<br />&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;0x40;&nbsp;i++);&nbsp;/*&nbsp;wait&nbsp;128&nbsp;AHB&nbsp;clock&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;set&nbsp;28&nbsp;x&nbsp;16CCLKs=448CCLK=7us&nbsp;between&nbsp;SDRAM&nbsp;refresh&nbsp;cycles&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_RFSH&nbsp;=&nbsp;28;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;To&nbsp;set&nbsp;mode&nbsp;register&nbsp;in&nbsp;SDRAM,&nbsp;enter&nbsp;mode&nbsp;by&nbsp;issue<br />&nbsp;&nbsp;MODE&nbsp;command,&nbsp;after&nbsp;finishing,&nbsp;bailout&nbsp;and&nbsp;back&nbsp;to&nbsp;NORMAL&nbsp;mode.&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Mem&nbsp;clock&nbsp;enable,&nbsp;CLKOUT&nbsp;runs,&nbsp;send&nbsp;command:&nbsp;MODE&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_CTRL&nbsp;=&nbsp;0x00000083;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Set&nbsp;mode&nbsp;register&nbsp;in&nbsp;SDRAM&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;Mode&nbsp;regitster&nbsp;table&nbsp;for&nbsp;Micron's&nbsp;MT48LCxx&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;bit&nbsp;9:&nbsp;&nbsp;&nbsp;Programmed&nbsp;burst&nbsp;length(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit&nbsp;8~7:&nbsp;Normal&nbsp;mode(0)<br />&nbsp;&nbsp;bit&nbsp;6~4:&nbsp;CAS&nbsp;latency&nbsp;3<br />&nbsp;&nbsp;bit&nbsp;3:&nbsp;&nbsp;&nbsp;Sequential(0)<br />&nbsp;&nbsp;bit&nbsp;2~0:&nbsp;Burst&nbsp;length&nbsp;is&nbsp;8<br />&nbsp;&nbsp;row&nbsp;position&nbsp;is&nbsp;12&nbsp;*/<br />&nbsp;&nbsp;dummy&nbsp;=&nbsp;*((volatile&nbsp;DWORD&nbsp;*)(SDRAM_BASE_ADDR&nbsp;|&nbsp;(0x33&nbsp;&lt&lt&nbsp;12)));<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;EMC_DYN_CTRL&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;/*&nbsp;Send&nbsp;command:&nbsp;NORMAL&nbsp;*/<br />&nbsp;&nbsp;EMC_DYN_CFG0&nbsp;|=&nbsp;0x00080000;&nbsp;&nbsp;&nbsp;/*&nbsp;Enable&nbsp;buffer&nbsp;*/<br />&nbsp;&nbsp;delayMs(1,&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Use&nbsp;timer&nbsp;1&nbsp;*/<br />&nbsp;&nbsp;return;<br />}<br /><br />1。请问一下这条指令是为了实现什么功能?dummy&nbsp;=&nbsp;*((volatile&nbsp;DWORD&nbsp;*)(SDRAM_BASE_ADDR&nbsp;|&nbsp;(0x33&nbsp;&lt&lt&nbsp;12)));<br />2。为何要写四个EMC_DYN_CTRL(红色部分)?一定要这样的顺序写吗?<br />3。我现在遇到了个问题,比如我第一次存入256个字节(1到256的数)到SDRAM,显示结果没问题,之后重新上电,看到SDRAM为全0,第二次写入10个字节(全为0)到SDRAM,显示结果确是低10个字节是全0,但是从第10个字节之后的数确是我第一次存入的那些数(两次存的起始地址是一样)怎么会这样?
msleep 发表于 2009-4-2 17:52 | 显示全部楼层

这个问题就是比较奇怪

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

56

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部