news 2026/4/23 13:57:12

ECC错误

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ECC错误

保护机制

误差校正码Error Correcting Code

ECC可以防止存储在内存中的数据出现错误,提高系统的功能安全性,避免因读取错误的数据而导致错误。ECC的主要影响是在易失性存储器(RAM)中,其中技术的小型化导致更高的位翻转风险

保护数据信息免受单个或多个比特错误的已知技术。

在高可靠和安全的系统中,强烈推荐的内存保护措施之一。

ECC保护算法:

•单错误纠正(SEC:Single-error-correcting)汉明码

•单错误校正-双错误检测(SEC-DED:Single-error-correcting-double-error-detecting)修改的汉明码

•SEC-DED Hsiao代码

所有这些算法都是基于用所谓的校验位扩展信息位的原理,这样接收时的比特错误在一个比特错误的情况下被识别和纠正,或者在两个错误的情况下被检测出来。

所有SPC5X mcu均支持Flash和RAM HW ECC保护机制,不支持屏蔽

建议在所有应用程序中实现ECC错误管理SW流程,特别是对于需要反复擦除和重新编程Flash的Bootloader/OTA/EEPROM仿真开发以及与安全相关的应用程序。

SPC56内存ECC保护

SPC56实现ECC机制的所有存储器,RAM,Code flash和data flash

每个内存都有自己的ECC块,每次写访问时计算奇偶校验位,每次读访问时检查数据有效性,如果需要,会自动进行1位校正

解码结果由ECC模块报告,并在ECSM模块中收集,并在Flash模块中并行收集Flash ECC错误。

RAM ECC实现

SRAM数据在32位的边界上保护,有7个校验位。这意味着在写访问时存储39位,在读访问时检查。

在对8位和16位数据进行写入操作期间,在合并写入数据之前,将检查对32位数据的读取是否存在ECC。

SRAM初始化

有必要在上电或破坏性复位后第一次使用之前初始化RAM,因为要为ECC寄存器设置新值!(主要是通过Startup代码)

内部SRAM的复位状态是随机的,因此数据和校验位可以包含任何数据。最可能的是,第一次读尝试任何地址将产生不可纠正的ECC错误。因此,SRAM必须在上电后初始化。

通常,这意味着整个SRAM被删除或写入任何值,但必须是32位写入,才能完全定义数据单元的ECC代码。否则,较小的写访问将导致读取-修改-写入,并产生另一个ECC错误。

内部SRAM没有寄存器。SRAM ECC的寄存器位于ECSM中。

Flash ECC实现

flash在64位的边界上有8个校验位。

由于闪存的特性,擦除的时候只能从1变成0,每次编程都是整个64位。

用不同的值对同一个word进行重编程,可能导致ECC校验位模式不同,从而导致重编程错误。

每个Flash模块包含状态位,反映每次读访问的ECC检查结果。ECC硬件在出现ECC错误时设置这些位。

ECC错误硬件异常

两种由SPC56 MCU硬件产生的ECC故障通知:ECSM模块中断和内核异常事件

1个位错误自动纠正,透明的应用程序

在1位和2位两种ECC故障情况下都可以产生ECSM模块中断,并进一步区分RAM和Flash

可以为FLASH和SRAM启用错误报告详细信息:启用报告将生成一个中断请求到INTC,如果该INTC请求的优先级为0,则不必处理该请求

ECSM模块生成的所有中断都是可配置的,并且可以由用户在ECR寄存器中屏蔽

ECSM模块

Error correction status module纠错状态模块

ECSM的一部分专门用于收集由存储器和底层总线系统报告的ECC信息

它提供了一组寄存器来存储由状态寄存器ESR发出的最后一次ECC故障的扩展信息。

ECSM模块区分RAM和flash,其中代码和数据闪存合并并作为一个Flash ECC故障发出信号。

代码分析从哪个内存的故障来必须使用FEAR寄存器存储地址,并将其绑定到正确的flash区域。

ECSM中断生成

单比特中断不会产生核心异常,它们可以被启用的ECSM中断捕获。

在指令获取或数据读取期间发生的不可纠正的ECC错误会导致内核异常的产生,因为Z0内核和给定内存目标之间的总线事务错误。

内核异常事件不能被掩盖,应该妥善处理以解决问题。

根据内存访问类型,指令获取或数据获取,以及机器状态寄存器MSR的配置。

异常流程

应该在IVOR2、IVOR3和IVOR1异常向量上放置适当的软件处理程序。

内核将几个不同的异常原因混合到一个向量上,因此软件处理程序必须首先找到中断的原因。

IVOR1意味着系统几乎不可能恢复,系统应该安全终止。

手动触发ECC错误

ECSM_EEGR寄存器用于在ECC内存中强制生成单位和双位数据反转,最值得注意的是用于测试目的的sram,以检查ECC保护。

MEMU

MEMU:Memory Error Management Unit内存错误管理单元

MEMU负责收集和报告与ECC逻辑相关的错误事件:

•系统flash

•外围系统RAM

•code flash

常见问题

常见的导致ECC错误的原因

1、MCU上电或者破坏性reset之后,直接对没有初始化过的SRAM空间进行读访问,或者执行小于32bit/64bit的写操作。

2、在两次擦除之间,向同一个Flash地址写入两次不同的值。(怀疑最大可能是这个原因,需要写入)

3、在Flash program或者Flash erase过程中突然断电或异常终止。

4、电磁辐射

ECC错误的现象以及判断方法

对RAM或者Flash执行读操作后,代码跑飞,MCU进入IVOR2/IVOR1/IVOR3内核异常,或者MCU异常复位。

判断方式:调试时可以在IVORx异常处理入口加断点,查看SPC56 ECSM相关寄存器的值(ESR/FEAR/FEDR/REAR/REDR)或者SPC58 MEMU模块寄存器,或者查看Flash模块寄存器的状态值(MCR/ADR),以及查看内核寄存器的状态值(ESR/DEAR)。具体寄存器的含义,请查看MCU的参考手册(例如SPC560B RM)以及内核的参考手册(例如e200z0RM)。通过查看这些寄存器的值,可以判断是否产生了ECC错误,以及访问什么地址的时候触发了ECC错误。

一般情况下,对SRAM进行重新写入即可以修复SRAM ECC错误。对Flash进行擦除也可以修复ECC错误,或者不再去读内容被破坏的内存,也可以规避掉ECC错误的产生。采用何种方式取决于用户的系统需求。

ECC是Memory的一种保护机制,用来校验内存数据完整性和一致性的安全机制。产生了ECC错误并不代表Flash/RAM内存的物理损坏。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:19:38

数据泄露赃款的洗白链条与安全团队的生死盲区

稳定币凭借低波动、高流通、跨境瞬时到账、匿名性强等特性,早已成为网络犯罪集团洗白数据泄露赃款的“核心工具”。从企业核心数据窃取勒索,到个人信息贩卖变现,黑客的每一笔非法收益,都能通过稳定币的链上流转快速“漂白”&#…

作者头像 李华
网站建设 2026/4/23 10:19:38

从“被动防御”到“主动免疫”:安全设计的核心原则与实践

在数字化浪潮席卷全球的今天,网络攻击的频率、强度和隐蔽性正以指数级增长。传统的“防火墙杀毒软件”被动防御模式,早已难以应对APT攻击、零日漏洞利用、供应链投毒等新型威胁。当攻击从“偶然入侵”变成“常态化渗透”,安全设计的理念必须从…

作者头像 李华
网站建设 2026/4/23 10:19:38

亲测好用10个AI论文网站,专科生毕业论文轻松搞定!

亲测好用10个AI论文网站,专科生毕业论文轻松搞定! AI 工具如何助力论文写作? 在当今的学术环境中,AI 工具正逐渐成为学生和研究者的重要助手。对于专科生而言,撰写一篇符合要求的毕业论文往往是一项挑战。而 AI 降重工…

作者头像 李华
网站建设 2026/4/23 11:53:28

自动驾驶十年演进

下面给你一条从工程现实、系统能力与规模化落地视角出发的 「自动驾驶十年演进路线(2025–2035)」。 我会刻意避开“L5 神话”,聚焦哪些能力真的会发生跃迁、为什么、以及工程上意味着什么。一、核心判断(一句话)未来十…

作者头像 李华
网站建设 2026/4/23 11:53:25

通用十年演进母模型

一个**“通用十年演进母模型”**,可以套在任何复杂技术系统上。十年演进的通用结构(适用于机器人 / 自动驾驶 / AI / 平台)所有复杂系统的十年演进,本质只有一条主线: 从“能用” → “可控” → “自治”。一、三阶段…

作者头像 李华
网站建设 2026/4/23 9:50:15

电力线温度在线监测装置设计与实现(有完整资料)

资料查找方式: 特纳斯电子(电子校园网):搜索下面编号即可 编号: T4472405M 设计简介: 本设计是基于STM32的电力线温度在线监测装置,主要实现以下功能: 1.通过温度传感器检测电线…

作者头像 李华