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.

[参考译文] CCS/TMS570LC4357:SL_SelfTest_SRAM ()在运行应用程序时不工作!

Guru**** 2460850 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/648671/ccs-tms570lc4357-sl_selftest_sram-is-not-working-when-running-the-application

器件型号:TMS570LC4357

工具/软件:Code Composer Studio

您好!

我正在尝试在引导时测试 SRAM、因此我编写了以下代码行:

#if L2RAMECCCHECK_ENABLE = 1.

布尔 RetVal;
SL_SelfTest_Result 结果;

RetVal=sl_SelfTest_SRAM (SRAM_RADECODE_DIAGNOSTICS、TRUE、结果);
if (RetVal =false){while (1);}/*无法启动*/
if (结果== ST_FAIL)

/*ST 失败*/
while (1);

RetVal=sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_1BIT、TRUE、结果);
if (RetVal = false){while (1);}
if (结果== ST_FAIL)

/*ST 失败*/
while (1);

RetVal=sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_2BIT、TRUE、结果);
if (RetVal=false){while (1);}
if (结果== ST_FAIL)

/*ST 失败*/
while (1);


#endif

现在、当我调试应用程序时、代码行运行良好、没有问题。 但是、当我在不使用调试器的情况下运行同一应用程序时、SRAM 自检失败。  

有人能帮我解决这个问题吗?

谢谢你

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

    我已将您的问题转发给我们的软件团队。 下周您将收到回复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rabie Hammoud、

    我注意到您有多个测试、是否有特定测试失败、或者您在所有 sl_SelfTest_SRAM 测试中看到相同的测试。

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

    您好、Prathap、

    我在所有 SRAM 自检中获得相同的结果。 但我想知道、当我使用调试器时、为什么这些自检运行良好、但当我在没有调试器的情况下运行程序时、我无法访问主函数。  

    谢谢你

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

    你(们)好 Rabie

    除了 SRAM PBIST 测试之外、我没有看到任何其他函数有任何问题。 PBIST 是一个问题、因为您将输出所有 RAM 内容、包括堆栈、所以这个函数需要特别注意。  

    但是、我看不到 上面列出的 API 在调试器打开和关闭时有任何不同的行为。  

    为了检查、您能否确保堆栈按其预期工作、即不会损坏堆栈。  

    我将尝试在此处重新创建您的测试并将您发布在网站上。

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

    您好、Prathap、

    这是我用于激活自我诊断程序的代码。 它通过了 SRAM 自检。 当使用调试器步进这个代码时,它运行良好,我可以到达 main()。

    -->

    void _c_int00 (void)

    /*用户代码开始(5)*/
    /*用户代码结束*/

    /*初始化内核寄存器以避免 CCM 错误*/
    _coreInitRegisters_();

    /*初始化堆栈指针*/
    _coreInitStackPointer_();

    /*复位处理程序:以下指令从系统异常状态寄存器中读取
    *以确定 CPU 复位的原因。
    *
    switch (getResetSource())

    案例 POWERON_RESET:
    调试复位情况:
    案例 EXT_RESET:

    /*用户代码开始(6)*/
    情况 NO_RESET:
    /*用户代码结束*/

    /*初始化 L2RAM 以避免在上电后立即出现 ECC 错误*/
    memInit_();

    /*用户代码开始(7)*/

    /*用户代码结束*/

    /*用户代码开始(8)*/
    /*用户代码结束*/


    /*用户代码开始(9)*/
    /*用户代码结束*/

    /*启用 CPU 事件导出*/
    /*这允许 CPU 发出检测到的任何单位或双位错误的信号
    *通过其 ECC 逻辑访问程序闪存或数据 RAM。
    *
    _coreEnableEventBusExport_();

    /*用户代码开始(10)*/

    sl_set_nError();
    sl_clear_nError();
    while (sl_ESM_nError_Active ()== true);

    /*等待错误引脚被清除*/

    /*用户代码结束*/

    /*检查加电期间是否存在 ESM 组3错误。
    *这些可能发生在电子保险丝自动加载期间或从闪存 OTP 读取期间
    *在加电期间。 器件运行不可靠、不建议这样做
    *。 *
    if ((esmREG->SR1[2])!= 0U)

    esmGroup3Notification (esmREG、esmREG->SR1[2]);


    /*初始化系统-时钟、闪存设置、带 Efuse 自检*/
    systemInit();

    /*用户代码开始(11)*/
    #if (PBIST_ROM_ENABLE = 1U)||(PBIST_L2RAM_ENABLE = 1U)||(PBIST_PERIPHRAM_ENABLE = 1U)
    /*此函数是 Errata PBIST#4的权变措施。 此函数用于使用 PBIST 控制器初始化 ROM。*/
    /* CPU 将配置 PBIST 控制器以测试 PBIST ROM 和 STC ROM*/
    errata_PBIST_4 ();
    #endif

    /*ROM 自检*/
    #if PBIST_ROM_ENABLE = 1U

    布尔 RetVal;

    /*在 STC ROM 和 PBIST ROM 上启动 PBIST */
    RetVal = sl_SelfTest_PBIST (PBIST_EXECUTE、
    PBIST_RAMGROUP_01_PBIST_ROM |
    PBIST_RAMGROUP_02_STC1_ROM_R5 |
    PBIST_RAMGROUP_03_STC1_2_ROM_R5 |
    PBIST_RAMGROUP_04_STC2_ROM_NHET、
    PBISTALGO_TRIPLE_READ_FAST_READ |
    PBISTALGO_TRIPLE_READ_SLOW_READ);
    /*无法启动*/
    if (RetVal == false)

    while (1);

    SL_PBIST_FailInfo PbistStatus;

    /*等待 ROM 上的 PBIST 完成*/
    while (sl_SelfTest_Status_PBIST (&pbistStatus)=false);
    SL_SelfTest_PBIST_StopExec();

    if (pbistStatus.stResult!= ST_PASS)

    /* PBIST 失败*/
    while (1);

    /*清除 VIM 挂起中断请求(通道85 - PBIST 完成)*/
    vimREG->INTREQ2 = 0x00200000;

    #endif

    /*CPU RAM 自检*/
    #if PBIST_L2RAM_ENABLE = 1U

    /*在 L2RAM 上运行 PBIST */
    SL_SelfTest_PBIST (PBIST_EXECUTE、
    PBIST_RAMGROUP_29_L2RAMW |
    PBIST_RAMGROUP_30_L2RAMW、
    PBISTALGO_MARCH13N_1端口);

    while ((systemREG1->MSTCGSTAT & 0x1u)=0x0u);

    if ((pbistREG->FSRF0 == 0U)&&(pbistREG->FSRF1 == 0U))

    /* PBIST 通过*/

    其他

    /* PBIST 失败*/
    while (1);

    /*禁用 PBIST 时钟并禁用内存自检模式*/
    SL_SelfTest_PBIST_StopExec();
    memInit_();

    /*清除 VIM 挂起中断请求(通道85 - PBIST 完成)*/
    vimREG->INTREQ2 = 0x00200000;

    #endif

    #if L2RAMECCCHECK_ENABLE = 1.

    布尔 RetVal;
    SL_SelfTest_Result 结果;

    RetVal=sl_SelfTest_SRAM (SRAM_RADECODE_DIAGNOSTICS、TRUE、结果);
    if (RetVal =false){while (1);}/*无法启动*/
    if (结果== ST_FAIL)

    /*ST 失败*/
    while (1);

    RetVal=sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_1BIT、TRUE、结果);
    if (RetVal = false){while (1);}
    if (结果== ST_FAIL)

    /*ST 失败*/
    while (1);

    RetVal=sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_2BIT、TRUE、结果);
    if (RetVal=false){while (1);}
    if (结果== ST_FAIL)

    /*ST 失败*/
    while (1);


    #endif

    感谢你的帮助

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

    你(们)好 Rabie

    不确定您是否在这方面取得了任何进展? 我没有看到失败。

    如果您仍需要有关问题的帮助、请告诉我。  

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

    您好、Prathap、

    我在这个问题上没有取得任何进展。 您是否尝试运行了代码、我将其发送给了您?

    当我使用调试器时,我想知道为什么这段代码运行良好,但没有调试器,它无法到达 main()。

    我希望我们能够解决这个问题

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

    我在不同的器件中尝试过相同的 API、但在 TMS570LC4357上没有尝试过。 希望我明天能拿到一些电路板、并向您发送一个示例项目。

    我想尝试几件事
    1) 1)当您在发生故障的情况后进行连接时、PC 控制的位置是在某些中止处理程序中、还是在某些中止处理程序中。
    2) 2)如果您注意到任何 ESM 错误(查看 ESM 寄存器)、请让我们知道设置了哪些错误。
    3) 3)如果控件将预取中止....、也请尝试我在其他器件上给出的建议 e2e.ti.com/.../2391369
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Prathap、

    函数  sl_SelfTest_SRAM (SRAM_RADECODE_DIAGNOSTICS、TRUE、&RESULT) 运行良好。 其他2个函数:

    - sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCEDing_1位、TRUE、&RESULT)和  SL_SelfTest_SRAM (SRAM_ECC_ERROR_ENDERAT_B2BIT、TRUE、&RESULT)仍有相同的问题。

    在一个失败启动后、ESM 中表示以下内容:  

    正如您看到的、ESM 中没有错误。

    我在 CSS 项目中使用以下设置:


     

    我激活了自动 ECC 生成、但没有任何结果。  

    你有什么进展吗?  

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

    你(们)好 Rabie  

    我针对自检 SRAM 做了一个简单的示例。 它工作正常。  

    请查找附件。  /cfs-file/__key/communityserver-discussions-components-files/312/2350.SL_5F00_LC43x_5F00_SampleCode.zip