首页 > 代码库 > OK6410 DDR初始化

OK6410 DDR初始化

在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    0x7e00101414 #define MEM_SYS_CFG    0x7e00f12015 #define P1MEMCFG    0x7e00100c16 #define P1T_DQSS    0x7e00101817 #define P1T_MRD     0x7e00101c18 #define P1T_RAS     0x7e00102019 #define P1T_RC     0x7e00102420 #define P1T_RCD     0x7e00102821 #define P1T_RFC     0x7e00102c22 #define P1T_RP     0x7e00103023 #define P1T_RRD     0x7e00103424 #define P1T_WR     0x7e00103825 #define P1T_WTR     0x7e00103c26 #define P1T_XP     0x7e00104027 #define P1T_XSR     0x7e00104428 #define P1T_ESR     0x7e00104829 #define P1MEMCFG2    0X7e00104c30 #define P1_chip_0_cfg    0x7e00120031 #define P1_user_cfg 0x7E00130432 33 #define P1MEMSTAT    0x7e00100034 //#define P1MEMCCMD    0x7e00100435 #define P1DIRECTCMD    0x7e00100836 /*21:2 chips--Burst:4 bytes--Auto Power down:140ns--AP:10--RAW:14--Column:10*/37 #define P1MEMCFG_VAL 0x1001238 /*Read delay 1 cycle for Mobile DDR--Mobile DDR SDRAM--Memory width:32--*/39 #define P1MEMCFG2_VAL 0xb4140 #define P1_USER_CFG_VAL 0x041 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] 作为NFCONP1MEMCCMD = 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 Endset_val(P1T_RC, 0xa);set_val(P1T_RCD, 0xc); //5:3=4-3 2:0=4set_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 ); // EMRSset_val( P1DIRECTCMD, 0x80032 ); // MRSP1MEMCCMD = 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初始化