码迷,mamicode.com
首页 > 其他好文 > 详细

210内存初始化

时间:2018-01-27 20:14:40      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:哈哈   fresh   baidu   没有   conf   stat   完成   s5pv210   start   

210的地址空间,我们所能访问的内存从0x2000_0000开始

技术分享图片

打开S5PV210的手册,像6410一样,6410有内存初始化的顺序,2410是不是也有?210用的是DDR2的内存,所以我们能在第五章节找到这个

技术分享图片

技术分享图片

技术分享图片

这张图就是210内存的初始化顺序

1、是保证供电充足稳定,我们不用管这一条

2、设置PhyControl0寄存器的一些位ctrl_start_point、ctrl_inc、ctrl_dll_on ,这三个位。来找到这个寄存器

技术分享图片

代码如下:

在前面要宏定义这个寄存器地址

#define DMC_PHCONTROL0 0xf0000018
 1     ldr r0, =DMC_PHCONTROL0
 2     ldr r1, 0x00101000
 3     str r1, [r0]
 4     
 5     ldr r0, =DMC_PHCONTROL0
 6     ldr r1, 0x00101002
 7     str r1, [r0]

3、清除DQS部分,这部分我们没有使用到,所以不用管

4、设置PhyControl0.ctrl_start为1

1     ldr r0, =DMC_PHCONTROL0
2     ldr r1, 0x00101003
3     str r1, [r0]

5、设置concontrol寄存器,在此刻,自动刷新计数器应该被关掉。来找到这个寄存器,关掉自动刷新,所以我们保存它的默认值

技术分享图片

代码如下:

同样要宏定义这个寄存器的地址

#define DMC_CONCONTROL 0xf0000000
1     ldr r0, =DMC_CONCONTROL
2     ldr r1, 0x0fff1350
3     str r1, [r0]

6、设置Memcontrol寄存器,在此刻,所有掉电模式应该被关闭,还有一个内存类型应该选择

技术分享图片

技术分享图片

代码如下:

#define DMC_MEMCONTROL 0xf0000004
1     ldr r0, =DMC_MEMCONTROL
2     ldr r1, 0x00202400
3     str r1, [r0]        

7、设置MemConfig0寄存器。如果有两片外部的内存芯片就设置MemConfig1寄存器

在本篇的第一幅图中,哦我们只配置DRAM0,所以是DMC0,其中的0~11位需要看板子上的内存芯片类型才能确定配置参数

技术分享图片

配置代码如下:

#define DMC_MEMCONFIG0 0xf0000008
1     ldr    r0, =DMC_MEMCONFIG0
2     ldr    r1, =0x20F00313                
3     str    r1, [r0]

8、设置PrechConfig 和 PwrdnConfig寄存器

 技术分享图片技术分享图片

代码配置如下,这两个寄存器就默认他们本身初始化的配置就行

#define DMC_PRECHCONFIG 0xf0000014
1     ldr r0, =DMC_PRECHCONFIG
2     ldr r1, =0xff000000
3     str r1, [r0]
#define DMC_PWRDNCONFIG 0xf0000028
1     ldr     r0, =DMC_PWRDNCONFIG
2     ldr    r1, =0xFFFF00FF                    
3     str    r1, [r0]

9、根据内存AC参数,设置TimingAref, TimingRow, TimingData TimingPower寄存器

技术分享图片技术分享图片技术分享图片

#define DMC_TIMINGAREF     0xf0000030
#define DMC_TIMINGROW      0xf0000034
#define DMC_TIMINGDATA     0xf0000038
#define DMC_TIMINGPOWER    0xf000003c
 1     ldr    r0, =DMC_TIMINGAREF
 2     ldr    r1, =0x00000618                
 3     str    r1, [r0]
 4     
 5     ldr    r0, =DMC_TIMINGROW
 6     ldr    r1, =0x2B34438A                
 7     str    r1, [r0]
 8     
 9     ldr    r0, =DMC_TIMINGDATA
10     ldr    r1, =0x24240000
11     str    r1, [r0]
12     
13     ldr    r0, =DMC_TIMINGPOWER
14     ldr    r1, =0x0BDC0343                
15     str    r1, [r0]    

10、如果需要QoS体系,就配置QosControl0~15 QosConfig0~15寄存器,显然我们不需要这个

11、等待PhyStatus0.ctrl_locked这个位变成1,检查PHY DLL 是否被锁定

技术分享图片

#define DMC_PHYSTATUS   0xf0000040
wait_lock:
    ldr    r0, =DMC_PHYSTATUS 
    ldr    r1, [r0]            
    and    r2, r1, #0x4
    cmp    r2, #0x4                    
    bne    wait_lock

12、PHY DLL弥补了在内存操作中由处理、电压和温度引起的延迟量的改变。因此,为了更可靠的内存操作,PHY DLL不应该关闭。除了运行在低频率下它才能关闭。如果这种关闭模式被使用,就需要根据PhyStatus0.ctrl_lock_value[9:2]设置PhyControl0.ctrl_force位来纠正参数来修正延迟量。清除PhyControl0.ctrl_dll_on位可以把PHY DLL关闭。

13、在上电后确认  是否  稳定的时钟 的最小值是200us

这两步在查手册之后发现就是默认值,所以不需要我们设置

14、使用DirectCmd寄存器发出一个NOP命令来声称和维持CKE一个逻辑高电平

技术分享图片

 代码如下:

#define DMC_DIRECTCMD     0xf0000010
    ldr    r0, =DMC_DIRECTCMD
    ldr    r1, =0x07000000                    
    str    r1, [r0]

15、等待最小限度400ns

16、使用DirectCmd寄存器发出一个PALL命令

    ldr    r1, =0x01000000                    
    str    r1, [r0]

17、使用DirectCmd寄存器发出一个EMRS2命令来对操作参数编程

    ldr    r1, =0x00020000                    
    str    r1, [r0]

细心的人有没有发现这个寄存器少了第19、16位,哈哈哈哈哈哈哈哈,我也不知道为什么!特地又去下载了几份S5PV210的手册,发现如出一辙,都没有19、16位!

18、使用DirectCmd寄存器发出一个EMRS3命令来对操作参数编程

    ldr    r1, =0x00030000                    
    str    r1, [r0]

19、使用DirectCmd寄存器发出一个EMRS命令来使能内存DLLs

    ldr    r1, =0x00010400                    
    str    r1, [r0]

20、使用DirectCmd寄存器发出一个MRS命令来复位内存DLLs

    ldr    r1, =0x00000542                    
    str    r1, [r0]

21、使用DirectCmd寄存器发出一个PALL命令

    ldr    r1, =0x01000000                    
    str    r1, [r0]

22、使用DirectCmd寄存器发出一个两次Auto Refresh命令

    ldr    r1, =0x05000000                    
    str    r1, [r0]
    ldr    r1, =0x05000000                    
    str    r1, [r0]

23、在没有复位内存DLL时,使用DirectCmd寄存器发出一个MRS的命令对操作参数编程

    ldr    r1, =0x00000442                    
    str    r1, [r0]

24、等待最小限度200个时钟循环

25、使用DirectCmd寄存器发出一个EMRS的命令来对操作参数编程。如果没有使用OCD校准,发出一个EMRS命令来设置默认OCD校准。在那之后,发出一个EMRS命令来退出OCD校准模式并且对操作参数编程。

    ldr    r1, =0x00010780                    
    str    r1, [r0]
    
    ldr    r1, =0x00010400                    
    str    r1, [r0]

26、如果有两个内存芯片,重复前面芯片1的14~25操作顺序

    ldr    r1, =0x07100000                    
    str    r1, [r0]
    
    ldr    r1, =0x01100000                    
    str    r1, [r0]
    
    ldr    r1, =0x00120000                    
    str    r1, [r0]
    
    ldr    r1, =0x00130000                    
    str    r1, [r0]
    
    ldr    r1, =0x00110400                    
    str    r1, [r0]
    
    ldr    r1, =0x00100542                    
    str    r1, [r0]
    
    ldr    r1, =0x01100000                    
    str    r1, [r0]
    
    ldr    r1, =0x05100000                    
    str    r1, [r0]
    
    ldr    r1, =0x05100000                    
    str    r1, [r0]
    
    ldr    r1, =0x00100442                    
    str    r1, [r0]
    
    ldr    r1, =0x00110780                    
    str    r1, [r0]
    
    ldr    r1, =0x00110400                    
    str    r1, [r0]

27、设置ConControl寄存器开启自动刷新寄存器

    ldr    r0, =DMC_CONCONTROL
    ldr    r1, =0x0FF02030                    
    str    r1, [r0]
    
    ldr     r0, =DMC_PWRDNCONFIG
    ldr    r1, =0xFFFF00FF                    
    str    r1, [r0]
    
    ldr     r0, =DMC_CONCONTROL
    ldr    r1, =0x00202400                    
    str    r1, [r0]

28、如果需要使用掉电模式,可以设置MemControl寄存器。但是我们这里不需要。

 

到这为止,210的内存初始化就完成了。具体其中好多参数为什么要这么设置没可以参开U-boot这位老大哥,它是U-boot界的鼻祖

链接在这:链接:https://pan.baidu.com/s/1ghldktX 密码:ea3d,有需要的可以下载查看,建个SourceInsight工程,找找就行,这个压缩包不能再Windows操作系统下解压,要在Linux系统下解压。

 

 

 

 

 

 

 

 

210内存初始化

标签:哈哈   fresh   baidu   没有   conf   stat   完成   s5pv210   start   

原文地址:https://www.cnblogs.com/sanshijvshi/p/8366919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!