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.

[参考译文] F29H850TU:ECC 错误处理:读取 ISR 中 EAM 错误类型寄存器的建议方法

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1566963/f29h850tu-ecc-error-handling-recommended-approach-to-read-the-eam-error-type-register-in-the-isr

器件型号:F29H850TU


工具/软件:

您好!

我正在使用 F29x 系列、并使用 EAM 和 ESM 配置 ECC 错误处理、如 TI 的 SDAA104 应用手册中所述。

我知道所有高优先级错误 (HPERR)(包括 ECC 错误)都通过 ESM 进行聚合和发出信号、通常会触发 NMI ISR?

我的问题:
NMI ISR 如何可靠地确定 HPERR 是由 ECC 错误(单位或双位)引起、而不是由另一个高优先级错误源(例如非法指令)引起?

到目前为止、我发现的内容:

  • EAM 错误类型寄存器会记录每个错误源的特定值。
  • 对于 ECC 错误、错误类型值0x40适用于不可纠正的(双位,高优先级)和0x80可纠正的(一位,低优先级)。
  • 其他 HPERR 具有不同的错误类型值(请参阅 SDAA104 中的表 4-1)。

读取 ISR 中 EAM 错误类型寄存器并与这些值匹配的推荐方法是否与这些值相匹配?
如果是、访问这些寄存器和处理同一 ISR 中的多个错误源是否有最佳实践?

希望提供有关 ISR 中稳健错误源识别的任何代码示例或说明!

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

    您好、

    EAM 错误类型会记录每个错误源的特定值。

    是、错误类型寄存器定义映射到特定错误(例如访问确认错误,不可纠正的错误等)的多位值。 每种类型的值都是预先定义的。 您可以检查在“错误聚合器“一章中定义了这些错误类型值的 TRM。

    在 ISR 中读取 EAM 错误类型寄存器并与这些值匹配的推荐方法是吗?

    是的。  根据您的功能安全要求、定义 NMI ISR 中每个错误类型的处理  

    对于 UNCERR ECC 错误、您可以在下面的 NMI ISR 中找到类似这样的内容:  

        //Clear ESM and EA flags to avoid NMIWD expiry
        Interrupt_clearEsmEaFlags(&nmiStatus);
    
        // Check for ECC Errors (type register for respective CPU EA) DR1/DR2/PR/DW buses
        if ((nmiStatus.cpu1EaSts.dr1.errorType == 0x40)||(nmiStatus.cpu1EaSts.dr2.errorType == 0x40)||(nmiStatus.cpu1EaSts.dw.errorType == 0x40)||(nmiStatus.cpu1EaSts.pr.errorType == 0x40))
        {
            //Store the error addr to variable and POR reset type register to check later for debug
            HPERRAddr = nmiStatus.cpu1EaSts.dr1.highPriErrAddr;
            HWREG(0x30200090) = HPERRAddr;
            //If ECC error was observed, Trigger XRSn (Device Reset) to not execute/use the corrupted data
            SysCtl_simulateReset();
        }

    谢谢、
    Prarthan。

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

    你好 Prarthan、

    感谢您的答复。

    我对用于测试 ECC 故障处理的建议设置有后续问题。

    是否有任何 API 可以帮助我们模拟或验证 ECC 行为来测试实现的 ISR?

    提前感谢您的支持、

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

    您好、

    最新 F29SDK 在 SDL(软件诊断库)中有示例、其中包含 API 以及有关如何测试 ECC 的示例

    f29h85x-sdk_1_02_00_00\examples\sdl\

    ECC 校验器 内置在 CPU 内核中、请参阅下图取自 C29 CPU 指南、每个总线 (PR、DR、DW) 均内置了 ECC 校验。 这与我们针对 F28 器件(例如在闪存中完成 ECC 检查)的情况不同。

    对于 F29 器件、我们具有类似 SDL 中提供的示例的故障仿真寄存器、用于单独将故障仿真到这些 ECC 校验器中、而不是在闪存 ECC 位中注入故障。 还有 ECC 自检机制、可用于向 SDL 中也提供的这些 ECC 校验器提供数据及其相应的 ECC。

    上面的用于注入和测试 ECC 校验器、模拟/触发 ECC 错误的其他几种方法之一是将数据仅编程到闪存中、而无需针对相应数据对 ECC 进行编程、然后从闪存中将触发 ECC 错误的位置读取。

    闪存数据和 ECC 编程可通过闪存 API 完成、SDK 中还提供了一个相关示例、您可以参考该示例。

     谢谢

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

    谢谢 Prarthan。 您能否提供指向 SDL 示例的链接? 我已经浏览过这些示例、但找不到  SDL 中提供的 ECC 特定示例:

     https://dev.ti.com/tirex/explore/node?node=A__AOcKua9N5bXT58-RKxcqkw__f29h85x-sdk__aZ9BqlN__LATEST&search=ESM

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

    谢谢 Prarthan。 您能否提供指向 SDL 示例的链接? 我已经浏览过这些示例、但找不到  SDL 中提供的 ECC 特定示例:

     https://dev.ti.com/tirex/explore/node?node=A__AOcKua9N5bXT58-RKxcqkw__f29h85x-sdk__aZ9BqlN__LATEST&search=ESM

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

    MEMSS 示例: https://dev.ti.com/tirex/explore/node?node=A__ANq7FvSfrJxxb6GKv2PWZg__f29h85x-sdk__aZ9BqlN__LATEST 

    SIC(安全互连如需更多信息,请参阅 TRM)示例: https://dev.ti.com/tirex/explore/node?node=A__AKQcnIzkcv8A4et-Jjqp1w__f29h85x-sdk__aZ9BqlN__LATEST 

    谢谢

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

    谢谢!