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.

[参考译文] RM48L530:RAM ECC 测试- RAMOCCUR 不递增

Guru**** 2484835 points
Other Parts Discussed in Thread: RM48L530, TMS570LS20216

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/733713/rm48l530-ram-ecc-testing---ramoccur-not-incrementing

器件型号:RM48L530
主题中讨论的其他器件: TMS570LS20216

器件:RM48L530

IDE:IAR 8.11.3.13984

编译器:IAR 8.11.3.13950

操作系统:Sciopta 1.9.15.10

您好!

我正在尝试在 RM48上实施 RAM ECC 的故障插入测试、并在为 TMS570LS20216提供的测试之后对我的解决方案进行了建模。 当读回 tcram1位时、RAMOCCUR 不会递增、因此不会发生错误处理。 我在下面添加了我的实施。 请有人解释这种行为吗? 谢谢你。

#ifndef __FI_RAM_ECC_CHECK_H__
#define __FI_RAM_ECC_CHECK_H__
#include 

#ifdef __cplusplus
extern "C"{
#endif

#define tcram1REG ((tcramBASE-t *)(0xFFFFFF800U)
)#define tcram2REG ((tcramBASE-t *)(0xFFFFFF900U)
)#define tcram1bit (*(unsigned int *) 0x08000000)
#define tcram2bit (*(unsigned int *) 0x08000008)
#define tcram1bitError (*(unsigned int *) 0x08400000)
#define tcram2bitError (*(unsigned int *) 0x08400008)
#define TCRAM_RAMCTRL_ECCWREN (Ucr32_t)(1U <<8u)

/* Tcram/
@
*框架@

定义*每个 TCRAM 帧/框架的定义* TRL * TRL_ECTCRAM 帧/ TRL 定义* TRL * TRL * TRF_ECCWREN (Utram.t)(Utram/TcrRAM)*框架
//
/**@typedef tcramBASE-t
*@简短的 TCRAM 包装器寄存器帧类型定义
*
此类型用于访问 TCRAM 包装器寄存器。
*/

typedef volatile struct tcramBase
{
uint32_t RAMCTRL;/* 0x0000 */
uint32_t RAMTHRESHOLD; /* 0x0004 */
uint32_t RAMOCCUR;/* 0x0008 */
uint32_t RAMINTCTRL;/* 0x000C */
uint32_t RAMERRSTATUS;/* 0x0010 */
uint32_t RAMSERRADDR;/* 0x0014 */
uint32_t rsvd1;/* 0x0018 */
uint32_t RAMUERRADDR;// 0x001C */
uint32_t rsvd2[4U];/* 0x0020 */
uint32_t ramtest;/* 0x0030 */
uint32_t rsvd3;/* 0x0034 */
uint32_t RAMADDECVECT;/* 0x0038 */
uint32_t RAMPERADDR; /* 0x003C *}
tcramBASE-t;

typedef 枚举
{
正确、
检测
} ECCAction;

void FI_CheckRAMECC (ECCAction testType);
#endif
#ifdef __cplusplus
}
#endif 

#include "ram_ecc_check.h"
#include "flexconn_interface.h"

void FI_CheckRAMECC (ECCAction testType)
{
volatile uint64_t u64_RamRead = 0;

/*对后续捕获的错误地址进行读解锁*/
u64_RamRead = tcram1REG->RAMUERRADDR;
u64_RamRead = tcram2REG->RAMUERRADDR;

/*启用对 ECC RAM 的写入*/
(tcram1REG->RAMCTRL)|=(TCRAM_RAMCTRL_ECCWREN);
(tcram2REG->RAMCTRL)|=(TCRAM_RAMCTRL_ECCWREN);

switch (testType)
{
大小写正确:
/*在设置值之前清除 RAMOCCUR */
tcram1REG->RAMOCCUR=0U;
tcram2REG->RAMOCCUR=0U;

/*将 RAMTHRESHOLD 设置为1 */
tcram1REG->RAMTHRESHOLD = 1U;
tcram2REG->RAMTHRESHOLD = 1U;

/*允许向 ESM 报告错误*/
tcram1REG->RAMINTCTRL = 0x01;
tcram2REG->RAMINTCTRL = 0x01;

/*导致1位 ECC 错误*/
tcram1bitError ^= 0x01;

/*恢复 Ctrl 寄存器*/
tcram1REG->RAMCTRL &=~TCRAM_RAMCTRL_ECCWREN;
tcram2REG->RAMCTRL &=~TCRAM_RAMCTRL_ECCWREN;

/*从相应的 RAM 位置读取*/
u64_RamRead = tcram1bit;

/*检查记录的错误*/
如果(!((tcram1REG->RAMERRSTATUS & 1)||(tcram2REG->RAMERRSTATUS & 1)))
{
FC_ErrorHandler (RAM_ERROR);
}
其他
{
tcram1REG->RAMERRSTATUS = 0x1;//清除 SERR 标志
tcram2REG->RAMERRSTATUS = 0x1;
}
中断;
外壳检测:
/*导致2位 ECC 错误*/
tcram2bitError ^= 0x03;

/*恢复 Ctrl 寄存器*/
tcram1REG->RAMCTRL &=~TCRAM_RAMCTRL_ECCWREN;
tcram2REG->RAMCTRL &=~TCRAM_RAMCTRL_ECCWREN;

/*从相应的 RAM 位置读取*/
u64_RamRead = tcram2bit;
中断;
默认值:
中断;
}
} 

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

    您可以使用安全诊断库的 API:

    /*在 TCM RAM 上运行1位 ECC 测试*/
    RetVal = sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_1BIT、TRUE、failInfoTCMRAM);

    /*在 TCM RAM 上运行2bit ECC 测试*/
    RetVal = sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_2BIT、TRUE、failInfoTCMRAM);