我正在尝试调出一个使用两个 MT41J64M16 DDR3器件的定制板。
我们特意设置硬件以反映与 C6657 EVM 相同的设置、以便最大限度地减少配置期间需要进行的更改量。
单步执行 DDR3初始化指南并调整器件的所有寄存器值后、我能够使用 EVM GEL 脚本的修改版本来验证我是否可以配置并通过 DDR3自动调平测试。 (DDR3配置寄存器0x21000004读取0x40000004)。
但是、当我运行一个简单的 DDR3测试、或者尝试通过 JTAG 写入 DDR3时、我无法这么做。
是否有任何关于从何处开始调试此问题的想法? 我的假设是、如果配置状态寄存器在运行自动调平后成功、我们可以很容易地访问 DDR。
我已经附加了我修改过的 DDR3初始化(来自.gel 文件)-下面插入的代码。
谢谢、
Rob
DDR3_setup_auto_lvl_1333_mod() { int i、TEMP、startlo、stoplo、starthi、stopi; /********* 调平寄存器配置**** / /*由于勘误,使用部分自动调平 请参阅建议3中的解决方法1 */ DDR3_CONFIG_REG_0和=~(0x007FE000);//清除 CTRL_SLAVE_RA比 字段 DDR3_CONFIG_REG_0 |= 0x00200000; //将 CTRL_SLAVE_RA比 设置为0x100 DDR3_CONFIG_REG_12 |= 0x08000000;//设置 INVER_CLKOUT = 1;请参阅初始化指南的第1.3和2.3节 DDR3_CONFIG_REG_0 |= 0xF; //将 dll_lock_diff 设置为15 //更正 DQS-DQ 写入时序偏移 DDR3_CONFIG_REG_1 = 0x01000000; /*执行部分自动调平 此模式适用于增量读取调平。 增量调平可实现电路 以适应 DSP、PCB 布线和 DRAM 中的延迟变化、从而优化读取 采样。 请参阅 DDR 初始化指南第3.2.1节 C665x 系列中的器件不使用 DDR3_CONFIG_REG_56至 DDR3_CONFIG_REG_59 */ DDR3_CONFIG_REG_52 |= 0x00000200; DDR3_CONFIG_REG_53 |= 0x00000200; DDR3_CONFIG_REG_54 |= 0x00000200; DDR3_CONFIG_REG_55 |= 0x00000200; DDR3_CONFIG_REG_60 |= 0x00000200; //值、其中 invertclkout = 1且 PHY_CALC V11 - www.ti.com/.../sprabl2 /********* 自动调平 / //WRLVL_INIT_Ratio =写入电平初始化比率。 / //这是路由时钟长度与路由选通长度//之间的差异 Data0_WRLVL_INIT_Ratio = 0xA1; Data1_WRLVL_INIT_Ratio = 0x9A; Data2_WRLVL_INIT_Ratio = 0x8E; Data3_WRLVL_INIT_Ratio = 0x91; DATA8_WRLVL_INIT_RA比= 0x00; //GATEL_INIT_Ratio =栅极电平初始化比率。 / //这大约是往返延迟;路由时钟长度加上路由数据选通加上读取采样延迟// Data0_GTLVL_init_Ratio = 0xEE; Data1_GTLVL_init_Ratio = 0xF4; Data2_GTLVL_INIT_Ratio = 0xFF;//0x101;//检查此项 Data3_GTLVL_init_ratio = 0xFD; DATA8_GTLVL_INIT_Ratio = 0x00; /*PHY 复位。 切换 DDR_PHY_CTRL_1位15 0->1->0 PHY_RESET 脉冲(0? 1? 0)将这些调平配置值锁存到 PHY 逻辑。*/ DDR_DDRPHYC &=~(0x00008000); DDR_DDRPHYC |=(0x00008000); DDR_DDRPHYC &=~(0x00008000); /***** 基本控制器和 DRAM 配置******** / /*刷新控制寄存器编程#1 DDR_SDTIM[3:1]寄存器包含大多数关键 DRAM 和控制器时序参数*/ DDR_SDRFC = 0x00005161;//启用配置 //DDR_SDTIM1 = 0x1113783C; 温度= 0; temp |= 0x09 << 25;// T_RP 位字段28:25 temp |= 0x09 << 21;// T_RCD 位域24:21 temp |= 0x09 << 17;// T_WR 位字段20:17 temp |= 0x17 <<12;// T_RAS 位字段16:12 temp |= 0x1F << 6;// T_RC 位字段11:6 temp |= 0x5 <<3;// T_RRD 位字段5:3 temp |= 0x4;// T_WTR 位字段2:0 DDR_SDTIM1 =温度; /* DDR_SDTIT2 = 0x30717FE3;* 温度= 0; temp |= 0x3 << 28;// T_XP 位字段30:28 temp |= 0x4F << 16;// T_XSNR 位字段24:16 temp |= 0x1ff << 6;// T_XSRD 位字段15:6 temp |= 0x4 << 3;// T_RTP 位字段5:3 temp |= 0x3;// T_CKE 位字段2:0 DDR_SDTIT2 = TEMP; /* DDR_SDTIM3 = 0x559F86AF;* 温度= 0; temp |= 0x5 << 28;// T_PDLL_UL 位字段31:28 (固定值)->找不到 temp |= 0x5 <<24;// T_CSTA 位字段27:24 (固定值)->找不到 temp |= 0x4 << 21;// T_CKESR 位字段23:21 temp |= 0x3f << 15;// T_ZQCS 位字段20:15 temp |= 0x49 <<4;// T_RFC 位字段12:4 temp |= 0xF;// T_RAS_MAX 位字段3:0 (固定值)->找不到 DDR_SDTIM3 =温度; /*PHY 控制寄存器编程 DDR_PHYCTRL、也称为 DDR_PHY_CTRL_1或 DDR_PHYC、为编程终端模式 输出缓冲区和低五位中的读取延迟*/ DDR_DDRPHYC = 0x0010010F;//PHY 控制寄存器编程 DDR_ZQCFG = 0x70073214;//动态阻抗配置寄存器编程;配置自适应阻抗校准功能 DDR_PMCTL = 0x0;//电源管理寄存器编程;向其写入0会禁用电源管理 DDR_SDRFC = 0x00005161;//刷新控制寄存器编程#2;写入 DDR_SDCFG 完成控制器配置 /***** SDRAM 配置寄存器计算和编程********* / /* DYN_ODT 被禁用 DDR 项 RZQ/6 = 40 Ω SDRAM_DRIVE = RZQ/7 = 34 Ω* 温度= 0; temp |= 0x3 << 29;// SDRAM_TYPE 位字段31:29 (固定值) temp |= 0x0 << 27;// IBANK_POS 位字段28:27 temp |= 0x3 << 24;// DDR_Term 位字段26:24 temp |= 0x0 << 21;// DYN_ODT 位字段22:21 temp |= 0x1 << 18;// SDRAM_DRIVE 位字段19:18 temp |= 0x2 <<16;// CWL 位字段17:16 temp |= 0x1 << 14;// nm 位字段15:14 temp |= 0xE << 10;// CL 位字段13:10 ->请检查此项 temp |= 0x4 <<5;// ROWSIZE 位域9:7 temp |= 0x3 << 4;// IBANK 位字段6:4 temp |= 0x0 << 3;// EBANK 位字段3:3 temp |= 0x3;//页面大小位字段2:0 DDR_SDCFG = TEMP; //DDR_SDCFG = 0x63062A32;//发生最后一个配置写入 DRAM 初始化 //wait 600us for HW init to complete (硬件初始化完成时、等待600us) delay_milli_seconds (1); DDR_SDRFC = 0x00001458; //刷新率=(7.8*666MHz) /********* 执行部分自动调平 / DDR_RDWR_LVL_RMP_CTRL = 0x8000000;//启用完全调平 DDR_RDWR_LVL_CTRL = 0x80000000;//触发器完全调平-这将忽略读取 DQS 调平结果并使用比率强制值 //for (i=0;i<1000;i++);//等待3ms 完成水平调整 delay_milli_seconds (3); /* *检查培训是否已成功。 * IF (((DDR_STATUS & 0x00000070)&&(ISGEL)) GEL_TextOut ("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ EERROR:Convergence Error ******** \n"); IF (((DDR_STATUS & 0x00000004)&&(ISGEL)) GEL_TextOut ("IFRDY 位已设置:DDR3接口就绪\n"); //GEL_TextOut ("DDR3_CONFIG_REG_23:%x\n"、、、、 DDR3_CONFIG_REG_23); IF (ISGEL) GEL_TextOut ("\nDDR3初始化完成。\n"); }
