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.

[参考译文] TMS570LC4357:L2FMC 诊断模式下的自检问题

Guru**** 2470720 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/668487/tms570lc4357-problems-with-self-tests-on-l2fmc-diagnostic-modes

器件型号:TMS570LC4357

您好!

我正在尝试使用 SafeTI 库2.4.0获取闪存 L2FMC 模块的自检、并自行实施(地址标签寄存器测试、模式5、在 TMS570LC4357的 SafeTI Lib 中未完成)。

对于使用 SafeTI Lib 函数 sl_SelfTest_Flash 执行的 ECC 1位测试:

以下条件始终失败:

如果(((( SL_epcREG1->EPCERRSTAT & EPC_ERR_CAM_FULL)== EPC_ERR_CAM_FULL)||
    (((sl_epcREG1->EPCERRSTAT 和 EPC_ERR_CAM_OVRFLW)== EPC_ERR_CAM_OVRFLW)||
    (sl_epcREG1->CAMAAVAILSTAT!= regBkupCamAvail))&&
    (((((sl_esmREG->SR1[0])& bit (ESM_G1ERR_EPC_SERR))=(bit (ESM_G1ERR_EPC_SERR)))){
/*清除 ESM 状态寄存器*/
sl_esmREG->SR1[0]= BIT (ESM_G1ERR_EPC_SERR);

因为在 ESM 状态寄存器中、预期的位没有被置位。

奇怪的是:

如果我添加对 ESM 状态寄存器(sl_esmREG->SR1[0])的读取、就在下面的行触发 ECC 1位错误之前、它会起作用:

flashread =*(volatile UINT32 *) flashBadECC1;

然后、我还尝试执行地址标签寄存器测试、如微控制器参考手册中建议的那样:

它首先看起来工作正常、只检查错误标志 flashWREG->FEDAC_PASSUST、测试后预期的位被置位。

根据参考手册、错误也被路由至 ESM 并且根据数据表、一个 ESM 组3错误位13应该被设定、其中包括错误反应: 总线错误、ESM -> nERROR。

如果我在测试后检查 ESM 位、我看不到相应的位被置位。  

然后、我测试了与上面一样的内容、在测试前读取 ESM 状态寄存器。 至少当单步执行代码时、我看到 ESM 状态寄存器中的位在测试后被置位、但没有其他反应。  

尽管如此、对于系统复位后的这个测试、针对预期错误的 ESM 组3状态位被置位并且系统不会启动、这是因为在启动期间会检查此情况。

因此、有关此问题的问题:

我是否需要设置 ESM 位(至少在 来自安全库的 ECC 1位中、这是预期的)?

是否知道为什么读取状态寄存器不显示预期的位?

为什么它适用于附加读取?

还有什么其他想法会出错吗?

此致、  

迪尔克

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

    1.是的、如果 CPU 事件导出被启用、ESM 位应该被置位
    2.如果缓存已启用并配置为写入,则写入/读取数据将经历延迟。
    3.请检查高速缓存设置和 MPU 设置(直写、回写)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉、等待回复的时间很长。

    我不得不测试其他一些东西。

    缓存被禁用、存储器设置不可连接、如 SafeTI 库随附的演示项目中所示。

    我现在已将项目拆分为必要的部分以显示问题、并将附加项目。

    该项目或多或少基于 TMS570LC4357 SafeTI 库附带的演示项目。

    在 hL_sys_startup.c 中、仅执行正常启动、我删除了那里的所有 CPU 和互连测试。

    相关器件基于 HL_SYS_main.c

    这里只调用一个测试:它是通常在 SafeTI 库中的 SL_SelfTest_Flash 中提供的 ECC 1位错误测试。

    为了更好地分析:我直接在 HL_SYS_main.c (SelfTest_Flash1)中创建了一个函数。 它基于 SafeTI Lib 的 funciton SL_SelfTest_Falsh、只是所有未使用的#if 分支都已移除、以便更好地查看相关微控制器的已用代码。

    从 SafeTI Lib 添加到代码中的相关行可在 hl_sys_main.c 的第221-225行找到:

    #if 0

      /* ESM 寄存器 hack hack hack hack hack hack 的虚拟读取访问

      *只有在此行中,以下条件才会得到满足*/

      uint32 esmTmp = sl_esmREG->SR1[0];

    #endif

    如果这些线路被(如果为0)禁用、以下条件检查失败、这是因为读取 ESM 状态寄存器不显示预期的位被置位。 此外、在从函数返回并研究调试器中的寄存器内容后、不会显示位设置。

    但是:如果它们在代码中(如果为1)、则一切正常。

    您能解释一下这种行为吗?

    此致、

    迪尔克

    e2e.ti.com/.../6242.SafeTITest.zip

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

    您好 Dirk、

    在选择端口 A 进行读取之前、请启用触发位:

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

    您好!

    好的、这似乎解决了问题。 该序列也与参考手册 SPNU563中给出的测试序列相对应。

    但是、我的示例中提供的代码恰好是 SafeTILib 2.4.0中的代码、因此为了更正、我必须再次修改库代码。 您也应该注意在下一个库版本中进行更正。  

    我想知道的是、SafeTILib 中提供的代码目前无法运行、并且已经在目标上的任何测试中工作过。

    此致、

    迪尔克

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

    感谢您的提醒。 我将要求软件开发审查代码并解决问题。