我使用的是S32K146。冷启动时,我将 32 位值 0 写入所有 SRAM(以初始化相关的伴随式位)。
我一直认为,如果我读取一个 SRAM 位置,而 ECC 检测到单个比特损坏,那么 ECC 系统会将更正后的值返回给 MCU,并通过写回 SRAM 位置来更正该 SRAM 位置。另一位同事则认为情况并非如此,他表示:“更正后的值会传递给 MCU,但翻转后的位会保留在 SRAM 中,直到被重新写入。”
谁的说法正确?如果是对方,那么我应该从哪里获取更正后的值,然后将其写回SRAM?这是否需要使用ERM单比特错误中断?我可以看到 EARn 寄存器指示了错误的 SRAM 地址,但没有看到 EDRn (?) 寄存器具有正确的值。
总之,我只需要知道如果检测到单比特错误,如何纠正 SRAM 位置。我希望它能通过读取位置信息自动完成。如果真是这样,我就可以有效地忽略单比特纠错,就好像它们从未存在过一样,只出于好奇才使用中断来统计纠错的总数。这也意味着我可以执行“分片读取 SRAM 中的所有数据”作为 CBIT 活动的一部分,从而在发生第二次损坏并可能导致双位不可恢复错误之前,自动快速修复任何单比特错误。
我注意到 S32K1xx 参考手册第 32 节“PRAMC”提到了自动校正 SRAM,但 S32K146 上没有 PRAMC。我注意到第 35.1.3.1 节还提到单比特 ECC 错误会自动纠正,但这指的是 NVM,而不是 SRAM。我在 S32K14x 的参考手册中没有找到任何明确的说明,即读取 SRAM 位置时如果出现单比特错误,将把更正后的值返回给 MCU,并将更正后的值写回 SRAM 位置。是否有这样的参考手册章节?
我注意到 AN12522 rev 0 第 2.3 节提到了检测和反应时间。我拍摄这张照片是为了指示发生的单比特故障(闪电箭头),但该故障要过一段时间才能被检测到(故障检测时间,在第一次读取该位置时),然后才能被纠正(故障反应时间)。目前还不清楚该反应(校正)是否对 MCU “无形地”发生,即自动修复 SRAM 位置(写入)并将修复后的值返回给 MCU(通过数据总线)。
谢谢!
达伦