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.

[参考译文] TMS570LS3137:在闪存封装中启用 ECC 与在 CPU 中启用 ECC

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1066054/tms570ls3137-enabling-ecc-in-flash-wrapper-vs-in-the-cpu

部件号:TMS570LS3137
“线程:HALCOGEN测试”中讨论的其它部件

您好,

在 SPNU499c 参考手册中,FEDACCTRL1寄存器的 EDACEN 位的注释(表5-14)表明:

注:建议在闪存封装中启用 ECC,方法是在这些位中写入1010
在 CPU 中启用 ECC 之前。 如果 CPU 中启用了 ECC,但包装器中未启用 ECC,则
CPU 仍将检查和纠正单位 ECC 错误,并在不可纠正的情况下生成异常中止
主闪存错误。 但是,产生 ESM 事件,捕获故障
将防止 OTP 中的地址以及错误的检测和纠正

在该应用程序中,我们根据 spnu499c TRM 第2.2.3.2段启用了辅助控制寄存器位#25,以便为主闪存阵列启用 ACTM ECC。

上述引用的文本是否表明应该在启用辅助控制寄存器的位#25之前通过向其写入0xA 来启用 FEDACCRL1->ECDACEN 位?

感谢你的帮助。

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

    大家好,我们的专家已经不在办公室了。 请期待收到延迟的回复。

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

    你好,查克,

    主程序内存受 Cortex-R4 CPU 内实施的 SECDED 电路的保护。 所有 OTP 和收费存储器(第7列气缸组)都受 Flash 包装内专用的 SECDED 逻辑保护。  SECDED 逻辑实现都使用错误纠正代码(ECC)来纠正单位错误,并检测从闪存阵列读取的值中的双位错误。

    通过向闪存模块错误纠正控制寄存器1 (FEDACCRL1)的 EDACEN 字段写入0xA,可以启用用于访问 EEPROM 仿真闪存库和 OTP 闪存库的 ECC 保护。

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

    QJ 您好,

    我理解您在上面所说的内容,但我无法对其解码以下问题的答案:

    上述引用的文本是否表明应该在启用辅助控制寄存器的位#25之前通过向其写入0xA 来启用 FEDACCRL1->ECDACEN 位?

    谢谢。

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

    你好,查克,

    不能,EEPROM 和 OTP 的 ECC 保护逻辑仅在闪存封装中实现。 设置 ARM ACTLR 寄存器(辅助控制寄存器)的位25是为了在 CPU 中启用 SECDED 逻辑,该逻辑用于主程序闪存(bank0和 bank1)。

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

    QJ 您好,

    很抱歉,我已经混淆了 EEEP/OTP (从0xF0000000开始)和主程序闪存(从0x0开始为3MB)。

    我要做的是通过模拟坏的主程序闪存生成 ECC 双位错误,在给定地址翻转2位。

    请您提供更多见解吗? 我没有使用壁龛,所以需要一个这样做的程序。

    非常感谢。

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

    你好,查克,

    使用诊断模式7:

    请参阅 “F021闪存模块控制器(FMC)”一章中的“ECC 数据修正诊断测试模式:Diag 模式=7”一节。

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

    QJ 您好,

    我在使用 FPAR_OVR_bit.DAT_INV_PAR = 0x03执行第5.6.2.6段 ECC 数据修正诊断测试模式:Diag 模式= 7中找到的步骤,该步骤在第5.3.3段综合症表中未定义,因此用于模拟多位无法纠正的闪存 ECC 错误。

    结果是,我收到了异常中止而不是未更正的 ESM 错误,该错误应激活 nError 信号针脚

    在这种情况下,应生成什么 ESM 错误?

    由于这是一个未校正的 ECC 错误,这是一个严重的 ESM Group2或 Group3不可屏蔽错误,为什么没有断言 nError 信号针脚?

    谢谢。

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

    QJ,

    读取地址0x20000000处的镜像闪存位置后 ,生成 CPU 异常中止,并捕获了以下数据故障寄存器,这似乎是正确的:

    • DFAR = 0x20000000
    • DFSR=0x1008

    唯一的问题是没有为此双位模拟错误生成 ESM 错误。 中止异常后,所有 ESMSR1,2,3和4寄存器都是0x00000000。

    在 ACTLR ARM CPU 寄存器中,已将以下内容配置为将错误传递给 CPU:

    • Bit25=1为 ATCM ECC 检查启用(主闪存阵列)
    • Bit0=1是 CPU 启用中的 ATCM 外部错误

    无法掩盖此严重错误,原因可能是什么?

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

    对于2位 ECC 错误,数据将中止。 请按照以下步骤执行2位 ECC 错误自检。

    0. /*闪存模块 ECC 响应已启用*/
    FEDACCTRL1 = 0x000A060AU;

    1./*启用诊断模式并选择诊断模式7 */
    FDIAGCTRL = 0x00050007U;

    [19:16]=0x5: 诊断模式已启用

    [2:0]: ECC 数据修正诊断测试模式7

    2./*选择 ECC 诊断模式,要损坏两位 ECC */
    FPADROVR = 0x00005A03U;

    [15:12]=0x5:地址总线奇偶校验已启用

    [7:0]=0x3:数据奇偶校验

    3./*设置诊断模式的触发器*/
    FDIAGCTRL |= 0x01000000U;

    4./*从镜像内存映射中读取闪存位置,这将导致数据中止*/
    读取=(*(易失性 UINT32 *)(0x20000000U));

    5./*禁用诊断模式*/
    FDIAGCTRL = 0x000A0007U;

    将设置 ESM 3.7,nError 将被关闭,并生成数据中止。

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

    感谢 QJ 的帮助,

    仅缺少一件事:在 spnu499c 段5.6.2.6中找到的过程没有提到 必须配置闪存错误检测和修正控制寄存器1 (FEDACCTR1),这样 CPU ECC 闪存错误事件信号将被解除阻止。

    添加此解锁指令可以解决问题。

    此致!

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

    QJ,

    还有一个问题:即使没有执行闪存 ECC 检查测试,该行是否也应该是应用程序的一部分?

    FEDACCTRL1 = 0x000A060AU;

    如果我离开此线路而未执行闪存 ECC 检查测试,应用程序将崩溃。

    如果我不将其与应用程序放在一起,如果发生闪存 ECC 错误,是否仍会向 CPU 报告?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="91537" url=~ë/support/icler/arm-based 微处理器组/基于 ARM 的微控制器/f/arm-based 微控制器-forum/1066054/tms570ls3137-enabling-ecce-flash-wraper-vs -On-The-CPU/3969452#3969452"]

    即使未执行闪存 ECC 检查测试,此线路是否也应该是应用程序的一部分?

    FEDACCTRL1 = 0x000A060AU;

    [/引用]

    是的。 否则,ECC 错误将不会报告给 ESM 和闪存状态寄存器

    [引用 userid="91537" url=~ë/support/icros/arm-based 微处理器组/基于 ARM 的微控制器/f/arm-based 微控制器-forum/1066054/tms570ls3137-enabling-ecce-flash-wraper-vs -On-The-CPU/3969452#3969452"]如果应用程序仍不发生错误,我会报告应用程序错误[如果没有发生,则不会发生错误]

    如果 CPU 中启用了 ECC,但包装器中未启用 ECC,CPU 仍将检查并纠正单位 ECC 错误,并对主闪存的不可纠正错误生成异常中止。