首页 > 代码库 > 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初始化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。