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:CPU 的定期自检

Guru**** 2589245 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1043957/tms570ls3137-periodic-selftest-of-cpu

器件型号:TMS570LS3137

当主函数运行时、您需要执行 CPU 周期诊断。 我应该设计什么?
1. CPU 需要在自检之前保存 CPU 的状态和寄存器、如何保存、诊断库是否有一个调用接口? 是否有可供参考的实例代码?
2.我不太理解在调用 CPU 自检时、它将生成复位。 程序重新启动、sys_startup.c ->_ c_int00 ()、sys_main-> main ()、那么重新启动、初始化、之前运行中保存的数据是否正常、如何恢复?
请回答以上问题、谢谢。

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

    您好、Xiaohong、

    [引用 userid="465499" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1043957/tms570ls3137-periodic-selftest-of-cpu ]1. CPU 需要在自检之前保存 CPU 的状态和寄存器、如何保存、诊断库是否有一个可调用的接口? 是否有可供参考的实例代码?[/quot]

    TMS570器件具有锁步内核。 第二个内核持续执行与主内核相同的指令、并且每个内核的输出通过内核比较模块(CCM)持续进行比较。  如果两个内核中的一个出现故障、则比较将捕获此故障。 此外、代码执行被延迟2个 CPU 周期以提供时间多样性、并且内核相互翻转和旋转以提供物理多样性。 这一概念经过了深思熟虑、许多认证实体已经审查并已被广泛接受。

    CPU Selftest 是一种破坏性测试、可能需要保留 CPU 内容。  定期执行 CPU 自检将增加应用的复杂性。 如果需要定期 CPU 自检、请咨询您的审核员。 LBIST (CPU 自检和 STC 自检)用于检查逻辑电路中是否存在任何永久性故障。 我的理解是、在启动时运行 LBIST 足以满足大多数应用的需求。  

    SDL 不包含执行 CPU 上下文保存/备份的功能。  

    [引用 userid="465499" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1043957/tms570ls3137-periodic-selftest-of-cpu ]2. 我不太理解在调用 CPU 自检时、它将生成一个复位。 程序重新启动、sys_startup.c ->_ c_int00 ()、sys_main-> main ()、那么重新启动、初始化、之前运行中保存的数据是否正常、如何恢复?

    CPU 复位将在每次测试完成后生成、无论是否存在故障。 复位后、代码从_c_int00 ()开始、并在_c_int00 ()中执行大多数初始化过程。

    如果需要定期 CPU 自检、您需要在 STC 执行 LBIST 之前将 CPU 寄存器复制到 RAM 位置、然后在测试完成后从 RAM 位置读回 CPU 寄存器。 RAM 中的数据大部分时间将受到 ECC 保护、但 ECC 将在 CPU 复位后默认禁用。 这意味着您应该提供一些额外的安全机制、例如针对寄存器数据的 CRC、此 CRC 可在使用存储的数据之前进行验证。

    保留的 CPU 内容应复制回 main()中。

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

    1.无论其他客户是否使用 CPU 和 STC 周期自检功能、我们的产品都需要满足 SIL3;如果没有 CPU 周期自检、仍有其他诊断方法可确保 CPU 正常工作、并符合 SIL3等级认证。
    2. CPU 周期自检功能的实现在 CPU 被复位之前、CPU 的状态是什么、哪些寄存器、数据和状态是指什么状态、要保存到 RAM、那么需要 RAM 的地址? 是否可以有任何 RAM 地址?
    我的理解是、在 CPU 被复位后、包括 RAM 也将被初始化、保存在 RAM 中的 CPU 的状态是否未被初始化?

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

    您好、Xiaohong、

    1.如果系统在没有启动/关断序列和相关 BIST 测试的情况下将长时间运行,并且代码很少使用内存空间或一组 CPU 功能(即 FPU), 由于锁步和 ECC 测试只检查当前正在使用的资源、因此在使用资源之前可能会检测到一些累积故障。 因此、可能需要每个时间间隔的定期 BIST 执行。

    2.如器件 TRM (STC 章)中所述、应在 LBIST 之前备份以下寄存器、并在 BIST 之后恢复:

    • CPU 内核寄存器(所有模式 R0-R15、PC、CPSR)
    • CP15系统控制协处理器寄存器- MPU 控制和配置寄存器、用于使能 ECC 的辅助控制寄存器、故障状态寄存器等
    • CP13协处理器寄存器- FPU 配置寄存器、通用寄存器
    • 硬件断点和观察点寄存器、如 BVR、BSR、WVR、WSR 等

      CPU 复位后、不应调用存储器初始化函数、因此 RAM 的内容将被保留。

    3.不可以,如果不调用 memInit(),RAM 中的数据应该可以。