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

OK6410 DDR初始化

时间:2015-01-18 18:30:47      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

在OK6410上进行裸板程序编写时,使用jink或者在jlink-commander中使用loadbin ddr.bin 0xc000000后都是不能成功初始化DDR,停留在等待DDR初始化ready的那一步;

注:前两天还可以成功初始化DDR并能进行UART初始化的动作的,只是后来进行NAND flash相关初始化和写操作失败后再loadbin也不能成功初始化DDR了;

相关参数:

HCLK=133M;ARMCLK=533M;

DDR的型号:K4X1G163PC-Samsung,每片128M,共两片

Makefile中链接地址为0xc000000

ddr.h除了参数的设置,地址没什么好看的

 1 /*
 2 * ddr.h
 3 *
 4 * Created on: 2014-12-28
 5 * Author: Administrator
 6 */
 7 
 8 #ifndef DDR_H_
 9 #define DDR_H_
10 #include "common.h"
11 #define P1MEMCCMD (*((volatile unsigned long*)0x7E001004))
12 #define P1REFRESH (*((volatile unsigned long*)0x7E001010))
13 #define P1CASLAT    0x7e001014
14 #define MEM_SYS_CFG    0x7e00f120
15 #define P1MEMCFG    0x7e00100c
16 #define P1T_DQSS    0x7e001018
17 #define P1T_MRD     0x7e00101c
18 #define P1T_RAS     0x7e001020
19 #define P1T_RC     0x7e001024
20 #define P1T_RCD     0x7e001028
21 #define P1T_RFC     0x7e00102c
22 #define P1T_RP     0x7e001030
23 #define P1T_RRD     0x7e001034
24 #define P1T_WR     0x7e001038
25 #define P1T_WTR     0x7e00103c
26 #define P1T_XP     0x7e001040
27 #define P1T_XSR     0x7e001044
28 #define P1T_ESR     0x7e001048
29 #define P1MEMCFG2    0X7e00104c
30 #define P1_chip_0_cfg    0x7e001200
31 #define P1_user_cfg 0x7E001304
32 
33 #define P1MEMSTAT    0x7e001000
34 //#define P1MEMCCMD    0x7e001004
35 #define P1DIRECTCMD    0x7e001008
36 /*21:2 chips--Burst:4 bytes--Auto Power down:140ns--AP:10--RAW:14--Column:10*/
37 #define P1MEMCFG_VAL 0x10012
38 /*Read delay 1 cycle for Mobile DDR--Mobile DDR SDRAM--Memory width:32--*/
39 #define P1MEMCFG2_VAL 0xb41
40 #define P1_USER_CFG_VAL 0x0
41 
42 #define set_val( addr, val ) ( *((unsigned long*) addr) = (val) )
43 void ddr_init(void);
44 #endif /* DDR_H_ */

ddr.c

#include "ddr.h"
#include "common.h"
void ddr_init(void) {
set_val(MEM_SYS_CFG, 0xd);//Xm0CSn[2] 作为NFCON
P1MEMCCMD = 0x4; /*DRAM controller Config state*/
P1REFRESH = ((7.8*133) - 1); /*Fresh timeval 7.8us*/

set_val(P1CASLAT, 3 << 1); /*CAS latency :3*/
set_val(P1T_DQSS, 0x1);
set_val(P1T_MRD, 0x2);
//Version2 Start
//set_val(P1T_RAS, 0x8);
set_val(P1T_RAS, 0x7);
//Version2 End
set_val(P1T_RC, 0xa);
set_val(P1T_RCD, 0xc); //5:3=4-3 2:0=4
set_val(P1T_RFC, 0x10b);
set_val(P1T_RP, 0xc);
set_val(P1T_RRD, 0x3); 
set_val(P1T_WR, 0x3);
set_val(P1T_WTR, 0x2);
set_val(P1T_XP, 0x2);
set_val(P1T_XSR, 0x10);
set_val(P1T_ESR, 0x10);

set_val(P1MEMCFG, P1MEMCFG_VAL);
set_val(P1MEMCFG2, P1MEMCFG2_VAL);
set_val(P1_chip_0_cfg, 0x150FB);
set_val(P1_user_cfg, P1_USER_CFG_VAL);

/*Memory init*/
set_val(P1DIRECTCMD, 3 << 18 ); /*NOP*/
set_val(P1DIRECTCMD, 0 ); /*Prechargeall*/
set_val(P1DIRECTCMD, 2 << 18 ); /*Autorefresh*/
set_val(P1DIRECTCMD, 2 << 18 ); /*Autorefresh*/
set_val( P1DIRECTCMD, 0xa0000 ); // EMRS
set_val( P1DIRECTCMD, 0x80032 ); // MRS

P1MEMCCMD = 0x0; /*DRAM controller Go state*/

while(((*(unsigned long*)P1MEMSTAT)&0x3)!=0x1);
}

loadbin ddr.bin 0xc000000

setpc 0xc000000

g

没有弹出下一步的命令提示符

Ctrl+C关掉jlink-commander后重启jlink-commander

halt

看到pc指针的值

回到反汇编代码中查找pc值

位置在等待ddr初始化成功信号的循环中

问题是:ddr没有成功初始化,为什么?继续检查clock参数和ddr参数的设置中

OK6410 DDR初始化

标签:

原文地址:http://www.cnblogs.com/sturdy/p/4232009.html

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