Part Number:RM44L520Other Parts Discussed in Thread: HALCOGEN
你好。
我在使用RM44L520芯片时出现了问题,在使用TI提供的diagLib诊断库时,在sys_startup.c中调用SL_SelfTest_PBIST对所有TCMRAM进行自检时,自检完成后会覆盖所有的栈数据,因此在此函数return时,使用POP指令出栈就会进入abort异常。 请问一下,这个问题是否正常,应该怎么处理?
Cherry Zhou:
您好,您的问题我们需要升级到英文论坛看下,有答复尽快给到您。
,
Cherry Zhou:
您好,
user4724084 said:请问一下,这个问题是否正常,
这个是正常的,PBIST 通常在器件启动时运行,因为它是一个破坏性测试,并且在测试期间被测试的 SRAM 模块的所有内容会被覆盖。 SRAM 分为多个组,您可以将数据和指令放在一个 SRAM 组中,并测试其他 SRAM 组。
当您在 MCU SRAM 上执行 PBIST 时,堆栈区域中的内容也将丢失。 这就是为什么在 HALCoGen 生成的 c_int00 ()中执行 SRAM pbist 测试的原因。
如果在启动期间对 SRAM 执行 PBIST,那么则无需将 SRAM 内容保存到其他位置,因为它不包含任何有用的数据(刚刚初始化)。 如果您对 SRAM 执行定期 pbist 测试,那么就需要在开始测试之前保存 SRAM 内容。
更多详细信息可以参阅下以下帖子:
https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/608569/rm46l430-safety-manual-states-that-ram7a-ram7b-are-covered-by-sl_selftest_pbist-but-sl_selftest_pbist-cannot-be-run-the-tcram-as-running-the-test-corrupts-the-c-runtime-system?tisearch=e2e-sitesearch&keymatch=%2522SL_SelfTest_PBIST%2522%2520AND%2520%2522stack%2522
https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_OtherMCU_3810810
,
user4724084:
非常感谢您的回复。
我理解了您的意思,但是我正是在c_int00 ()中执行 SRAM pbist 出现的问题。使用的是TI提供的诊断库自带的sys_startup.c文件,而不是halcogen生成的文件。
void afterSTC(void) {SL_CCMR4F_FailInfofailInfoCCMR4F;/* CCMR4 Self Test fail info */volatile booleanretVal;/* For function return values */SL_PBIST_FailInfofailInfoPBISTSRAM;/* PBIST Failure information for TCM RAM */SL_SelfTest_ResultfailInfoFlash;/* Flash Self test failure information */SL_SelfTest_ResultfailInfoTCMRAM;/* TCM RAM Failureinformation */SL_PBIST_FailInfofailInfoPBISTOthers;/* PBIST Failure information for non-TCM memories */SL_EFuse_ConfigstConfigEFuse;/* 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时,自然产生了压栈和出栈操作,这与halcogen自动生成的代码并不一致。
所以产生如下问题:
1:TI提供的诊断库代码是否有问题?
2:为什么在debug调试时会在SL_SelfTest_PBIST函数返回时出栈故障进入abort,但在release全速运行时,又能正常进入main?
期待您的解惑。
,
Cherry Zhou:
抱歉回复晚了。
在执行 pbist 测试之前,您有没有将任何指令和数据放入 SRAM? 是abort Data abort还是prefetch abort?
CP15数据故障状态寄存器和指令故障状态寄存器中的故障状态是什么?
在 RELEASE 模式下要使用不同的优化级别。 您是否发现 pbist 自检函数中的哪条指令(反汇编)导致了中止?