Part8.3-6410内存初始化

6410内存划分:

 

 

保留区:暂时不需要的区域

外设区:放的主要是6410里面的寄存器

 

 

在主存储区中分为五个区域,boot映像区内容参照前面,它是不固定的。

内部存储区分为两部分。垫脚石是在I_SRAM

静态存储区由6个bank组成

动态存储区 才是真正意义上的内存,平时说的放到内存就是放到这里

 

 

内存芯片的连接

和2410一样,6410也采用了两片128MB的内存芯片连接形成了256MB的内存。地址线相同,数据线不同。

 

 

 

 第五章的流程用到的寄存器基本上不会超出第五章的范围

 

在芯片手册5.4.1中有内存初始化流程

第一步是向memc_cmd寄存器输入一个3位二进制数100

 

 

打开u-boot中的/cpu_init.S

看它是怎么写的

事实上可以看到

 

这里要创建一个新的mem.S文件来编写内存初始化代码

在Makefile中需要在all:start.o 后面加上mem.o

 

.text

.global mem_init

mem_init:

  @放到mem_sys_cfg,第七位决定16-31位数据线是否作为内存数据线使用,如为1则作为SROMC数据线使用;

  ldr r0,=0x7e00f120

  mov r1,#0x0

  str r1,[r0]

 

  @放到memc_cmd中

  ldr r0,=0x7e001004

  mov r1,#0x4

  str r1,[r0]

  

  。。。@这里省略的是第二步,这里要用到的寄存器全在第五章可以找到。

  

  @issue NOP

  ldr r0,=0x7e001008  @DIRECTCMD地址

  mov r1,#0xc0000

  str r1,[r0]

  

  @issue prechargeall

  ldr r0,=0x7e001008@地址没变的话其实都可以删掉,只要两句话就行

  ldr r1,#0x0

  str r1,[r0]

  

  @issue autorefresh

  ldr r0,=0x7e001008

  ldr r1,#0x40000

  str r1,[r0]

  

  @issue autorefresh

  ldr r0,=0x7e001008

  ldr r1,#0x40000

  str r1,[r0]

  

  @issue mrs

  ldr r0,=0x7e001008

  ldr r1,#0xa0000

  str r1,[r0]

   

  @issue mrs

  ldr r0,=0x7e001008

  ldr r1,#0x80032

  str r1,[r0]

  

  @放到memc_cmd中,进入ready状态

  ldr r0,=0x7e001004

  mov r1,#0x0

  str r1,[r0]

 

check_ready:

  ldr r0,=0x7e001000

  ldr r1,[r0]@取数据

  mov r2,#0x3

  and r1,r1,r2@进行与操作

  cmp r1,#0x1@对比,看是否等于01,ready

  bne check_ready@不相等继续等待

 

  mov pc,lr

 

 

 

 

 http://www.cnblogs.com/lp1129/articles/3367841.html

 http://blog.csdn.net/flylokj/article/details/26448237

 http://blog.csdn.net/l502091250/article/details/52115653

http://blog.csdn.net/l502091250/article/details/52115653

 http://comm.chinaaet.com/adi/blogdetail/40034.html

 

posted @ 2017-06-28 16:11  郁兴力  阅读(183)  评论(0)    收藏  举报