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.

[参考译文] RM42L432:如何测试"主 SRAM 硬错误高速缓存和活锁"机制?

Guru**** 2331900 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/597563/rm42l432-how-to-test-primary-sram-hard-error-cache-and-livelock-mechanism

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

您好!

  我想测试"主 SRAM 硬错误缓存和活锁"机制。

以下是我对该机制的理解:

  (1)如果存在 ECC 活锁故障、将设置 ESM 组2通道16。

(2)只要 ESM 2.16被置位、处理器就会进入"FIQ void esmHighInterrupt (void)"。    "HALCoGen v 04.06.01生成"Fiq void esmHighInterrupt (void)"。

问题1:我的理解是否正确?

我在 安全 TI 诊断库 v 2.3.1中找到了一些示例代码。

SRAM_LIVELOCK_DIAGNOSTICS 案例:
(void) sl_FLAG_SET (testType);

TP =(volatile uint64 *) 0x08000004u;/*未对齐访问的起始地址*/
eccb1 =(易失 uint64 *) 0x08000000u;/* bank1基字*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
eccb1 = eccb1 +(0x00400000u/sizeof (uint64));/*指向 bank1基字 ECC 的指针*/
eccB2 =(易失 uint64 *) 0x08000008u;/* bank2基字*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
eccB2 = eccB2 +(0x00400000u/sizeof (uint64));/*指向 bank2基字 ECC 的指针*/

/*启用对 ECC RAM 的写入*/
/*SAFETYMCUSW 9 S MR:12.2. 注释_10*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
bit_set (tcram1REG->RAMCTRL、TCRAM_RAMCTRL_ECCWREN);
/*SAFETYMCUSW 9 S MR:12.2. 注释_10*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
bit_set (tcram2REG->RAMCTRL、TCRAM_RAMCTRL_ECCWREN);

regBkupRamTh1 = tcram1REG->RAMTHRESHOLD;
regBkupRamTh2 = tcram2REG->RAMTHRESHOLD;

/*将阈值设置为1 */
tcram1REG->RAMTHRESHOLD = 0x1u;
tcram2REG->RAMTHRESHOLD = 0x1u;

_sl_Barrier 数据访问();

/*导致1位 ECC 错误*/
* eccB1 ^= TCRAM_SYN_1bit_DATA_ECC;

* eccB2 ^= TCRAM_SYN_1bit_DATA_ECC;

/*从位置读取以生成错误*/
_sl_Barrier 数据访问();

ramread64 =(* tp);/*未对齐的读取*/

_sl_Barrier 数据访问();

sl_FLAG_CLEAR (testType);

中断;

但是, 当我在调试模式中逐步测试上述代码时,我只能看到生成1位 ECC 错误 ,但 ESM 2.16未设置。

Q2:出什么问题了吗?

 请参阅 http://e2e.ti.com/support/microcontrollers/hercules/f/312/t/334077?tisearch=e2e-sitesearch&keymatch=TCM-ECC%20live%20lock%20detect ,

蔡国荣
CT>>如果 CPU 检测到1位错误、它将重试从 TCM 存储器读取。 通常、只有在存储器存在永久性故障时才会发生此硬错误。 因此、这很难测试。 我想你可以尝试在未定义的异常向量处创建一个未定义指令。  
问题3:如何实施?
非常感谢。

  

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

    您好!

    问题1:您是对的、此测试仅生成1位 ECC 错误。

    Q2、Q3:如 CT 所述、您可以尝试在未定义的异常向量处创建未定义的指令。

    Livelock 是处理器流水线正在推进和执行指令的状态、但处理器重复执行相同的指令、因此不会在程序中取得任何进展。 当在0x04的未定义异常向量处有一条欠完善的指令时、处理器永远不会推进程序流、从而引发活锁事件。 当 ESM 接收到活锁事件时、它能够以正常的方式创建一个到处理器的异步异常(例如 NMI 中断)。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您的回答。
    您能否提供一些有关"在未定义的异常向量处创建未定义指令"的示例代码? 非常感谢。