主题中讨论的其他器件: 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
下面的列表提供了所遇到问题的摘要说明,我们正在寻求您的帮助:
- 将 IAR 链接器生成的二进制代码与 TI 提供的 tms570ls3137_cstartup.s 中的启动代码结合使用
- 使用调试器启动代码时、从未发生过问题。
- 使用 MCU 闪存中相同的二进制代码、断开调试器连接并重新利用电源、每次都将进入 Abort_Handler()异常、该异常会发出"非法内存读取/写入访问"信号。
- 通过“连接到正在运行的程序”,然后停止执行,将显示以下内容:

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

- 调用__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 检查异常?
谢谢!