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:在 SRAM 上设置 ACTM ECC 检查后 ABORT_Handler()异常

Guru**** 2529290 points
Other Parts Discussed in Thread: TMS570LS3137, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1001902/tms570ls3137-abort_handler-exception-after-setting-actm-ecc-check-on-sram

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

大家好、

我在使 SRAM ECC 正常工作方面遇到了很多问题、这是因为我有一段时间了。  

我们将 TI MCU TMS570LS3137与 ARM Cortex-R4F 内核配合使用,并且在调用 C main()之前启用了 MCU RAM ECC 偶数组和/或奇数组奇偶校验。 在以下代码中、请注意、如果只有 bit25被启用用于闪存 ROM ECC 检查、则根本没有问题。 问题是 启用了用于 RAM ECC 检查的 Bit26和/或 Bit27。

        ; Enable ACTM ECC (spnu499c TRM para. 2.2.3.2)
        ; DDI0363G TRM para. 4.3.16: c1, Auxiliary control register ACTLR
        ; Configure to enable ECC check on Flash and SRAM

        MRC     p15,#0,r1,c1,c0, #1             ; Read Auxiliary control register
        ORR     r1, r1, #0x0E000000             ; Bit25 is ATCM ECC check enable (main flash array)
                                                ; Bit26 is B0TCM ECC check enable (SRAM even bank)
                                                ; Bit27 is B1TCM ECC check enable (SRAM odd bank)

        MCR     p15,#0,r1,c1,c0, #1             ; Write Auxiliary control register
        nop
        nop
        nop

下面的列表提供了所遇到问题的摘要说明,我们正在寻求您的帮助:

  1. 将 IAR 链接器生成的二进制代码与 TI 提供的 tms570ls3137_cstartup.s 中的启动代码结合使用  
  2. 使用调试器启动代码时、从未发生过问题。
  3. 使用 MCU 闪存中相同的二进制代码、断开调试器连接并重新利用电源、每次都将进入 Abort_Handler()异常、该异常会发出"非法内存读取/写入访问"信号。
  4. 通过“连接到正在运行的程序”,然后停止执行,将显示以下内容:

  1. 数据故障地址 DFAR 和状态 DFSR 寄存器在每次发生时都会显示不同的值、因此我无法控制故障的来源。
  2. 当在到达 main()之前步进代码时,我遇到了以下行为:

  1. 调用__IAR_DATA_init3时,我进入了更深层的级别,并发现当在__IAR_zero_init3中执行绿线时,会输入 Abort_Handler ()异常,该异常是遇到 RAM 奇偶校验错误的信号:

总之,以下是完整的调用序列:

tms570ls3137_cstartup.s (SRAM ECC check enabled here), branch to 
__cmain, calls
__low_level_init, calls
__iar_data_init3, calls
           __iar_zero_init3, executes
                first call to STR.W instruction, no issue
                second call to STR.W instruction, no issue
                third call to STR.W instruction, illegal memory read or write
                      bring up Abort_Handler() exception

您能否提供提示、说明我应该查找什么来防止 RAM ECC 检查异常?

谢谢!

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

    1.在启用 SRAM ECC 之前执行 SRAM PBIST 测试是否出错?

    2. SRAM 是否在启用 SRAM ECC 之前初始化?

    3.您是否执行了 SRAM ECC 自检(1位/2位 ECC 故障注入)? 自检后、应清除错误标志。

    4、SRAM ECC 问题是仅发生在一个器件还是多个器件上?

    5.您是否尝试了由 HAlCoGen 生成的 sys_startup.c?  

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

    对您的问题的回答:

    没有 SRAM PBIST 被执行、尽管这是在 main()之后的代码中安排的、但是从未达到。

    2.嗯,这可能是原因... 您能告诉我如何初始化 SRAM、对 SPN 的引用等吗?

    3、不执行 SRAM ECC 自检。 在哪里可以找到有关其必要性和实用性的信息?

    4、每台设备都有。

    不需要、因为我们不使用任何生成的 C 代码。

    对于分配给 DMA、VIM、N2HET1、DCAN1和 MIBADC1的 RAM、软件在我的 C 代码中输入 main()后会初始化许多 MCU 器件 RAM、因为这些器件正在应用中使用。

    参考 MCU 器件数据表 spns162c 表6-25。 PBIST RAM 分组、是否所有 ESRAM1、ESRAM5、ESRAM6和 ESRAM8都需要硬件初始化?

    通过阅读您的问题,我感觉我需要初始化 SRAM 的这些部分,以便在使用 RAM 之前计算它们的 ECC/奇偶校验,但必须在执行任何用户代码/链接器数据初始化之前完成,也就是在 main()入口点之前完成。 我是对的吗? 如果是这样,你能不能只让我指出我应该去哪里看,以及在 main()之前如何做?

    谢谢你。

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

    您好!

    请查看此应用手册:

    https://www.ti.com/lit/an/spna106d/spna106d.pdf?ts=1621381386178&ref_url=https%253A%252F%252Fwww.google.com%252F

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

    谢谢!

    它按照提供的 MCU 初始化指南中的顺序工作:

    25。使用可编程内置自检(PBIST)控制器启动 CPU RAM 自检、并等待此自检完成并通过(部分2.20)。

    26。使用系统模块硬件初始化机制来初始化 CPU RAM、这样 CPU RAM 的 ECC 区域也被初始化(部分2.21)。

    27、针对 CPU RAM 存储器存取启用 CPU 的单纠错双纠错(SECDED)逻辑(CPU 的 B0TCM 和 B1TCM 接口)(第2.22节)。

    此致、