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

浙公网安备 33010602011771号