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.

[参考译文] TMS320DM8148:DDR3测试停止..

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/565298/tms320dm8148-ddr3-test-stops

器件型号:TMS320DM8148

团队、

在一个基于 DM8148的客户设计中、DDR 测试会停止一些时间。 (在运行 Linux 时、我们偶尔会看到随机崩溃)。 发生这种情况时,我们甚至无法连接到 JTAG 并调试... 以下是在 CCS 控制台上看到的错误:

CortexA8:GEL 输出:数据写入地址:0xC063153C
CortexA8:GEL 输出:数据写入地址:0xC0631540
CortexA8:写入长度0x4第0页上的0xc0631544处的内存块时出现问题:错误0x80002002/-1204在内存、控制、 DAP 访问地址0x00000080期间出现致命错误。 DAP 传输中止。  
无法评估 DDR_DataTransferCheck()。
写入0xC0631544时发生内部错误
   at *(((unsigned int *) 0xC0600200+I)=temp_reg_wr [Mercury Ti814x_ddr3.gel:700]
   在 DDR_DataTransferCheck()
CortexA8:警告:错误0x60020020/-1267错误:执行、内部、 由于应用程序启用的 OS_LOCK、无法获得目标状态。  
CortexA8:20次尝试后无法确定目标状态
CortexA8:在断开连接之前未能从目标中删除调试状态。  程序存储器中仍可能嵌入了断点运算代码。  建议您在连接之前重置仿真器、并在继续调试之前重新加载程序

下面是所执行的测试:

热菜单 DDR_DataTransferCheck()

   unsigned int temp_reg_rd = 0;
       unsigned int temp_reg_wr = 0xA5A5A5A5;
       unsigned int i=0;
       unsigned int error=0;
     GEL_TextOut ("尝试访问 DDR 存储器...写入数据\n");
       对于(i=0 <NO_LOOP_CNT; i++)
       {
        *(((UWORD32 *) DDR_START_ADDR +(I))= temp_reg_wr;
        //GEL_TextOut ("写入的数据为:%x \n"、、、、 (unsigned int *) i);
      GEL_TextOut ("数据写入地址:%x \n"、、、、 (unsigned int *) DDR_START_ADDR +(i));

       
       }
     对于(i=0 <NO_LOOP_CNT; i++)
       {

       temp_reg_rd = *(((UWORD32 *) DDR_START_ADDR +(I));
       // GEL_TextOut ("数据读取为:%x \n"、、、、 (unsigned int *) temp_reg_rd);
       if (temp_reg_rd!= 0xA5A5A5A5)
          {
           //GEL_TextOut ("数据检查在:%x \n"、、、、 (unsigned int *) DDR_START_ADDR +(i));

           错误++;    
          }
       其他
       {
       //GEL_TextOut ("数据检查在 :%x \n"、、、、 (unsigned int *) DDR_START_ADDR +(i));

        }
       GEL_TextOut ("故障位置数 为:%x \n"、、、、、 (unsigned int *)错误);

       }

       if (错误!= 0)
       {
       GEL_TextOut ("数据完整性检查失败");
       }
       否则{
       GEL_TextOut ("通过数据完整性检查\n");
       }   


这种行为的原因可能是什么? 请提供一些指导吗?

此致、

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

    您是否进行了 SW 调平? 运行测试的 DDR3频率是多少? 您的 DDR3内存大小和配置是多少?

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

    是的,此测试是在 SW 调平之后完成的。 DDR3以400MHz (2GB)运行... 我将共享邮件中使用的 GEL 文件,该文件应提供有关配置和 Lisa 映射等的完整信息...

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

    您可以尝试300MHz 吗?

    根据我的理解、在 Linux 中运行应用程序时会发生随机崩溃、并检查 DDR3是否会导致该问题。 然后运行基于 DDR3 CCS 的测试、发现 DDR3无法正常工作。 您能确认我的理解是否正确吗?

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

    有两个观察结果。

    1.当 Linux 正在运行且系统处于空闲状态(没有应用程序正在运行)时、会观察到随机内核崩溃。
    由于上述问题、我们想排除与 DDR3相关的问题、因此从使用 GEL 文件的基于 CCS 的测试开始。 在此测试中、Linux 未运行。 GEL 文件经过修改、可对 DDR3执行某种模式读取/写入。 其详细信息与第一个帖子中的内容相同。 执行此测试时、有时会看到上述错误(请再次参阅第一个开机自检)。
    希望这能澄清。

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

    是否可以附加内核崩溃的日志? 以及存储器映射是什么。 (启动时的 dmesg 输出也会很有用、引导时的 bootargs 也会很有用)

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

    正在附加崩溃日志...

    e2e.ti.com/.../Kernel-crash.zip

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

    您是否使用 EZSDK? 如果是、是哪个版本?

    无论 DDR3是否导致内核崩溃、都应该修复 DDR3问题。

    您能否使用以下设置进行尝试:

    -尝试使用300MHz 的 DDR3频率

    -根据我的理解、您在 EMIF0上具有1GB、在 EMIF1上具有1GB、请尝试在 GEL 文件中使用以下 LISA 映射设置:
    LISA_MAP_0 = 0
    LISA_MAP_1 = 0
    LISA_MAP_2 = 0x80640300
    LISA_MAP_3 = 0xC0640320



    LISA_MAP_0 = 0
    LISA_MAP_1 = 0
    LISA_MAP_2 = 0
    LISA_MAP_3 = 0x80740300

    -尝试使用 u-boot mtest

    -尝试 Mistral DDR3测试、可从 Mistral 站点获取。 测试结果为1GB、您可能需要针对您的 custom 板进行调整

    www.mistralsolutions.com/.../tmdxevm8148.html

    另请参阅以下 wiki 页面:

    processors.wiki.ti.com/.../Common_DDR_Issues

    此致、
    帕维尔