您好!
我目前正在检查 RAM 中 SEU 和 MEU 错误的各种情况下的 CPU 行为。
1) 1)首先、我想提及另一个帖子、我认为其中有一个错误: https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/630389
对于这个帖子最初问题的第三点、答案是在将 RAMCTRL 寄存器的 ECC 检测 EN 字段设置为0x5时、不会禁用 ECC 生成。
在最近执行的测试中、我会说这是错误的。 测试步骤如下:
- 将 ECC_DETK_EN 设置为0xA (启用 ECC)
- 自动初始化内部 RAM 至0 (ECC 代码被更新)
- 在地址0x0800_0000处写入32位值0x4
- 在地址0x0840_0000处读取相应的8位 ECC 值:值为0xEA
- 将 ECC_DETK_EN 设置为0x5 (禁用 ECC)
- 在地址0x0800_0000处写入32位值0x5
- 在地址0x0840_0000处读取相应的8位 ECC 值:值为0xEA
>> ECC 内存读数相同
在 RAM 中启用 ECC 的测试相同:
- 将 ECC_DETK_EN 设置为0xA (启用 ECC)
- 自动初始化内部 RAM 至0 (ECC 代码被更新)
- 在地址0x0800_0000处写入32位值0x4
- 在地址0x0840_0000处读取相应的8位 ECC 值:值为0xEA
- 在地址0x0800_0000处写入32位值0x5
- 在地址0x0840_0000处读取相应的8位 ECC 值:值为0x03
>> ECC 内存读取因 ECC 启用和写入的值不同而有所不同
为避免混淆、我建议将这一点添加到原始帖子中、或使给出的答案无效。
2) 2)根据 TMS570LC4357 TRM 的表8-1、当 cortex-r5f 在低于64位的写入过程中检测到双位读-修改-写(RMW)错误时、L2RAMW 应生成总线错误。
由于第1)点被澄清、我能够在 RAM 中注入双位故障并从内核执行一个16位写入来检查这个行为、并且我注意到以下情况:
- 如果内核 MPU 被禁用(使用 Cortex-R5 TRM 表7-1中记录的默认存储器映射)>>则不会生成异常中断
- 如果内核 MPU 被配置为器件或正常存储器的 RAM 的一个区域启用>>则不会生成异常中断
- 如果内核 MPU 被配置为严格顺序存储器的 RAM 的一个区域启用>>则会产生数据中止并将数据故障记录在 Cortex-R5 DFSR 寄存器中。
- 独立于 MPU 配置、ESM 组3通道3按预期触发。
据我了解、TMS570LC4357 TRM 中记录的"总线错误"与"8.3.1故障>外部故障"一章中记录的 Cortex-R5 TRM "外部故障"相关。 我对这一点是否正确?
在下面的句子"非专用存储到正常类型或器件类型存储器生成异步中止"中、我知道当 MPU 配置为 RAM 区域的正常存储器或器件存储器时、在执行非专用存储时应生成异步中止、 但是、即使在执行16位写入 RAM 后使用 while 循环、也不会生成数据中止。
此行为与文档不一致。 您能否澄清正常和预期行为?
如果这是错误行为、它是否与芯片 B 勘误文档中记录的勘误表"DEVICE #40"相关?
此致、
盖尔