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:澄清推测读取期间对 AXI 不可纠正的 ECC 错误的响应?

Guru**** 2460850 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/1177830/tms570lc4357-clarify-response-to-axi-uncorrectable-ecc-errors-during-speculative-reads

器件型号:TMS570LC4357

您好!

我希望在解释 TMS570LC4357 TRM (SPNU563A)的"SECDED 初始化"部分时能有所帮助、该部分涉及到对 AXI 闪存的推测访问:

我对中止部分感到困惑、 因为如果我理解正确、AXI ECC 错误不会在 Cortex-R5F 上导致中止、而仅会导致 CPU 总线事件 (这在 本论坛博文中也进行了讨论)。 我知道这与其他具有 TCM 的 TMS570型号(并且它们自己的 TRMS 中的文本非常相似)形成对比。 但对于 TMS570LC4357、我的理解是、不可纠正的 AXI ECC 错误的影响仅是 CPU 总线事件、进而导致 ESM 组2.3事件和 NMI (前提是 CPU 事件总线和 FIQ 已启用)以及 nERROR 置位。 我是否正确理解了这一点、上面的这一部分文本是否不适用于 TMS570LC4357?

此外、由于我们的引导加载方案、我们很难保证闪存中不存在任何包含不可纠正 ECC 错误的未编程区域。 但是、我们至少可以保证当前正在执行的映像在两端填充到缓存边界、并且没有任何"漏洞"(例如、我们可以保证如果[0x40000、0x50000)是使用的闪存范围、则该范围内的所有闪存字都将使用有效 ECC 进行编程、 但超出该范围的闪存可能会被擦除、并且具有无效的 ECC)。 我想知道这是否足以防止推测读取到具有无效 ECC 的未编程区域、或者我们是否仍然容易受到此连续范围之外推测读取的影响、即使我们从未在程序中引用这些地址中的任何地址?

总之、我的具体问题是:

  1. 如果 CPU 事件总线和 NMFI FIQ (CPSR.F = 0)被启用、带有不可纠正 ECC 错误的推测 AXI 闪存读取对 TMS570LC4357有何影响? 是 ESM 组2.3、nERROR 置为有效、还是 NMI FIQ、而不管推测读取的数据是否被"使用"(与上面的 TRM 文本相反)?
  2. 在 TMS570LC437上、这种影响是否同时适用于推测数据读取和推测指令提取?
  3. 如果我们使用的闪存范围不包含任何未编程的"孔洞"、但在闪存使用区域之前和之后存在具有不可纠正 ECC 错误的未编程闪存、我们是否仍然容易受到  对这些未编程区域的推测读取?
  4. 是否有任何方法可以预测或限制这些推测读取的发生位置、或者我们是否需要将它们视为可以 真正访问闪存中任何位置的不可预测的内容?  除了使用 有效 ECC 对整个4MB 闪存范围的每个字进行编程之外、还有其他方法可以保证这不会成为问题吗? (例如、使用 MPU 规则?)

非常感谢您的澄清!

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

    尊敬的 Andy:

    我有您的问题、并为您检查答案。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="546298" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1177830/tms570lc4357-clarify-response-to-axi-uncorrectable-ecc-errors-during-speculative-reads ]\n 假设启用了 CPU 事件总线和 NMFI FIQ (CPSR.F = 0)、在 TMS570LC4357上读取带有不可纠正 ECC 错误的推测 AXI 闪存会产生什么影响? 是 ESM 组2.3、nERROR 置位和 NMI FIQ、而不管推测读取的数据是否被"使用"(与上面的 TRM 文本相反)?[/QUERPLET]

    你是对的。  闪存或 SRAM 上的双位 ECC 错误不会生成中止、但 ESM 2.3将被置位、nERROR 将被置位、并且生成 FIQ 中断(ESM 高电平)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="546298" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1177830/tms570lc4357-clarify-response-to-axi-uncorrectable-ecc-errors-during-speculative-reads "]在 TMS570LC437上、这种影响是否同时适用于推测数据读取和推测指令提取?[/quot]

    是的、确实如此。 数据读取和指令都有推测取指令。 推测数据的地址可以是存储器范围中的任何位置。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="546298" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1177830/tms570lc4357-clarify-response-to-axi-uncorrectable-ecc-errors-during-speculative-reads "]如果我们使用的闪存范围不包含任何未编程的"孔洞"、但在闪存使用区域之前和之后存在具有不可纠正 ECC 错误的未编程闪存、我们是否仍然容易受到  对这些未编程区域进行推测读取的影响?

    是的、它可以在任何地方运行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="546298" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1177830/tms570lc4357-clarify-response-to-axi-uncorrectable-ecc-errors-during-speculative-reads ]是否有任何方法可以预测或限制这些推测性读取的发生位置、或者我们是否需要将它们视为无法预测的内容 、这些内容可以真正访问闪存中的任何位置?  除了使用 有效 ECC 对整个4MB 闪存范围的每个字进行编程之外、还有其他方法可以保证这不会成为问题吗? (例如、使用 MPU 规则?)

    MPU 设置不影响推测地址的生成。

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

    非常感谢您的快速回答!

    我很好奇为什么在 Cortex-R5 MPU 中将未使用的闪存区域配置为器件或严格顺序存储器、加上从不执行就不足以抑制推测数据读取/指令提取到这些范围?

    ARMv7-A/R TRM (DDI 0406C.d)的 A3.5.1节指出:"为了确保系统行为正确、器件和严格排序存储器的访问规则比普通存储器的访问规则更严格、因此: 不能以推测的方式执行读取和写入访问。"

    同一 TRM 的 B5.2节指出:"如果 XN 位、即从不执行位、设置为1。。。 执行不能访问该区域以从推测角度获取指令.... 在 ARMv7中、所有包含读取敏感外设的存储器区域都必须标记为 XN、以避免推测取指令访问这些位置。" 似乎可以将可能包含 ECC 错误的闪存存储器视为这些读取敏感型外设之一?

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

    请参阅我的有关 MPU 正常/器件和严格排序模式的常见问题解答:

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1159114/faq-tms570lc4357-what-are-the-differences-among-the-memory-attributes-memory-types-and-cache-policy-in-mpu-settings/4357983?tisearch=e2e-sitesearch&keymatch=NOrmal%2520AND%2520device%2520AND%2520strongly%2520ordered#4357983

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

    感谢您的参考! 我想它不包括我上面提到的 ARM TRM 的推测访问属性,不过,这是否仍然是避免推测读取带有无效 ECC 的闪存位置的方法?

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

    尊敬的 Andy:

    MPU 设置中的 MEMORY 属性(正常、器件和严格排序)不会影响推测地址。  

    推测指令预取将始终出现在应用程序定义的存储器中。 推测数据预取可能发生在应用程序定义的存储器之外。 用户应在应用程序中定义所有可访问的存储器、以避免出现不必要的行为。 推测指令预取仅适用于"正常"存储器类型、但推测数据预取可能位于正常、器件和严格排序的存储器区域。

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

     当指令预取超过定义的应用程序代码的末尾时、推测指令预取可能发生在应用程序存储器范围之外。