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:Hercules PBIST 配置

Guru**** 2350610 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/603243/tms570ls3137-hercules-pbist-configuration

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

在提供的 sys_selftest .c (至少由 HalCoGen 生成)中、我对 PBIST 配置有2个问题(都在 pbistSelfCheck 中):

1、其中指定了此代码块;从技术手册中可以看到、整个地址集都是"保留"和只读的。 我认为这是以某种方式配置 PBIST 协处理器、但我需要定义。  

pbistREG->RAMT = 0x00002000U;//设置数据宽度
*(volatile UINT32 *) 0xFFFFFF400U = 0x4C000001U;
*(volatile UINT32 *) 0xFFFFFF440U = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF404U = 0x4C000002U;
*(volatile UINT32 *) 0xFFFFFF444U = 0x00000075U;
*(易失性 UINT32 *) 0xFFFFFF408U = 0x4C000003U;
*(volatile UINT32 *) 0xFFFFFF448U = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF40CU = 0x4C000004U;
*(volatile UINT32 *) 0xFFFFFF44CU = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF410U = 0x4C000005U;
*(volatile UINT32 *) 0xFFFFFF450U = 0x00000075U;
*(volatile UINT32 *) 0xFFFFFF414U = 0x4C000006U;
*(volatile UINT32 *) 0xFFFFFF454U = 0x00000075U;
*(易失性 UINT32 *) 0xFFFFFFE418U = 0x00000000U;
*(volatile UINT32 *) 0xFFFFFF458U = 0x00000001U;

2.这个 PBIST 运行的结果产生 了 pbistREG->FSRF0=1,这是一个 PBIST 故障。 我本来希望这个示例代码能够产生通过的结果。 如果预计失败、如何评估此代码是否正常工作?

谢谢、

Jim

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

    Jim、您好!

    这些寄存器未发布在 TRM 和数据表中。 我将检查我们是否会在下一个版本中将这些信息添加到 TRM 中。

    2.在所选存储器上运行错误的算法将产生错误:FSRF0=1。 FSRF0是只读寄存器、错误代码不会影响 FSRF0中的值。

    此致、

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

    QJ、

    您是否可以向我发送即将推出的 TRM 的片段或详细介绍此代码的任何文档? 我们正在 DO178 (FAA)兼容程序中使用此代码、因此所有代码都必须根据软件要求派生。 我希望此代码能够执行重要的自检功能、但如果我没有任何文档来支持此代码、我必须将其删除。

    谢谢、

    Jim

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

    我们没有发布这些信息的计划、这些信息仅供内部使用。 实际上、您不需要这些寄存器来启用 PBIST 自检。 SAFETTI 库中的 PBIST 自检 API 不使用这些信息。

    SL_SelfTest_PBIST (...)

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ、
    如果我将这些写入的内容定义为 FFFFE400-E458、则处理器不会启动、因此至少需要其中一些写入来运行 PBIST 自检。 您能给我"任何东西"来定义该代码操作吗? 否则、就像我写的那样、如果我没有文档、我将不得不删除所有 PBIST 自检、看起来它正在执行一个重要的函数。

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

    您好、Jim、

    HALCoGen 生成的 pbistSelfCheck()使用自定义算法,该算法将使 PBIST 失败,以确保 PBIST 能够检测并指示内存自检故障。 保留寄存  器(pbistREG->rsvd1[1U]=1U;)用于运行自定义算法。 自定义算法由"pbistREG->rsvd1[1U]=1U"行上方的行定义   ;

    我们不希望客户写入"RSVD"寄存器、因为用户很可能会在自定义算法中出错、并进行器件存储器测试以产生错误结果。  

    您还可以通过简单地根据错误的算法选择错误的存储器来执行 pbist 自检。 也就是说、您可以选择单端口存储器并选择双端口测试算法(基本上不遵循数据表中的 PBIST RAM 分组表)。 我将为您修改代码作为参考。

    此致、

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

    Jim、您好!

    我修改了代码、可以得到预期的误差。

    /* PBIST 的 CPU 控制*/
    // pbistREG->DLR = 0x10U;

    /*自定义始终失败算法,这将不使用 ROM,只需设置失败*/
    /*
    pbistREG->RAMT = 0x00002000U;
    *(volatile UINT32 *) 0xFFFFFF400U = 0x4C000001U;
    *(volatile UINT32 *) 0xFFFFFF440U = 0x00000075U;
    *(volatile UINT32 *) 0xFFFFFF404U = 0x4C000002U;
    *(volatile UINT32 *) 0xFFFFFF444U = 0x00000075U;
    *(易失性 UINT32 *) 0xFFFFFF408U = 0x4C000003U;
    *(volatile UINT32 *) 0xFFFFFF448U = 0x00000075U;
    *(volatile UINT32 *) 0xFFFFFF40CU = 0x4C000004U;
    *(volatile UINT32 *) 0xFFFFFF44CU = 0x00000075U;
    *(volatile UINT32 *) 0xFFFFFF410U = 0x4C000005U;
    *(volatile UINT32 *) 0xFFFFFF450U = 0x00000075U;
    *(volatile UINT32 *) 0xFFFFFF414U = 0x4C000006U;
    *(volatile UINT32 *) 0xFFFFFF454U = 0x00000075U;
    *(易失性 UINT32 *) 0xFFFFFFE418U = 0x00000000U;
    *(volatile UINT32 *) 0xFFFFFF458U = 0x00000001U;
    *
    /* PBIST_RUN */
    // pbistREG->rsvd1[1U]=1U;


    /*选择要测试的所有算法*/
    pbistREG->algo = 0x00000002;//算法4.

    /*选择 RAM 组*/
    pbistREG->RINFOL = 0x1 <<(7-1);//MibSPI1 RAM

    /*选择所有 RAM 组*/
    pbistREG->RINFUU = 0x00000000U;

    /* ROM 内容不会覆盖 RINFox 设置*/
    pbistREG->over = 0x0U;

    /*算法代码从 ROM 加载*/
    pbistREG->ROM = 0x3U;

    /*启动 PBIST */
    pbistREG->DLR = 0x14U;

    代码使用算法#2 (TRIPLE_READ_FAST_READ)来测试 MibSPI1 RAM。 算法#2专为 ROM 设计。

    此致、

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

    感谢 QJ;我必须从我的项目中排除该 pbistSelfCheck 代码、因为我不能有未记录的代码。

    Jim

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

    如 QJ 所述、所述代码用于在 PBIST 中生成故障、以便验证错误通知路径。 了解有关未记录的寄存器的问题并在 DOxxx 类应用程序中使用。 正如 QJ 提到的、通过在单端口或双端口 RAM 块上运行 ROM 算法、或者在 ROM 块上运行单端口或双端口 RAM 算法、可以使用记录的寄存器和基于 ROM 的算法来完成相同的任务。 这两种情况都将产生 PBIST 故障、导致故障、然后可用于验证错误通知路径。 无论如何完成、这是 Hercules 器件功能安全案例中的关键步骤、不应跳过。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    卡盘或 QJ、
    我认为我理解、但如何调用良好内存块上的错误? 我已经在所有使用的 RAM 上运行了一些预设算法、所有测试都通过了。 我想也许我可以在一个闪存块上运行这些 RAM 测试中的一个、但是 pbistREG 接口只指定 RAM 组来执行测试。
    谢谢、
    Jim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    还可以选择存储算法信息的 ROM 块。 您可以选择此块并在其上运行 March13N 算法(与 RAM 一样)。 它将返回一个错误、然后根据需要使用故障通知路径。 您已经注意到、没有选择一个闪存块的选项。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    卡盘、
    我按照建议尝试在 PBIST ROM 块上运行 MARCH13N 测试、新代码会导致调试器分离(如果需要、我可以向您发送一组 IcePick 和 JTAG 错误); 但是、代码将在调试器外部运行、但我无法验证(使用此 Hercules 开发板)代码是否正常运行。 是否有任何技巧、或者我是否必须准备 CPU (写入某些特殊寄存器)才能执行此操作?
    谢谢、
    Jim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jim、
    您能否向我发送您的 PBIST 运行的确切配置/设置、以便我查看一下。 它不应像这样导致调试器断开连接。 它似乎导致了某种类型的设备重置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卡盘、

    我对相关代码取消了 if def-ed、现在它起作用了;希望它不会在以后再次让我感到困扰。 再次感谢您的帮助、

    Jim

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

    如果这给您在评估/审计期间带来了任何麻烦、请发送私人邮件通知我。 我可以加入讨论、也可以查看我是否可以这样做、并提供一些 NDA 材料、其中提供 TRM 中未包含的寄存器文档。