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.

[参考译文] TMS320C6678:热复位时出现 DDR3配置错误

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/648419/tms320c6678-ddr3-configuration-error-on-warm-reset

器件型号:TMS320C6678

你(们)好

我们最近将设计中的 DDR3 RAM 从 ISSI 模型 IS43TR16128A 更新为 IS43TR16128C 模型、原因是淘汰问题(它们具有相同的规格)。

DDR3以1333MHz 的频率运行、旧型号"A"在正确初始化时没有问题。

但是、新的型号"C"在热重启后重新配置 DDR3存储器时出现问题。 首次配置存储器时、其工作正常。 (如果通过 CCS 中的 GEL 文件进行配置、也可以正常工作)。

在热重启时、我们还激活了 IBL 中的 PLL_reinit_workaround。 在这种情况下、在重新配置 DDR 控制器之前重新配置 PLL。

在这种情况下、部分自动调平失败、DDR_STATUS 寄存器返回0x40000064、这表示读取 DQS 栅极训练和读取数据眼图训练超时。

当 DDR3 PLL 降低到1066MHz 时,"C"型也可以正常工作,不会出现任何错误。

我们希望 DDR3 RAM 能够以1333MHz 的可靠运行、而不需要返回1066MHz。

您是否有任何关于在何处寻找解决方案的建议?

我们应该看看水平调整初始化值、还是在执行 DDR3配置之前重新配置 PLL 存在一些问题?

是否有方法从软件对 DDR3内存控制器和 DDR3 RAM 进行硬复位、以便在 PLL 配置后、可以完全重新启动内存控制器?

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

    我们将对此进行研究。 反馈将直接发布在此处。

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

    Leon、

    我不能想到你所看到的行为的原因。  我只能猜测、它们在您的设计中存在一些裕量、而现在在使用较快的器件时出现了这种裕量。  我建议您首先重新检查在首次使用 DDR3进行电路板设计时应执行的设计验证步骤。  以下 Wiki 页面总结了这些步骤:

    Tom

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

    你(们)好

    感谢您的回复。

    我们已经重新检查了验证步骤、但未改善操作。

    现在我们将使用1066MHz 的回退选项。

    此致、

    Leon

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

    Leon、

    请发布您完成的 PHY_CALC 和 REG_CALC 工作表以供审核。  此外、请发布您的报告、说明已满足长度匹配规则。

    Tom

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

    Leon、

    我两周内没有收到答复。  我可以关闭此 TT 吗?

    Tom

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

    你(们)好

    很抱歉、因为没有提前回复、现在这里的每个人都在休假。

    我希望在下周获得您所需的信息。

    此致、

    Leon

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

    你(们)好,Tom

    请找到随附的667 MHz 两个工作表。

    一些 DQS 线是微不足道的、但对我们来说没有意义的是:

    - DDR3正确配置 GEL 文件@ 667 MHz

    - 上电@ 667 MHz 后 DDR3配置正确  

    我们缺少什么吗?

    请提供建议

    此致

    皮埃特

    e2e.ti.com/.../8080.DDR3-PHY-Calc-v11.xlsxe2e.ti.com/.../1411.DDR3-Register-Calc-v4.xlsx

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

    Piet、

    我无法仅从 REG_CALC 工作表中得出结论。  我还需要接收长度匹配报告和 PHY 计算表。

    Tom

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

    你(们)好,Tom

    两个文件均已上传。

    此致

    皮埃特

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

    Piet、

    很抱歉、我之前没有看到 PHY_CALC 表。  我认为 DQS 长度记录错误。  它们通常与 Fly-by 网的长度不同(与时钟对匹配的长度)。  DQS 对及其相关的字节组长度通常都是相似的长度。  请提供长度匹配报告进行比较。

    Tom

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

    Piet、

    此主题在2周内未收到响应。  这是否仍然打开?

    Tom

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

    你(们)好,Tom

    很抱歉耽误你的时间、我将在本周发布更新。

    此致

    皮埃特

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

    你(们)好,Tom

    我们注意到了一些有趣的东西。

    只有在 Linux 中重新引导时才会出现 DDR 初始化错误。

    当我们从板管理重新启动时、不会发生这种情况。

    请参阅下面的 Linux 重新引导代码。 此重新启动顺序中是否有任何想法或遗漏的内容?

    此致

    皮埃特

    void keyston_reset (void)

      /*仅允许主内核重新启动主板*/

       if (get_CoreID ()=get_master_CoreID ()){

           u32 val;

     

           Val = pll1_get_reg (RSTCTRL);

           Val &= 0xffffff0000;

           Val |= 0x5a69;

           pll1_set_reg (RSTCTRL、val);

     

           Val = pll1_get_reg (RSTCTRL);

           Val &= 0xFFE0000;

           pll1_set_reg (RSTCTRL、val);

       }

      MACHINE_HALT();

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

    Piet、

    无论从 uBoot 还是 Linux 执行、请确认是否会发生相同的 PLL 和 DDR 配置。

    Tom

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

    Piet、

    我就您的问题联系了我们的 Linux 支持团队。  我们无法在 C6678支持的代码库中识别此代码。  这是旧垂直市场产品线的一部分吗?  如果是、您需要通过 FAE 来获得该团队的支持。  或者、如果这是新产品、则应使用 ProcSDK。

    下面是 Linux 团队的评论,他们在其中研究了函数 keyston_reset():

    我实际上在代码中挖开、发现 DDR3是在1333处初始化的、它使用一组固定的 M/D/OD 值、而不 是从寄存器读取的值。 我没有看到 DDR3PLLCTL0中的 M/D/OD 是由 IBL 配置的、我认为应该这样配置。 理论上、DDR3应由 U-boot 或在 Linux-C6x 情况下由 IBL 配置、并保持 Linux 启动时所配置的状态。 我认为 Linux 不需要对其重新编程、但在 DSP Linux 情况下不确定。 我确实看到 MAINPLL 已在 Linux-C6x 内核中重新编程、但不确定是否也需要 DDR3。  

    Tom

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

    Piet、

    独立于 Linux、DDR 接口的重复配置应稳健耐用。  您应该能够使用时序参数和其他 DDR 配置参数更新 GEL 文件。  然后、您应该能够证明重复的配置会产生功能 DDR3接口。

    Tom

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

    您好!

    更确切地说、这不适用于 ARM+C6678板、而是适用于运行 ucLinux 的独立 C6678、如旧的"废弃" http://linux-c6x.org/中所述。

    没有 U-boot、只有从闪存直接引导 ucLinux 映像的 IBL。

    ucLinux 不会重新配置 DDR3控制器、完全取决于 IBL 事先正确设置它。

    Leon

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

    Leon、

    我的评估正确、认为这是特定团队发布的特殊软件版本的一部分。  如果您需要此软件的直接支持、则需要通过 FAE 进行工作。

    关于使用 IBL 代码在 C6678上配置 DDR 控制器、ProcSDK 中存在相同的情况、但 Linux 中没有。  请参阅这些示例。  同样、我之前建议使用 GEL 测试重复重新配置、这是证明这是有效的方法、也是调试代码的有效方法。

    Tom

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

    Leon、

    您还有其他问题吗?我可以关闭此主题吗?

    Tom

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

    你(们)好,Tom

    感谢您的支持、您可以将其关闭。

    此致

    皮埃特