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:具有 DDR 配置表的 SRIO 引导

Guru**** 2484615 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1443166/tms320c6657-srio-boot-with-ddr-configuretion-table

器件型号:TMS320C6657

工具与软件:

尊敬的 TI 工程师:
我们有一个使用 C6657 DSP 芯片的定制开发版本、我们使用的引导模式是 SRIO Boot。
我们的硬件架构采用 FPGA+DSP 设计。 FPGA 通过 SRIO 将映像写入 DSP、并在 DSP 上运行。 我们已成功测试此技术路线。  DDR 已通过 TI 提供的手册成功测试
现在我们要放置。 DDR 上的文本段、因此我们需要在引导阶段初始化 DDR。 通过阅读 SPRUG5C 用户手册、我们发现 TI 在引导表中提供了引导配置表来初始化 DDR。

请参考 常见问题解答:https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1171336/faq-tms320c6657-how-to-run-the-direct-spi-boot-example-on-ti-c6657-evm-without-ibl

 我们创建了一个项目来从 spidoot 移植代码。 C 写入我们的测试项目、并使用 SRIO 将 emif4Cfg 的内容写入0x008ffd20。 但是、测试后、DDR 未成功初始化。

因此、我有以下问题:
可以在 SRIO 引导表中添加 DDR 配置表、在 SRIO 引导期间初始化 DDR、然后写入。 文本段至 DDR。
2.如果问题的技术解决方案可行、是否只需要在 SRIO 引导中使用 DDR 配置表的初始化过程中将 emif4Cfg 的内容写入0x008ffd20? 我是否需要写入某些寄存器来触发 DDR 初始化?

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

    尊敬的客户

    Unknown 说:
    1. 可以在 SRIO 引导表中添加 DDR 配置表、从而在 SRIO 引导期间初始化 DDR、然后写入。 文本段至 DDR。[/QUOT]

    有。 没错

    2. 如果问题1的技术解决方案可行、是否只需在初始化过程中使用 SRIO 引导中的 DDR 配置表将 emif4Cfg 的内容写入0x008ffd20? 我是否需要写入某些寄存器来触发 DDR 初始化?[/QUOT]

    写入  emif4Cfg 的内容 足以支持 DDR 配置。

    此致

    Shankari G.

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

    您好 Shankari G

    在我看来、编写 emif4Cfg 也足够了。

    但在实际操作中、在将 emif4Cfg 写入0x008ffd20后、我通过通过 JTAG 连接到 DSP 来检查 DDR3存储器控制器寄存器值、发现 DDR 未正确初始化。 即使这些寄存器也保持不变。 DDR3的这些寄存器无法通过 DDR3Init()函数成功初始化、例如软件包中提供的平台库 evm6657l。

    据我了解、如果我使用不同的值配置 emif4Cfg、DDR3寄存器的值应该会改变。 因此、我在 SRIO 启动映像中添加了不同的 emif4Cfg、应该可以看到寄存器初始化为不同的值、但实际上、我没有看到 DDR3寄存器的值发生任何变化。 这是否意味着我在中编写的 emif4Cfg 不起作用?

    您能否提供指导来帮助我调查 emif4Cfg 为何无效?

    谢谢你。

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

    尊敬的客户

    [报价 userid="596441" url="~/support/processors-group/processors/f/processors-forum/1443166/tms320c6657-srio-boot-with-ddr-configuretion-table/5534800 #5534800"]、我没有看到 DDR3寄存器值的任何更改。 这是否意味着我在中编写的 emif4Cfg 不起作用?

    可能、是的。

    因为、当我们执行直接 SPI 引导时、会使用 CCS 使 DDR3寄存器可视化。

    特别是在  emif4Cfg 写入之前和之后。

    您能提供指导来帮助我调查 emif4Cfg 为什么不起作用吗?

    当然。 按照 使用 CCS 直观显示 emif4Cfg 的调试技术进行操作。

    使用 CCS、调试 spiboot.c 并观察运行 spiboot.c 后更新的值

    在设置中遵循此方法、并在"emif4Cfg Write"之前和之后显示配置。

    我希望你能明白我所说的。

    此致

    Shankari G.

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

    您好 Shankari G

    我根据您的建议进行了一些测试。

    1创建一个新的空 CCS 项目、 从以下位置添加到 spiboot 相关下载:

    e2e.ti.com/.../0435.C6657_5F00_directROM_5F00_Boot_5F00_example.zip

    我看到映射文件中没有 emif4Cfg、因此我将可执行文件中不需要的"Project Build"->"C6000 Linker"->"Advanced Options"->"Miscellaneous"->"Clearing section out"更改为"Off"

    2 更改 emif4Cfg 值:

    首先、我使用平台 lib func 来初始化 DDR、然后 上传 DDR3存储器控制器寄存器 val。

    根据更改了 emif4Cfg 的 thes 值;

    因此、在重新构建后、我得到了一个新的 emif4Cfg 表、然后将该项目加载到 DSP 中。CCS 报告验证错误、这意味着 DDR3仍然不正确初始化。

    3我上传 DDR3 register2 val,活动与正常 INITIED ,它同样 emif4Cfg 是不工作的

    资源共享:
    正常 DDR 寄存器2上传 val:

    e2e.ti.com/.../DDR3_5F00_Memory_5F00_controller_5F00_RegistersVal.dat

    emif4Cfg 从0x008ffd20上传

    e2e.ti.com/.../emif4Cfg_5F00_0x008ffd20_5F00_C.dat

    emif4Cfg 文件

    e2e.ti.com/.../5315.spiboot.c

    如果您可以利用宝贵的时间帮助我分析 emif4Cfg 配置不正确的地方、我将不胜感激。ite2e.ti.com/.../BootConfiguration.zip

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

    尊敬的客户:

    让我尝试推导一些与直接引导示例相关的步骤、供您调试 emif4cfg。

    然后、您可能还会尝试对 SRIO 引导执行一些类似的步骤。

    给我一两天的时间。

    让我返回来。

    此致

    Shankari G.

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

    您好 Shankari G

    我读 sprugy5c againg. 在第2.2.1节" 上电复位后的初始化过程"中

    我看到这个词:

    RBL 还使用户能够在使用 DDR 结构的引导过程中、在将映像加载到外部存储器之前配置 DDR EMIF。 此结构保留在 L2中。 对于 RBL 读取的每个段、都会验证是否设置了 DDR 启用魔术字。 如果设置了魔术字、则使用 DDR 结构来初始化 DDR。 DDR 的结构定义因器件而异。 有关 DDR 配置结构、请参阅特定于器件的数据手册。

    我想我可能没有设置 DDR 启用魔术。 您知道 DDR 使能魔术字是什么地址吗?

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

    尊敬的客户:

    在直接引导示例的 spiboot.c 中、  

    这是引导所需的 emif.cfg 数据表。

    ==================

    请将其与您的驱动程序进行比较。

    #pragma DATA_SECTION (emif4Cfg、".emif4Cfg")
    CONST BOOT_EMIF4_TBL_T emif4Cfg ={

    BOOT_EMIF4_ENABLE_MSW_pllCtl |\
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming1 |\
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming2 |\
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming3 |\
    BOOT_EMIF4_ENABLE_MSW_ddrPhyCtl1 |\
    BOOT_EMIF4_ENABLE_MSW_sdRamRefreshCtl |\
    BOOT_EMIF4_ENABLE_MSW_sdRamOutImpedCalCfg |\
    BOOT_EMIF4_ENABLE_MSW_sdRamConfig、

    BOOT_EMIF_ENABLE_SLSW_CONFIG0 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG6 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG7 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG8 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG9 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG10 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG18 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG19 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG20 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG22 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG12 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG23 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG21、/*配置选择 slsw */
    0、/*配置选择 LSW *

    3、/* pllPrediv */
    40、/* pllMULT */
    2、/* pllPostDiv */

    0x62477AB2、/* sdRamConfig */
    0、/* sdRamConfig2、无关*/
    0x0000144F、/* sdRamRefreshCtl */
    0x1333780C、/* sdRamTiming1 */
    0x30717FE3、/* sdRamTiming2 */
    0x559F86AF、/* sdRamTiming3 */

    0、/* lpDdrNvmTiming、无关*/
    0、/* powerManageCtl、无关*
    0、/* iODFTTestLogic、无关*/
    0、/* performCountCfg、不用考虑*/
    0、/* performCountMstRegSel、不用考虑*/
    0、/* readIdleCtl、无关*/
    0、/* sysVbusmIntEnSet、无关*/
    0x70074c1f、/* sdRamOutImpedCalCfg、无关*/
    0、/* tempAlterCfg、无关*/

    0x0010010F、/* ddrPhyCtl1 */

    0、/* ddrPhyCtl2、无关*/
    0、/* priClassSvceMap、无关*/
    0、/* mstId2ClsSvce1Map、无关*/
    0、/* mstId2ClsSvce2Map、无关*/
    0、/* ecctl、无关*/
    0、/* eccRange1、无关*/
    0、/* eccRange2、无关*/
    0、/* rdWrtExcThresh、无关*/

    0x87A0047F、0、0、0、0、 0、0x33、0x3A、
    0x2C、0x2C、0x21、0、0xAF00002、 0、0、0、
    0、0、0xB7、0xB1、0xA4、 0xA4、0x98、0x200、
    0、0、0、0、0、 0、0、0、

    0、0、0、0、0、 0、0、0、
    0、0、0、0、0、 0、0、0、
    0、0、0、0、0、 0、0、0、
    0、0、0、0、0、 0、0、0
    };

    e2e.ti.com/.../0636.C6657_5F00_directROM_5F00_Boot_5F00_example.zip

    此致

    Shankari G.

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

    您好 Shankari G

    很抱歉再次打扰您。
    我仔细比较了您提供的演示、除了参数的差异、我在步骤中没有发现任何明显的差异。 但在进行测试后、我仍然无法正确初始化 DDR 并将代码下载到 DDR。

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

    参数(尤其是 EMIF4cfg 的值)有何差异?

    此致

    Shankari G.

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

    您好 Shankari G

    在我的自定义字段中、DDR 的输入时钟为100MHz、DDR 擦除类型与 TI C6657_EVM.因此、emif4Cfg 值 是您提供的不同形式。

    _________

    CONST BOOT_EMIF4_TBL_T emif4Table={

    BOOT_EMIF4_ENABLE_MSW_pllCtl |\
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming1 |\
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming2 |\
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming3 |\
    BOOT_EMIF4_ENABLE_MSW_ddrPhyCtl1 |\
    BOOT_EMIF4_ENABLE_MSW_sdRamRefreshCtl |\
    BOOT_EMIF4_ENABLE_MSW_sdRamOutImpedCalCfg |\
    BOOT_EMIF4_ENABLE_MSW_sdRamConfig
    /* BOOT_EMIF4_ENABLE_ALL_MSW*/、

    BOOT_EMIF_ENABLE_SLSW_CONFIG0 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG6 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG7 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG8 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG9 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG10 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG18 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG19 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG20 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG22 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG12 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG23 |\
    BOOT_EMIF_ENABLE_SLSW_CONFIG21
    /* BOOT_EMIF4_ENABLE_ALL_SLSW*/、/*配置选择 slsw */
    0
    /* BOOT_EMIF4_ENABLE_ALL_LSW*/、/*配置选择 LSW */

    3、/* pllPrediv */
    39、/* pllMULT */
    2、/* pllPostDiv */

    0x63066A32、/* 0x62477AB2、*//* sdRamConfig */
    0、/* sdRamConfig2、无关*/
    0x00001457、/* 0x0000144F、*//* sdRamRefreshCtl */
    0x1113783C、/* 0x1333780C、*//* sdRamTiming1 *
    0x30B37FE3、/* 0x30717FE3、*//* sdRamTiming2 */
    0x559F8ADF、/*0x559F86AF、*//* sdRamTiming3 */

    0、/* lpDdrNvmTiming、无关*/
    0、/* powerManageCtl、无关*
    0、/* iODFTTestLogic、无关*/
    0、/* performCountCfg、不用考虑*/
    0、/* performCountMstRegSel、不用考虑*/
    0、/* readIdleCtl、无关*/
    0、/* sysVbusmIntEnSet、无关*/
    0x70074C1F、/* 0x70074c1f、*//* sdRamOutImpedCalCfg、无关*/
    0、/* tempAlterCfg、无关*/

    0x0010010F、/* 0x0010010F、*//* ddrPhyCtl1 */

    0、/* ddrPhyCtl2、无关*/
    0、/* priClassSvceMap、无关*/
    0、/* mstId2ClsSvce1Map、无关*/
    0、/* mstId2ClsSvce2Map、无关*/
    0、/* ecctl、无关*/
    0、/* eccRange1、无关*/
    0、/* eccRange2、无关*/
    0、/* rdWrtExcThresh、无关*/

    /* 0x87A0047F、0、0、0、0、 0、0x33、0x3A、
    0x2C、0x2C、0x21、0、0xAF00002、 0、0、0、
    0、0、0xB7、0xB1、0xA4、 0xA4、0x98、0x200、*/

    /*0 1 2 3 4 5 6 7*/
    0x0020000F、0、0、0、0、 0、0x54、0x56
    /*8 9 10 11 12 13 14 15*/
    0x6D、0x69、0x00、0、0x08000000/* 0x0AF0000F*/、 0、0、0
    /*16 17 18 19 20 21 22 23 *
    0、0、0xAA、0xA9、0xAF、 0xB4、0x00、0x200、
    0、0、0、0、0、 0、0、0、

    0、0、0、0、0、 0、0、0、
    0、0、0、0、0、 0、0、0、
    0、0、0、0、0、 0、0、0、
    0、0、0、0、0、 0、0、0
    };

    我不明白为什么这些值在 lib 中运行良好、可以成功初始化 DDR。 但是在 emif4Cfg 表中检查它们、它们不起作用。

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

    这是我的 GEL 文件 init dr

    ddr3_setup_auto_lvl_1333 ()

    Int i、TEMP、startlo、stoplo、starthi、stophi;
    KICK0 = KICK0_UNLOCK;
    KICK1 = KICK1_UNLOCK;

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

    /***** 3.2 DDR3 PLL 配置**** /
    /*之前完成*/

    /********** 3.0调平寄存器配置 /
    /*由于勘误而使用部分自动调平*/

    /********** 3.3调平寄存器配置 /
    DDR3_CONFIG_REG_0并且=~(0x007FE000);//清除 CTRL_SLAVE_RATIO 字段
    DDR3_CONFIG_REG_0 |= 0x00200000;//将 CTRL_SLAVE_RATIO 设置为0x100
    DDR3_CONFIG_REG_12 |= 0x08000000;//设置 invert_clkout = 1
    DDR3_CONFIG_REG_0 |= 0xF;//将 dll_lock_diff 设置为15

    //从4.2.1执行部分自动调平--起动
    DDR3_CONFIG_REG_23 |= 0x00000200;//设置位9 = 1以使用强制比率矫正读取 DQS
    //从4.2.1执行部分自动调平-结束

    // invertclkout = 1时的值
    /********** 3.3部分自动调平 /
    DATA0_WRLVL_INIT_RATIO = 0x00;
    DATA1_WRLVL_INIT_RATIO = 0x00;
    DATA2_WRLVL_INIT_RATIO = 0x00;
    DATA3_WRLVL_INIT_RATIO = 0x00;
    DATA4_WRLVL_INIT_RATIO = 0x54;
    DATA5_WRLVL_INIT_RATIO = 0x56;
    DATA6_WRLVL_INIT_RATIO = 0x6D;
    DATA7_WRLVL_INIT_RATIO = 0x69;
    DATA8_WRLVL_INIT_RATIO = 0x00;

    DATA0_GTLVL_INIT_RATIO = 0x00;
    DATA1_GTLVL_INIT_RATIO = 0x00;
    DATA2_GTLVL_INIT_RATIO = 0x00;
    DATA3_GTLVL_INIT_RATIO = 0x00;
    DATA4_GTLVL_INIT_RATIO = 0xAA;
    DATA5_GTLVL_INIT_RATIO = 0xA9;
    DATA6_GTLVL_INIT_RATIO = 0xAF;
    DATA7_GTLVL_INIT_RATIO = 0xB4;
    DATA8_GTLVL_INIT_RATIO = 0x00;

    //执行 PHY 复位。 切换 DDR_PHY_CTRL_1位15 0->1->0
    DDR_DDRPHYC &=~μ F (0x00008000);
    DDR_DDRPHYC |=(0x00008000);
    DDR_DDRPHYC &=~μ F (0x00008000);

    /***** 3.4基本控制器和 DRAM 配置******* /
    DDR_SDRFC = 0x0000515C;//启用配置

    /* DDR_SDTIM1 = 0x1113783C;*/
    温度= 0;
    TEMP |= 0x8 << 25;// T_RP 位字段28:25
    TEMP |= 0x8 << 21;// T_RCD 位字段24:21
    TEMP |= 0x9 << 17;// T_WR 位字段20:17
    TEMP |= 0x17 << 12;// T_RAS 位字段16:12
    TEMP |= 0x20 << 6;// T_RC 位字段11:6
    TEMP |= 0x7 << 3;// T_RRD 位字段5:3
    TEMP |= 0x4;// T_WTR 位字段2:0
    DDR_SDTIM1 = TEMP;

    /* DDR_SDTIM2 = 0x30B37FE3;*/
    温度= 0;
    TEMP |= 0x3 << 28;// T_XP 位字段30:28
    TEMP |= 0xb3 << 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_SDTIM2 = TEMP;

    /* DDR_SDTIM3 = 0x559F8ADF;*/
    温度= 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 |= 0xAD << 4;// T_RFC 位字段12:4
    TEMP |= 0xF;// T_RAS_MAX 位字段3:0 (固定值)
    DDR_SDTIM3 = TEMP;

    DDR_DDRPHYC = 0x0010010F;

    DDR_ZQCFG = 0x70074C1F;

    DDR_PMCTL = 0x0;


    DDR_SDRFC = 0x0000515C;//启用配置

    /* DDR_SDCFG = 0x63066A32;*/
    /*禁用 DYN_ODT 且 SDRAM_DRIVE = RZQ/7 //0x63222A32时的新值;//发生最后一个配置写入 DRAM 初始化*
    温度= 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 |= 0xA << 10;// CL 位字段13:10
    TEMP |= 0x4 << 7;// ROWSIZE 位字段9:7
    TEMP |= 0x3 << 4;// IBANK 位字段6:4
    TEMP |= 0x0 << 3;// EBANK 位字段3:3
    TEMP |= 0x2;// pagesize 位字段2:0
    DDR_SDCFG = TEMP;

    //等待600us 以完成硬件初始化
    delay_milli_seconds (1);

    DDR_SDRFC = 0x00001457;//刷新率=(7.8* 666MHz)

    /********** 4.2.1执行部分自动调平 /

    DDR_RDWR_LVL_RMP_CTRL = 0x80000000;//启用完全矫正

    DDR_RDWR_LVL_CTRL = 0x80000000;//触发完全调平-这忽略读取 DQS 调平结果并使用强制比率值

    温度= DDR_RDWR_LVL_RMP_CTRL;

    IF (DDR_STATUS 和(0x00000040 | 0x00000020 | 0x00000010)

    GEL_TextOut ("\nDDR3调平失败。\n");
    }

    temp =(int)((float) 100/15.6);
    IF (0xFF < TEMP)
    温度= 0xFF;

    /*设置初始增量调平积分*/
    DDR_RDWR_LVL_CTRL =((1<<0x00000018)|(TEMP<<0x00000010u)|(TEMP<<0x00000008u));

    /*确保至少完成64个初始增量调平*/
    delay_milli_seconds (1);

    /*初始增量调平后、将增量调平间隔设置为最大值
    将对性能的影响最小化*/
    DDR_RDWR_LVL_CTRL =(0x7F000000 | 0x00FF0000 | 0x0000FF00u);

    IF (DDR_STATUS 和(0x00000040 | 0x00000020))

    GEL_TextOut ("\nDDR3调平失败。\n");
    }


    }

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

    您好 Shankari G  

    您是否确定了有关具有 DDR 配置表的 SRIO 引导的详细步骤?

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

    尊敬的客户:

    以下是在 C6657 EVM 板上工作的无引导模式的 DDR3初始化值。

    /*--------------------------------------------------------------*/
    /* ddr3_setup()                                                  */
    /* DDR3 initialization                                          */
    /*--------------------------------------------------------------*/
    int flag;
    ddr3_setup_auto_lvl_1333()
    {
        int i,TEMP,startlo, stoplo,starthi, stophi;
        KICK0 = KICK0_UNLOCK;
        KICK1 = KICK1_UNLOCK;
    
        /* Wait for PLL to lock = min 500 ref clock cycles. 
           With refclk = 100MHz, = 5000 ns = 5us */
        Delay_milli_seconds(1);
    
        /***************** 3.2 DDR3 PLL Configuration ************/
        /* Done before */
    
        /**************** 3.0 Leveling Register Configuration ********************/
        /* Using partial automatic leveling due to errata */
    
        /**************** 3.3 Leveling register configuration ********************/
        DDR3_CONFIG_REG_0 &= ~(0x007FE000);  // clear ctrl_slave_ratio field
        DDR3_CONFIG_REG_0 |= 0x00200000;     // set ctrl_slave_ratio to 0x100
        DDR3_CONFIG_REG_12 |= 0x08000000;    // Set invert_clkout = 1
        DDR3_CONFIG_REG_0 |= 0xF;            // set dll_lock_diff to 15
    
        //From 4.2.1 Executing Partial Automatic Leveling -- Start
        
    	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;
    
        //From 4.2.1 Executing Partial Automatic Leveling -- End
        //Values with invertclkout = 1 and PHY_CALC V11 - www.ti.com/.../sprabl2
        /**************** 3.3 Partial Automatic Leveling ********************/
    	
    	DATA0_WRLVL_INIT_RATIO = 0x73;
    	DATA1_WRLVL_INIT_RATIO = 0x7A;
    	DATA2_WRLVL_INIT_RATIO = 0x6C;
    	DATA3_WRLVL_INIT_RATIO = 0x6C;
    	DATA8_WRLVL_INIT_RATIO = 0x5C;
    	
    	DATA0_GTLVL_INIT_RATIO = 0xC3;
    	DATA1_GTLVL_INIT_RATIO = 0xBD;
    	DATA2_GTLVL_INIT_RATIO = 0xB0;
    	DATA3_GTLVL_INIT_RATIO = 0xB0;
    	DATA8_GTLVL_INIT_RATIO = 0xA4;
    
        //Correct DQS-DQ write timing offset
        DDR3_CONFIG_REG_1 = 0x01000000;
    
        //Do a PHY reset. Toggle DDR_PHY_CTRL_1 bit 15 0->1->0
        DDR_DDRPHYC &= ~(0x00008000);
        DDR_DDRPHYC |= (0x00008000);
        DDR_DDRPHYC &= ~(0x00008000);
    
        /***************** 3.4 Basic Controller and DRAM Configuration ************/
        DDR_SDRFC    = 0x00005161;    // enable configuration
    
        //DDR_SDTIM1 = 0x1113783C; 
        TEMP = 0;
        TEMP |= 0x08 << 25; // T_RP bit field 28:25
        TEMP |= 0x08 << 21; // T_RCD bit field 24:21
        TEMP |= 0x09 << 17; // T_WR bit field 20:17
        TEMP |= 0x17 << 12; // T_RAS bit field 16:12
        TEMP |= 0x20 << 6; // T_RC bit field 11:6
        TEMP |= 0x7 << 3; // T_RRD bit field 5:3
        TEMP |= 0x4; // T_WTR bit field 2:0
        DDR_SDTIM1 = TEMP;
    
        /* DDR_SDTIM2   = 0x30717FE3; */
        TEMP = 0;
        TEMP |= 0x3 << 28; // T_XP bit field 30:28
        TEMP |= 0x71 << 16; // T_XSNR bit field 24:16
        TEMP |= 0x1ff << 6; // T_XSRD bit field 15:6
        TEMP |= 0x4 << 3; // T_RTP bit field 5:3
        TEMP |= 0x3; // T_CKE bit field 2:0
        DDR_SDTIM2 = TEMP;
    
        /*  DDR_SDTIM3   = 0x559F86AF; */
        TEMP = 0;
        TEMP |= 0x5 << 28; // T_PDLL_UL bit field 31:28 (fixed value)
        TEMP |= 0x5 << 24; // T_CSTA bit field 27:24 (fixed value)
        TEMP |= 0x4 << 21; // T_CKESR bit field 23:21
        TEMP |= 0x3f << 15; // T_ZQCS bit field 20:15
        TEMP |= 0x6A << 4; // T_RFC bit field 12:4
        TEMP |= 0xf; // T_RAS_MAX bit field 3:0 (fixed value)
        DDR_SDTIM3 = TEMP; 
    
        DDR_DDRPHYC  = 0x0010010F;
        // ei - commented this line reduced calibration rate from 4c1f to 3214
        //DDR_ZQCFG    = 0x70074c1f; 
        DDR_ZQCFG    = 0x70073214;
        DDR_PMCTL    = 0x0;
    
        DDR_SDRFC    = 0x00005161;    // enable configuration
    
        /* New value with DYN_ODT disabled and SDRAM_DRIVE = RZQ/7 //0x63222A32;    // last config write DRAM init occurs */
        /* DDR_SDCFG = 0x63026AB2; */
        TEMP = 0;
        TEMP |= 0x3 << 29; // SDRAM_TYPE bit field 31:29 (fixed value)
        TEMP |= 0x0 << 27; // IBANK_POS bit field 28:27
        TEMP |= 0x3 << 24; // DDR_TERM bit field 26:24
        TEMP |= 0x0 << 21; // DYN_ODT bit field 22:21
        TEMP |= 0x0 << 18; // SDRAM_DRIVE bit field 19:18
        TEMP |= 0x2 << 16; // CWL bit field 17:16
        TEMP |= 0x1 << 14; // NM bit field 15:14
        TEMP |= 0xA << 10; // CL bit field 13:10
        TEMP |= 0x5 << 7; // ROWSIZE bit field 9:7
        TEMP |= 0x3 << 4; // IBANK bit field 6:4
        TEMP |= 0x0 << 3; // EBANK bit field 3:3
        TEMP |= 0x2; // PAGESIZE bit field 2:0
        DDR_SDCFG = TEMP;
        
        //Wait 600us for HW init to complete
        Delay_milli_seconds(1);
    
        DDR_SDRFC = 0x00001458;       //Refresh rate = (7.8*666MHz)
    
        /**************** 4.2.1 Executing Partial Automatic Leveling ********************/
    
        DDR_RDWR_LVL_RMP_CTRL = 0x80000000; //enable full leveling
        DDR_RDWR_LVL_CTRL = 0x80000000; //Trigger full leveling - This ignores read DQS leveling result and uses ratio forced value  
    
        //(0x34) instead
        //Wait for min 1048576 DDR clock cycles for leveling to complete = 1048576 * 1.5ns = 1572864ns = 1.57ms.
        //Actual time = ~10-15 ms
        Delay_milli_seconds(1);
        
        /*
         * Check if the training has converged into success or not.
         */
        if (DDR_STATUS & 0x00000070)
            GEL_TextOut("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^EERROOORRRR: Convergence Error****************************\n");
        if (DDR_STATUS & 0x00000004)
        	GEL_TextOut("IFRDY bit is SET: DDR3 Interface Ready\n");
        //GEL_TextOut("DDR3_CONFIG_REG_23 : %x\n",,,,,DDR3_CONFIG_REG_23);
        GEL_TextOut("\nDDR3 initialization is complete.\n");
    }

    我不使用曾工作于直接 SPI 引导模式的 EMIF4CFG、

    如何尝试 Processor SDK 6.3中给出的 SRIO 启动示例?

    请注意、我不是 SRIO 方面的专家。 这只是指出 SRIO 的标准引导示例。

    它在 SRIO 引导示例下包含 DDR 初始化。

    ——

    此致

    Shankari G.

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

    您好 Shankari G  

    1.为什么 spiboot emif4cfg DDR 寄存器值与 evmc6657l.gel 不同?

    通过此比较、我们可以看到 emif4Cfg 中的 DDR 寄存器值与 emvc6657l.gel 不同。   

    2. 我看到了  SRIO 启动示例。 但我认为该示例不能满足我的 要求。

     在引导示例中、DDR_init.out 和 App.out (Hello_World) 位于两个单独的项目中。 我想要的只是一个项目(ddrInit+Hellowrld.out )。 因此我尝试在 helloworld 项目中添加 emif4Cfg 表。 在 emif4Cfg 初始化 DDR 后、我可以将 Helloworld 映像下载到 DDR 内存中。  

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

    尊敬的客户:

    第一个问题:

    1. ROM 引导加载程序具有适用于无引导模式和直接 SPI 引导模式的不同代码序列。

    在无引导模式下、外设仅通过 GEL 代码初始化。 ROM 引导加载程序发挥的作用并不重要。

    因此称为"无引导"模式。

    2.将 SRIO 引导示例代码与您的代码进行比较。

    只是为了进行实验而尝试这些示例。。。 稍后、您可以玩一下将两个项目合并成一个项目的方法。

    此致

    Shankari G.

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

    您好 Shankari G  

    对于问题1、我想问您:

    如果 DSP 处于 SRIO 引导模式、我使用 CCS 连接内核、ROM 引导加载程序可以工作?、emif4Cfg 可以初始化 DDR?

    2.我会再次尝试这些演示、并尝试将两个项目合并成一个项目。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 DSP 处于 SRIO 引导模式、我使用 CCS 连接内核、ROM 引导加载程序可以工作吗?emif4Cfg 可以初始化 DDR?

    这取决于硬件中的引导模式设置。

    如果是 SRIO 引导模式、ROM 引导加载程序将对外设进行一些基本的初始化。

    然后、如果写入并配置了 EMIF4CFG、它可以初始化 DDR3

    ——

    如果它是"无引导模式"(仿真)模式、ROM 引导装载程序将不会初始化。 GEL 必须运行并初始化。

    此致

    Shankari G.