标签:
在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参数的设置中
标签:
原文地址:http://www.cnblogs.com/sturdy/p/4232009.html