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 错误

Guru**** 2379240 points
Other Parts Discussed in Thread: TMS570LC4357, TMS570LS3137, NOWECC, HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/662747/tms570ls3137-not-able-to-generate-single-bit-flash-ecc-error

器件型号:TMS570LS3137
主题中讨论的其他器件:TMS570LC4357NOWECCHALCOGEN

大家好、

我们通过调用 checkFlashECC 函数来使用 sys_selftest.c 文件、以在闪存中生成 single-bit ECC 错误。

但是、不会生成可纠正的 ECC 错误(ESM 通道6)、而是会获得不可纠正的 ECC 错误。

 FEDACSTATUS 值始终为0x100。

请告诉我们闪存是否无法获得单位 ECC 错误?


此致、
M.Sreenivasan。

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

    您好!

    为了检查 FMC ECC、在 OTP 中故意放置了单位和双位错误

    功能。 TI OTP 组0中64位的任意部分位置 F008 03F0h 至 F008 03F7h 如所示

    如图5-6所示、将生成一个单一位错误。 如图5-6所示、TI OTP 组0位置 F008 03F8h 至 F008 03FFh 中64位的任何部分都将生成双位错误。

    sys_selftest.c 中的 fmcECCcheck()函数用于生成1位和2位 ECC 错误。 ESM 状态寄存器 SR[0]和 SR[2]将针对1位和2位错误进行设置。

    对于2位 ECC 错误、FEDACSTATUS 的值为0x00020100、对于1位错误、值为0x00010002。 这是我的测试:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢王、通过上述地址、我们能够生成单个位错误。
    因此、如果发生单个位损坏、并非所有完整闪存都能够生成单个位错误。 它取决于触发单个位和多位异常的特定地址。 请确认。
    此外、技术参考中是否对此进行了记录、如果是、您能否分享详细信息?

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

    您好!

    如果启用了 CPU 事件导出、将检测到任何单位和双位错误并将其报告给 ESM。

    _coreEnableEventBusExport_(); -->应在 sys_startup.c 中调用

    spnu563.pdf (TMS570LC4357 TRM)的第342页描述了"故意的单个位和双位错误"的特性。 TMS570LS3137 TRM 中不具有此功能、但所有 Hercules 器件都具有此功能(在 OTP 中开发)。

    您可以使用闪存 API 将多个字编程到闪存、但不要对 ECC 进行编程。 读取这些字将导致 ECC 错误:

    示例代码:

    void main (void)

      uint32_t fnRetValue;

    /*进行其他测试*/

      uint32_t ll、i、val1、val2;

      char buf[32];

      对于(i=0;i<32;i++)

        buf[i]= i;

      LL = Fapi_BlockErase (1、0x00300000、0x20000);

      LL = Fapi_BlockProgram (1、0x00300000、(无符号长整型) buf、32); //仅程序数据  

      val1 =*(unsigned int *)(0x00300000);  //导致 ECC 错误

      val1 =*(unsigned int *)(0x00300004);

     

    在 ESM STAT2寄存器中设置 ECC 错误:


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢王。
    我有几个问题、请您回答:

    我们使用以下控制器:
    控制器:TMS570LS31HDK
    CCS 版本:6.2.0.00050

    1.从 SPNA126.pdf 的图6中可以看出、我们需要使用 nowECC 工具为给定的程序映像生成 ECC 文件。
    此外、使用 nowFlash 工具将 ECC 文件编程到闪存 ECC 区域中、并将程序编程到闪存(从0x00000000开始)中。
    如果我们使用 CCS6.2来刷写映像、可以看到存储器映射、闪存 ECC 未编程。 因此、它似乎没有得到
    在使用 CCS6.2时编程到闪存 ECC 中。 如果未对其进行编程、则 SECDED 如何能够检测单位和双位
    错误?

    使用 CCS6.2时、我们已经对闪存进行了编程、当我们尝试读取镜像的闪存区域时、最终会出现多位 ECC 错误。 任何
    为什么它不检测单位 ECC 错误?
    注意:我们在 sys_startup.c (_coreEnableEventBusExport_();)中调用以下函数,因为它是从 Halcogen 生成的。
    以及"_coreEnableFlashEcc_();"

    此致、
    M.Sreenivasan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有更新 wang?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sreenivasan、您好!

    如果您想使用 CCS 生成 ECC 并将其编程到闪存、请启用 CCS 的"片上闪存"下的"自动 ECC 生成"

    由于没有 ECC 编程、ECC 区域中的值为0xFFFF、这是您的闪存数据的错误 ECC 值