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.

[参考译文] RM44L520:RAM 的 PBIST 自检会覆盖所有堆栈数据、因此在自检完成后进入中止。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1244608/rm44l520-the-pbist-self-test-on-ram-overwrites-all-stack-data-so-abort-is-entered-after-the-self-test-is-complete

器件型号:RM44L520
主题中讨论的其他器件:HALCOGEN

大家好、

当使用 diagLib 时、当在 sys_startup.c 中调用 sl_SelfTest_PBIST 来自检所有 TCMRAM 时、自检完成后会覆盖所有栈数据、因此当函数返回时、使用 POP 指令进行出栈操作将进入中止异常。 客户希望知道这是否为预期行为。 如果没有、如何解决?  

您能帮助检查这个问题吗? 谢谢。

此致、

切里

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

    您好、Cherry:

    这是预期行为。

    PBIST 通常在器件启动时运行、这是一个破坏性测试、并且测试期间会覆盖所测试的 SRAM 模块的所有内容。 SRAM 分为多个组、您可以将数据和指令放在一个 SRAM 组中、并测试其他 SRAM  组。

    当您在 MCU SRAM 上执行 PBIST 时、堆栈区域中的内容也将丢失。 这就是为什么在 HALCoGen 生成的 c_int00 ()中执行 SRAM pbist 测试的原因。

    如果您在启动期间在 SRAM 中执行 PBIST、则无需将 SRAM 内容保存到其他位置、因为它不包含任何有用的数据(刚初始化的数据)。  

    如果您对 SRAM 执行定期 pbist 测试、则需要在开始测试之前保存 SRAM 内容。

    有关更多详细信息、请参阅以下主题:

    (+) RM46L430:安全手册指出、SL_SelfTest_PBIST 涵盖了 RAM7A 和 RAM7B、但 SL_SelfTest_PBIST 无法运行 TCRAM、因为运行测试会损坏"C"运行时系统-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (+) TMS570LC4357:TMS570LC4357中的内部 RAM 存储器测试-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢。此致、
    Jagadish。

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

     Jagadish、您好!

    感谢您的支持,请让我澄清,在 c_int00 ()中执行 SRAM pbist 时会出现此问题。 使用 TI 诊断库中包含的 sys_startup.c 文件、而不是使用 halcogen 生成的文件。  

    由于以下代码、当调用 sl_SelfTest_PBIST 时、会自然而然地生成入栈和出栈操作、这与 halcogen 自动生成的代码不一致。  

    void afterSTC(void)
    {
        SL_CCMR4F_FailInfo			failInfoCCMR4F;		/* CCMR4 Self Test fail info */
        volatile boolean 			retVal;             /* For function return values */
        SL_PBIST_FailInfo           failInfoPBISTSRAM;  /* PBIST Failure information for TCM RAM */
        SL_SelfTest_Result          failInfoFlash;      /* Flash Self test failure information */
        SL_SelfTest_Result          failInfoTCMRAM;     /* TCM RAM Failure  information */
        SL_PBIST_FailInfo           failInfoPBISTOthers;/* PBIST Failure information for non-TCM memories */
        SL_EFuse_Config             stConfigEFuse;      /* EFuse self test configuration */
        
        ......
        ......
        	retVal = SL_SelfTest_PBIST(	PBIST_EXECUTE,                                          /* Execute PBIST test */
    								(PBIST_RAMGROUP_06_ESRAM1 | PBIST_RAMGROUP_21_ESRAM5),  /* On all TCM RAMs */
    								PBISTALGO_MARCH13N_RED_1PORT);
        while (TRUE != SL_SelfTest_WaitCompletion_PBIST())
        {
        }
        ......
        ......
    }

    调试时、当 SL_SelfTest_PBIST 函数返回时、出栈故障进入中止状态、但当 RELEASE 全速运行时、它确实正常进入 main。 为什么会这样?

    谢谢。此致、

    切里

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

    您好、Cherry:

    我正在处理您的最后一个问题、并将尽快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

     Jagadish、您好!

    谢谢、期待您的回复。

    此致!

    切里

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

    您好、Cherry:

    在执行 pbist 测试之前、您是否将任何指令和数据放入 SRAM? 是中止数据中止还是预取中止? CP15数据故障状态寄存器和指令故障状态寄存器中的故障状态是什么?   

    在 RELEASE 模式下使用了不同的优化级别。  您是否发现 pbist 自检函数中的哪条指令(反汇编)导致了中止?