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:使用闪存 F021 API 加载的 TMS570LS3137代码卡在 CheckFlashECC()上

Guru**** 2033340 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/758754/tms570ls3137-tms570ls3137-code-loaded-using-flash-f021-api-stuck-at-checkflashecc

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

您好!

我们在开发中使用以下工具:

CCS 版本    :8.0

闪存 API       02.01.01  

HALCOGEN    :04.06

我们有两个图像、

使用 HALCOGEN 工具和生成的一个

2.另一个映像通过闪存 F021库和 API 调用闪存映像从 RAM 执行。

两个图像都独立工作。 当我们使用在 RAM 中执行的映像(即 2中提到的映像)来刷写 HALCOGEN 生成的映像(即1中提到的映像)时,代码卡在  HALCOGEN 生成的 CheckFlashECC()上您能帮助我们确定问题吗?

谢谢、

Kalyan

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

    这是用于测试 ECC 逻辑的诊断。 如果检测到 ECC、则应设置 FEDACSTATUS 寄存器中的 ERR_zero_FLG 标志。 如果未设置、则 ECC 逻辑有问题。

    CheckFlashECC()检查单位 ECC 错误和2位 ECC 错误。 当 CPU 检测到不可纠正的1位 ECC 错误或不可纠正的2位 ECC 错误时、它将向闪存模块发送错误事件信号。 应针对位1或位8更新闪存模块 FEDACSTATUS 寄存器。 您是否看到这些位已设置?

    如果您运行 CheckFlashEcc()两次并且 ECC 错误被强制位于同一位置(示例代码中 ECC 的位0),CPU 将无法检测到 ECC 错误,并运行到无限循环中:

    if ((flashWREG->FEDASTATUS & 0x2U)== 0U)

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

    您好、Wang、

    感谢您的回答。 我认为我没有正确地表达这个问题。

    我们使用 F021库函数刷写映像(HALCOGEN 生成的映像)。 以下是通过和失败情况:

    通过场景:

    成功刷写映像后、如果我重启电源、代码执行过程中不会出现问题。

    故障场景:

    成功刷写映像后 ,如果我复位,则控制器代码执行卡在 CheckFlashECC()函数上。

    注意:我们使用"Fapi_issueProgrammingCommand"和"Fapi_AutoEccGeneration"作为 FAPI 函数的参数。

    您能告诉 我们为什么会发生这种情况吗?

    谢谢、

    Kalyan

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

    如果运行 CheckFlashECC()两次,则第2次调用不会捕获 ECC 错误。

    在通过场景中:在跳转到第一个图像之前,第二个图像是否调用 CheckFlashECC()?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    问题:在通过场景中:在跳转到第一个图像之前,第二个图像是否调用 CheckFlashECC()?
    回答:第二个映像只是具有闪存加载功能,而没有 CheckFlashECC()函数调用。

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

    您好 Kalyan、

    第2个映像中的 sys_startup.c 可能调用 CheckFlashECC(),第1个映像可能在 其 sys_startup.c 中再次调用 CheckFlashECC()  

     在通过场景中、在跳转到第一个映像之前、ESM 状态寄存器中的值是多少?  

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

    问题:在通过场景中、在跳转到第一个映像之前、ESM 状态寄存器中的值是多少?
    回答:PASS 场景是指每次我们需要重启电源才能成功执行时加载新图像。

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

    您好 Kalyan、

    感谢您提供更多信息。 代码是否停留在下面 if (..) 陈述?

      if ((flashWREG->FEDASTATUS & 0x2U)== 0U)

      {

        自测故障通知(CHECKFLASHECC_FAIL1);

      }

    调用 CheckFlashECC()前的 ESM 值是什么,代码被卡住时的 ESM 值是什么?