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.

[参考译文] CCS/TMS570LC4357:无法为片上4MB 闪存和512KB EEPROM 配置 ECC

Guru**** 2333840 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/593381/ccs-tms570lc4357-unable-to-configure-the-ecc-for-on-chip-4mb-flash-and-512kb-eeprom

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

工具/软件:Code Composer Studio

您好!

任何人可以为我提供有关片上 RAM ECC 配置和 TMS570LC570闪存配置以及异常处理错误信令的信息吗? 在阅读数据表、参考手册和浏览一些论坛之后、我可以理解、不仅 RAMCTRL L2RAMW 模块控制寄存器会更新为 ECC 检测 EN 字段的值为0xA、 但 CP15辅助控制寄存 器中的"ATCM、B1TCM 和 B0TCM ECC 检查"和 CP15 PMNC 寄存器中的"事件启用"位也要置位。 我尝试使用 下面显示的代码片段、但仍然无法感应 ECC 错误。 我了解到片上 RAM 和闪存在 AXI-M L2总线接口上进行访问(与其前代产品 LC3137不同 、它基于 ARM Cortex R4架构、该架构使用 TCM 接口访问 RAM 和闪存、而不是 AXI-M L2总线)。 因此、如果我在这里遇到问题、请帮助我纠正。

;---- 在 RAM 和闪存上启用 ECC -------------------------------------------------------

  .def    CoreEnableRamFlashEcc
  asmfunc

CoreEnableRamFlashEcc

 MRC P15、#0、R1、C9、C12、#0;正在读取辅助辅助辅助寄存器
 ORR R1、R1、#0x00000010
 DMB
 MCR P15、#0、R1、C9、C12、#0;启用 PMNC 中事件的导出
 ISB;在继续之前确保写入
 MRC P15、#0、R1、C1、c0、 第一
 ORR R1、R1、#0x1 <<25;ATCM ECC 检查使能
 ORR R1、R1、#0x1 <<26;B0TCM ECC 检查使能
 ORR R1、R1、#0x1 <<27;B1TCM ECC 检查使能
 DMB
 MCR P15、#0、R1、C1、c0、 第一
 ISB;在继续之前确保写入
 MOV PC、LR

  endasmfunc

;---- 禁用 RAM 和闪存上的 ECC -------------------------------------------------------

     .def     CoreDisableRamFlashEcc
  asmfunc

CoreDisableRamFlashEcc

 MRC P15、#0、R1、C1、c0、 第一
 MVN R0、#0x1 <<25 ;ATCM ECC 检查禁用
 和 R1、R1、R0
 MVN R0、#0x1 <<26 ;B0TCM ECC 检查禁用
 和 R1、R1、R0
 MVN R0、#0x1 <<27 ;B1TCM ECC 检查禁用
 和 R1、R1、R0
 DMB
 MCR P15、#0、R1、C1、c0、 第一
 ISB;在继续之前确保写入
 MRC P15、#0、R1、C9、C12、#1
 MVN R0、#0x00000010;禁用 PNC 中事件的导出
 和 R1、R1、R0
 DMB
 MCR P15、#0、R1、C9、C12、#0
 ISB;在继续之前确保写入
 MOV PC、LR

  endasmfunc

感谢您的快速响应!

谢谢、祝您一切顺利、

Sripad Kulkarni

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

    在 TMS570LC43xx 器件中、默认启用 SRAM 和闪存上的 ECC。 您是否使用由 Halcogen 生成的代码? 您是否看过 SafeTI 诊断库、以了解它们如何实现函数例程的 LC43xx ECC 测试? 使用这两种开发工具应有助于了解如何执行您尝试实施的任务。

    此外、SRAM 和闪存不再位于 TCM 接口上、因为它们现在是 L2存储器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    感谢您让我了解 SafeTI 诊断库。 找到答案。 是的、在浏览数据表和参考手册后、我确实确定 SRAM 和闪存上的 ECC 默认启用、并且不再处于 TCM 上、我们只需在 PMNC 寄存器中导出事件。

    我们将会在任何情况下向您提出建议、让您了解我的进度。

    再次感谢您的快速响应、

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

    我能够成功测试 ECC、我在 SRAM 上启用 ECC 的初始代码片段工作正常(但是、启用 TCM ECC 检查无关紧要、因为默认情况下启用 RAM 的 ECC 检查)、 实际上、我试图通过禁用 ECC、更新 SRAM、然后重新启用 ECC 来破坏 ECC 值、 这不起作用、因为我在其他论坛上遇到了一些讨论、其中说、尽管禁用了 ECC 检查、但控制器仍在不断更新 ECC 值、 因此、正确的方法是使用所需的测试刺激器更新 L2RAMW 注册组中的 DIAG_DATA_TESTVECTOR、ECC 寄存器、然后通过 RAM_TEST 寄存器触发测试。 最后、我能够测试它并看到控制器报告 ESM 组2.3上的故障(默认情况下、该组映射到高优先级中断并路由到 VIM 通道0、一个 FIQ 中断)

    但是、即使在 CPSR 中启用 FIQ 位、我也看不到控制器分支到 FIQ 矢量0x001C。

    我之前使用过以下代码来启用 FIQ 和 IRQ

    BT_EnableInterrupts

    CPSIE IF
    BX LR

    endasmfunc

    我是否知道我在这里遗漏了什么?

    谢谢、祝你一切顺利
    Sripad Kulkarni
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更正为上述帖子。 ESM 组2.7 (L2RAMW -不可纠正的错误类型 B)上报告了故障、而不是组2.3上的故障。 无法获取 FIQ 矢量。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sridap、您好!

    我很抱歉耽误你的时间。 您能否说明您是使用 Halcogen 生成的代码还是编写自己的代码? 如果尚未将 FIQ 中断添加到 sys_interrupts.asm 文件中、则可以将其添加到该文件中。 相关的中断处理程序也在 Halcogen 内定义。

    请注意、由于采用了新的总线结构、LC4357中的闪存和 RAM ECC 错误处理方法有很大不同。 通常、不可纠正的错误通过 EPC 进行路由、这意味着与 ESM 组2通道3所述的错误相同。

    组2通道7与 ESM2.3记录的不可纠正的错误完全不同。 ESM 2.7不可纠正的错误 类型 B 适用于以下错误类型:

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

    感谢您耐心回答我的问题。 我自己编写这些代码、因为我在 HalCoGen 中找不到任何选项来生成 ECC 代码。 是的、我同意你的意见。 ESM 组2.7错误肯定不是不可纠正的错误类型。 如果我不正确、则是通过 L2RAMW 注册库中的 DIAG_DATA_TESTVECTOR ECC reg 进行内存清理生成的。

    现在、我陷入了一个新问题。 因为我启用了 PMCR 寄存器位4中的事件导出位。 在调试期间、我总是会获得一个 ESM 组2.3中断。 如果我没有放置断点并运行代码直至程序循环结束、也不会出现同样的情况。 我非常需要你的帮助。 您能不能就出了什么问题向我提出建议?

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

    这很可能是由于不确定 ECC 的区域发生推测取数据的结果。 为了避免这种情况、您需要对整个闪存执行一次性程序、包括 ECC 并使用填充来填补任何空白。 本主题将在以下主题中进行更详细的讨论: e2e.ti.com/.../372708e2e.ti.com/.../555145

    请注意、LC4357/Rm57器件与 Hercules 系列中所有其他器件之间的几个差异之一是 LC4357/RM57永久启用 ECC、并且不能禁用 ECC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的响应、我尝试使用链接器命令来更新 ECC、但结果正常。 此后没有问题...