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**** 2564300 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/623739/tms320c6657-ddr3-init-w-custom-board

器件型号:TMS320C6657

您好!

我不熟悉 DSP 领域、正在编写一些基于6657 Lite EVM 代码的 DDR3初始化代码。 我正在使用的 DDR 器件是 Micron 的 MT41K256M16 32 Meg x 16 x 8组、具有2k 页大小。

我在 EVM DDR 初始化代码中看到了在何处调整页面大小(slamcfg.pagesize = 3;// 3为2048页大小)、但看不到在 DDR 控制器中何处设置 RAM 大小-是否有必要?

我一直在交叉检查交流特性以设置三个计时寄存器、 从数据表到数据表、特性和计算结果匹配-我认为这意味着我可以使用 EVM 中的时序寄存器值、前提是我的 PLL 值和输入时钟提供666.5Mhz、这是正确的吗?

我将在到达自动调平值后更新自动调平值、我只想确保先降低尺寸和基本计时。 这部分似乎没有太多变化。

CSL_BootCfgUnlockKicker();

/*等待 PLL 锁定=最小500个参考时钟周期。
REFCLK = 100MHz 时、= 5000ns = 5us *
platform_delaycycles (50000);

/********* 3.3调平寄存器配置**** /
CSL_BootCfgGetDDRConfig (0、&ddr3config);
ddr3config &=~(0x007FE000);//清除 CTRL_SLAVE_RA比 字段
CSL_BootCfgSetDDRConfig (0、ddr3config);

CSL_BootCfgGetDDRConfig (0、&ddr3config);
ddr3config |= 0x00200000; //将 CTRL_SLAVE_RA比 设置为0x100
CSL_BootCfgSetDDRConfig (0、ddr3config);

CSL_BootCfgGetDDRConfig (12、&ddr3config);
ddr3config |= 0x08000000;//设置 inver_clkout = 1
CSL_BootCfgSetDDRConfig (12、ddr3config);

CSL_BootCfgGetDDRConfig (0、&ddr3config);
ddr3config |= 0xF; //将 dll_lock_diff 设置为15
CSL_BootCfgSetDDRConfig (0、ddr3config);

CSL_BootCfgGetDDRConfig (23、&ddr3config);
ddr3config |= 0x00000200;//请参阅第4.2.1节,设置为部分自动调平
CSL_BootCfgSetDDRConfig (23、ddr3config);

/********* 3.3部分自动调平 /
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (2、ddr3config);
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (3、ddr3config);
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (4、ddr3config);
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (5、ddr3config);
ddr3config = 0x00000033;CSL_BootCfgSetDDRConfig (6、ddr3config);
ddr3config = 0x0000003A;CSL_BootCfgSetDDRConfig (7、ddr3config);
ddr3config = 0x0000002C;CSL_BootCfgSetDDRConfig (8、ddr3config);
ddr3config = 0x0000002C;CSL_BootCfgSetDDRConfig (9、ddr3config);
ddr3config = 0x0000001C;CSL_BootCfgSetDDRConfig (10、ddr3config);

ddr3config = 0x00; CSL_BootCfgSetDDRConfig (14、ddr3config);
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (15、ddr3config);
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (16、ddr3config);
ddr3config = 0x00; CSL_BootCfgSetDDRConfig (17、ddr3config);
ddr3config = 0x000000B7;CSL_BootCfgSetDDRConfig (18、ddr3config);
ddr3config = 0x000000B1;CSL_BootCfgSetDDRConfig (19、ddr3config);
ddr3config = 0x000000A4;CSL_BootCfgSetDDRConfig (20、ddr3config);
ddr3config = 0x000000A4;CSL_BootCfgSetDDRConfig (21、ddr3config);
ddr3config = 0x00000098;CSL_BootCfgSetDDRConfig (22、ddr3config);

/*执行 PHY 复位。 切换 DDR_PHY_CTRL_1位15 0->1->0 */
CSL_EMIF4F_GetPhyControl (&ddrPhyCtrl、&ddrPHYReadLatency);
ddrPhyCtrl &=~(0x00008000);
CSL_EMIF4D_SetPhyControl (ddrPhyCtrl、ddrPHYReadLatency);

CSL_EMIF4F_GetPhyControl (&ddrPhyCtrl、&ddrPHYReadLatency);
ddrPhyCtrl |=(0x00008000);
CSL_EMIF4D_SetPhyControl (ddrPhyCtrl、ddrPHYReadLatency);

CSL_EMIF4F_GetPhyControl (&ddrPhyCtrl、&ddrPHYReadLatency);
ddrPhyCtrl &=~(0x00008000);
CSL_EMIF4D_SetPhyControl (ddrPhyCtrl、ddrPHYReadLatency);

/***** 3.4基本控制器和 DRAM 配置************ /
/*启用配置*/
/* hEmif->SDRAM_REF_CTRL = 0x00006180;*/
CSL_EMIF4F_EnableInitRefresh();
CSL_EMIF4F_SetRefreshRate (0x515C);

SDRAM_TIM1.t_wtr = 4;
SDRAM_TIM1.t_RRD = 1;
SDRAM_TIM1.t_RC = 0x20;
SDRAM_TIM1.t_RAS = 0x17;
SDRAM_TIM1.t_wr = 0x09;
SDRAM_TIM1.t_RCD = 0x09;
SDRAM_TIM1.t_rp = 0x09;
CSL_EMIF4F_SetTiming1Config (&SDRAM_tim1);

/* hEmif->SDRAM_TIM_2 = 0x40877FEC;*/
SDRAM_TIM2.t_cke = 3;
SDRAM_TIM2.t_RTP = 4;
SDRAM_TIM2.t_xsrd = 0x1FF;
SDRAM_TIM2.t_xsnr = 0x071;
SDRAM_TIM2.t_XP = 3;
SDRAM_TIM2.t_odt = 0;
CSL_EMIF4F_SetTiming2Config (&SDRAM_tim2);

/* hEmif->SDRAM_TIM_3=0x55BF87FF;*/
SDRAM_TIM3.t_rasMax = 0xF;
SDRAM_TIM3.t_RFC = 0x06A;
SDRAM_TIM3.t_tdqsckmax = 0;
SDRAM_TIM3.zq_zqcs = 0x3F;
SDRAM_TIM3.t_ckesr = 4;
SDRAM_TIM3.t_CSTA = 0x5;
SDRAM_TIM3.t_pdll_ul = 0x5;
CSL_EMIF4F_SetTiming3Config (&SDRAM_tim3);

/* hEmif->DDR_PHY_CTRL_1 = 0x0010010F;*/
ddrPHYReadLatency = 0x0F;
ddrPhyCtrl =(0x0010010F);
CSL_EMIF4D_SetPhyControl (ddrPhyCtrl、ddrPHYReadLatency);

/* hEmif->ZQ_config = 0x70074C1F;*/
zqcfg.zqRefInterval = 0x4C1F;
zqcfg.zqZQCLMult = 3;
zqcfg.zqZQCLInterval = 1;
zqcfg.zqSFEXITEn = 1;
zqcfg.zqDualCSEn = 1;
zqcfg.zqCS0En = 1;
zqcfg.zqCS1En = 0;
CSL_EMIF4F_SetOutputImpedanceConfig (&zqcfg);

/* hEmif->PWR_Mgmt_CTRL = 0x0;*/
pwrmgmtcfg.csTime = 0;
pwrmgmtcfg.srTime = 0;
pwrmgmtcfg.lpMode = 0;
pwrmgmtcfg.dpdEnable = 0;
pwrmgmtcfg.pdTime = 0;
CSL_EMIF4F_SetPowerMgmtConfig (&pwrmgmtcfg);

/* DYN_ODT 被禁用且 SDRAM_DRIVE = RZQ/7时的新值*/
/* hEmif->SDRAM_CONFIG = 0x63077AB3;*/
CSL_EMIF4F_GetSDRAMConfig (&S);
smramcfg.pagesize = 3;//对于2048页大小为3 
smramcfg.eBank = 0;
smramcfg.iBank = 3;
smramcfg.rowSize = 5;
smramcfg.CASLatency = 14;
smramcfg.窄 模式 = 1;
smramcfg.CASWriteLat = 3;
smramcfg.SDRAMDrive = 1;
smramcfg.disableDLL = 0;
swamcfg.dynODT = 2;
smramcfg.ddrDDQS = 0;
smramcfg.ddrTerm = 2;
smramcfg.iBankPos = 0;
smramcfg.type = 3;
CSL_EMIF4F_SetSDRAMConfig (&S);

PLL_DELAY (840336);/*等待600us,硬件初始化完成*/

/*刷新率=(7.8*666MHz)*/
/* hEmif->SDRAM_REF_CTRL = 0x00001450; *
CSL_EMIF4F_SetRefreshRate (0x0000144F);

/***** 4.2.1部分自动调平******** /
/* hEmif->RDWR_LVL_RMP_CTRL = 0x8000000;*/
CSL_EMIF4F_SetLevelingRampControlInfo (1、0、0、0、0);

/*触发器完全调平-这将忽略读取 DQS 调平结果并使用强制比率值*/
/* hEmif->RDWR_LVL_CTRL = 0x8000000;*/
CSL_EMIF4F_SetLevelingControlInfo (1、0、0、0);

/*********
等待至少1048576个 DDR 时钟周期、以完成调平
= 1048576 * 1.5ns = 1572864ns = 1.57ms。
实际时间=~10-15 ms
秘书长的报告 /
PLL_DELAY (4201680);//等待3ms 以完成调平

返回(状态); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将您的查询转发给软件团队。 他们的反馈应发布在此处。

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

    Eric、

    请查看 KeyStone I DDR3初始化应用报告(SPRABL2E)中介绍的初始化序列、网址为 :http://www.ti.com/lit/an/sprabl2e/sprabl2e.pdf。  本文档可下载2个电子表格、以帮助进行寄存器设置。  有关更多详细信息、请参阅 KeyStone DDR 布局指南和 KeyStone I DDR 用户指南。  所有这些都可从 C6657网页获得,网址为 :http://www.ti.com/product/TMS320C6657

    Tom

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

    Eric、

    我看到这与定制板有关、因此这可能不仅仅是软件。  DDR 调试 分为两部分:正确的电路板设计和正确的软件配置。  要获得布线正确的电路板、必须遵循 DDR 布局指南。  然后、必须按照 DDR 初始化指南中的步骤、正确配置 DDR 控制器和 PHY、以便与 DDR3 SDRAM 进行可靠通信。  请参阅此 E2E 文章中概述的步骤,以完成布局和调试步骤 e2e.ti.com/.../462229

    Tom