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.

[参考译文] TMS570LS1224:使用 SafeTI 诊断库进行费用、RAM 和闪存 ECC 错误处理和测试

Guru**** 2875690 points

Other Parts Discussed in Thread: TMS570LS1224, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1623846/tms570ls1224-fee-ram-and-flash-ecc-error-handling-and-test-with-safeti-diagnostic-library

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

大家好:  

我需要处理 ECC 费用、RAM 和闪存错误、以便在出现这些错误时使器件进入保存状态。 因此、我需要确定使用 TMS570LS1224 Lauchpad 上 SafeTI 诊断库 2.2.0 中的测试函数将检测到 EEC eros。

我使用这些功能来测试 ECC 错误的错误处理:

B_Result = SL_SelfTest_fee (fee_ecc_test_mode_1bit_fault_injection、false、&fee_stResult);

我收到一个 ESM 组 1 异常通道 35;nError 亮起、直到 esmREG->EKR = 0x5U;在重新启动后通过执行 systemREG1->SYSECR = 0x0000C000 执行;nError 再次亮起、测试无法重复;只需按下重置按钮或执行下电上电清除 nError

为什么系统 REG1->SYSECR = 0x0000C000 延迟后 nError 再次亮起?

B_result = sl_SelfTest_fee (fee_ecc_test_mode_2BIT_FAULT_injection、false、&fee_stResult);

我收到一个 ESM 组 1 异常通道 36;nError 亮起、直到 esmREG->EKR=0x5U;重新启动后、通过执行 systemREG1->SYSECR = 0x0000C000;测试可重复->按预期工作

B_Result = SL_SelfTest_SRAM (SRAM_ECC_1BIT_FAULT_INJECT、TRUE、&SelfTestResult);

我收到通道 26 和通道 28 的 ESM 组 1 异常;nError 亮起、直到执行 esmREG->EKR = 0x5U;执行;通过执行 systemREG1->SYSECR = 0x0000C000 重新启动后;测试可重复->按预期工作

B_Result = SL_SelfTest_SRAM (SRAM_ECC_2BIT_FAULT_INPLING、TRUE、&SelfTestResult);

到目前为止我没有收到任何异常;但 nERROR 会短暂亮起;我希望进入 group2 通知或 dabort Handler?  

感谢您提供任何帮助。
此致
Jens

 

 

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

    尊敬的 Jens:

    感谢您的提问。  1 位收费错误测试的软件复位后持续 nError 置位是由复位前未正确清除闪存错误检测和校正状态寄存器 (FEDACSTATUS) 引起的。 当使用诊断模式发现一个 single-bit 可纠正的错误时、会设置 FEDACSTATUS 寄存器中的诊断可纠正错误状态标志 (D_COR_ERR、位 3)。

    这是因为 ESM 通道 35 对应于组 7 访问上的 FMC 可纠正的 ECC 错误。 当清除 ESM 错误密钥寄存器 (esmREG->EKR = 0x5U) 并执行软件复位 (systemREG1->SYSECR = 0x0000C000) 时、FEDACSTATUS 寄存器标志不会自动清除。 重新启动后、由于 D_COR_ERR 标志保持置位、系统会重新评估错误条件并将 nError 重新置为有效。

    在执行软件复位之前、必须明确清除 FEDACSTATUS 寄存器标志。 写入 FEDACSTATUS 中的相应位以清除 D_COR_ERR 标志。 只有硬件复位(下电上电或复位按钮)才会将所有闪存控制器寄存器清除为其默认状态、这就是这些方法有效的原因。

    2 位费用错误测试正常工作、因为它会触发 ESM 组 1 通道 36(FMC 不可纠正的错误)。 诊断不可纠正错误标志 (D_UNC_ERR、位 12) 在 FEDACSTATUS [3]中设置、但处理与可纠正错误不同、能够实现正确复位和重复。

    SRAM 1 位错误测试正确触发 ESM 组 1 异常:

    • 信道 26 :B0TCM(偶数存储体)可纠正的 ECC 错误。
    • 通道 28 :B1TCM(奇数组)可纠正的 ECC 错误。

    这些中断被处理为 ESM 中断、并可以正确清除和重复。

    SRAM 2 位错误测试问题

    您对组 2 通知或中止处理程序的期望不正确。 根据 TMS570LS1224 错误响应表、会触发 2 位 SRAM ECC 错误(不可纠正) 第 3 组 ESM 事件 、而不是组 2。

    错误源
    错误响应
    ESM 通道
    B0 TCM(偶数)ECC 双错
    中止 (CPU)、ESM => nError
    3.3
    B1 TCM(奇数)ECC 双错
    中止 (CPU)、ESM => nError
    3.5

    预期行为: 2 位 SRAM ECC 故障应:

    1. 生成 CPU 数据中止异常
    2. 触发 ESM 组 3 通道 3 或 5(取决于哪个组)
    3. 直接将 nERROR 引脚置为有效  

    您观察到的短暂 nError 脉冲表明正在检测到错误、但您可能看不到异常、因为:

    • 您的数据中止处理程序可能未正确配置
    • 可能无法设置 ESM 组 3 中断处理程序
    • 在无法正确处理中止的情况下发生故障

    建议:

    1. 对于收费 1 位测试: 软件复位前清除 FEDACSTATUS 寄存器:

      //清除诊断可纠正错误标志
      flashWREG->FEDACSTATUS = 0x8//清除 D_COR_ERR(位 3)
      //然后执行软件重置
      systemREG1->SYSECR = 0x0000C000;
    2. 对于 SRAM 2 位测试:

      • 实现数据中止处理程序以捕获 CPU 中止
      • 配置 ESM 组 3 通道 3 和 5 处理程序
      • 验证 ESM 配置中是否启用了 ESM Group 3 错误处理
      • 检查是否在启动代码中正确配置了中止异常矢量
    3. 正确启用 ECC: 在 CPU 中启用 ECC 之前、通过将“1010"写入“写入 EDACEN 位(FEDACCTRL1 的第 3-0 位)来确保在闪存包装程序中启用 ECC。

    4. ESM 配置: 错误信令模块监视所有器件错误并确定是生成中断还是触发 nERROR 引脚。验证 ESM 组配置是否与预期的错误路由匹配。

    谢谢。此致、

    IRA

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

    您好、Ira、

    我只是想回到 RAM ECC 2Bit 错误。 在执行 sl_SelfTest_sram (SRAM_ECC_2BIT_FAULT_INPLING、TRUE、&SelfTestResult) 时我仍然无法收到通知;

    但由于我看到 nERROR LED 会在短时间内亮起、因此必须执行一些操作。

    正如您所说:

    对于 SRAM 2 位测试:

    • 实现数据中止处理程序以捕获 CPU 中止
      -> 执行了数据中止处理程序
    • 配置 ESM 组 3 通道 3 和 5 处理程序
      ->如何做到这一点?
    • 验证 ESM 配置中是否启用了 ESM Group 3 错误处理
      ->无法在汉考根中配置 ESM Group 3、因为它呈灰色显示
    • 检查是否在启动代码中正确配置了中止异常矢量
      -> 在我的启动代码中正确配置了中止异常矢量

    感谢您提供任何帮助。
    此致
    Jens


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

    尊敬的 Jens:

    我们有一个内部 AI 工具,可以分析与此控制器相关的所有问题以及所有数据库,我从它得到了一些有用的建议,你可以尝试他们在你的第一阶段,如果它没有帮助你,那么我将进一步挖掘,以纠正这个问题。

    ESM 组 3 无法生成 CPU 中断 —它通过硬接线仅将 nERROR 引脚置为有效。 这是根据设计实现的:组 3 错误被归类为严重、不可屏蔽的硬件故障。 HALCoGen 之所以非常格式化、是因为软件中没有可配置的内容。 您永远不会收到针对组 3 事件的 ESM 回调、也不需要。

    相关问题 ESM 组 3 通道 5 —您可以完全忽略它。 它不会映射到此器件上的任何 SRAM 错误源。 通道 3 是唯一相关的通道 对于 L2 SRAM ECC 双位错误。

    2 位 ECC 错误的硬件响应链为:

    检测到 2 位 ECC 错误
    │μ s
    ├──►ESM 组 3、通道 3→将 nERROR 引脚置为有效(LED 亮起)。
    │μ s
    └──►总线错误→CPU 数据中止异常。

    由于中止处理程序已实现、但不会触发可见通知、因此最可能的原因是:

    1.中止处理程序未清除所需的标志

    2 位 ECC 错误的数据中止处理程序 必去之地 执行以下所有步骤、否则执行将无法完全返回到自检功能中

    void dataAbortHandler (void){
    // 1。 读取 DFSR 以确定故障类型(位[3:0]和 S 位[10])
    // 2. 读取 DFAR 以获取故障地址(同步中止)
    // 3. 清除 ESM 组 3 错误标志:写入 esmREG->SR1[2]
    // 4. 清除 RAMERRSTATUS 标志 (DRDE 位 4 和 DWDE 位 3)
    // 5. 返回到 R14_abt - 8(故障指令地址)
    }

    如果 ((esmREG->SR1[2])!= 0U){
    //确认 ESM 组 3 错误—在此处记录/标记
    esmREG->SR1[2]= 0x1;//写入 1 以清除
    }

    测试成功后、RAMERRSTATUS应读取0x18 (DRDE=1、DWDE=1)[6]。 如果您看不到这一点、则中止处理程序未正确完成。

    2. MPU 可能会产生干扰

    如果在您的配置中启用了存储器保护单元、则当诊断测试访问 L2RAM 测试区域时、它会触发自己的数据中止 解决方案 ECC 故障甚至会触发。 在调用自检程序之前将其禁用:

    mpuDisable_();
    retVal = SL_SelfTest_SRAM (SRAM_ECC_2BIT_FAULT_INPLING、TRUE、&SelfTestResult);

    3、中止处理程序可能无法返回到正确的地址

    故障指令位于 R14_ABT−8 。 如果处理程序返回到错误的地址、则不会在内部恢复执行SL_SelfTest_SRAM、并且函数将永远不会填充SelfTestResult有效的结果。

    --

    此致、
    Jagadish。