This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320C6657:DDR3配置在定制板上通过、但无法读取/写入内存

Guru**** 2964790 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/666394/tms320c6657-ddr3-configuration-passes-on-custom-board-but-unable-to-read-write-to-memory

器件型号:TMS320C6657

我正在尝试调出一个使用两个 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");

} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    团队将收到通知。 他们将直接在此处发布反馈。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    似乎在改变:

    temp |= 0x3;//页面大小位字段2:0 

    至:

    temp |= 0x2;//页面大小位字段2:0 

    我的问题可能已经解决了。  我们的 DDR 具有2KB 的页大小、但 我们应该使用1024K 的字、因为它是 x16器件。

    现在我可以看到0x8000000、并通过在 JTAG 存储器浏览器中键入并按 Enter 向其写入数据。

    但是、当我尝试使用"填充存储器"命令时、数据不会进入存储器、存储器在 CCS 中显示为全部0x00000000。  (不再能够读取或写入)

    与手动键入相比、CCSv7中的 fill memory 命令有什么特别之处?

    谢谢、

    Rob

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rob、

    在验证 GEL 文件更改之前、我们需要查看计算正确值(REG_CALC 和 PHY_CALC)的电子表格。  此外、PHY_CALC 工作表中使用的值必须来自电路板布局时生成的长度匹配报告。  还请提供这份报告。  下面的 wiki 链接提供了更多详细信息以及相关文档和示例的链接:

      

    Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rob、

    当前状态是什么?  您是否能够解决此问题?

    Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rob、

    如果我们在下周没有看到回复、我们将假设这已关闭。

    Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tom、

    感谢您的跟进。  我们能够解决这个问题。  SD 配置字段中的 pagesize 位字段配置不正确、这允许存储器通过自动调整、但在实际操作中失败。

    JTAG 问题在重新启动后似乎已经得到解决-内存填充现在工作正常。

    再次感谢、

    Rob