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.
您好,
在 SPNU499c 参考手册中,FEDACCTRL1寄存器的 EDACEN 位的注释(表5-14)表明:
注:建议在闪存封装中启用 ECC,方法是在这些位中写入1010 在 CPU 中启用 ECC 之前。 如果 CPU 中启用了 ECC,但包装器中未启用 ECC,则 CPU 仍将检查和纠正单位 ECC 错误,并在不可纠正的情况下生成异常中止 主闪存错误。 但是,产生 ESM 事件,捕获故障 将防止 OTP 中的地址以及错误的检测和纠正 |
在该应用程序中,我们根据 spnu499c TRM 第2.2.3.2段启用了辅助控制寄存器位#25,以便为主闪存阵列启用 ACTM ECC。
上述引用的文本是否表明应该在启用辅助控制寄存器的位#25之前通过向其写入0xA 来启用 FEDACCRL1->ECDACEN 位?
感谢你的帮助。
大家好,我们的专家已经不在办公室了。 请期待收到延迟的回复。
你好,查克,
主程序内存受 Cortex-R4 CPU 内实施的 SECDED 电路的保护。 所有 OTP 和收费存储器(第7列气缸组)都受 Flash 包装内专用的 SECDED 逻辑保护。 SECDED 逻辑实现都使用错误纠正代码(ECC)来纠正单位错误,并检测从闪存阵列读取的值中的双位错误。
通过向闪存模块错误纠正控制寄存器1 (FEDACCRL1)的 EDACEN 字段写入0xA,可以启用用于访问 EEPROM 仿真闪存库和 OTP 闪存库的 ECC 保护。
QJ 您好,
我理解您在上面所说的内容,但我无法对其解码以下问题的答案:
上述引用的文本是否表明应该在启用辅助控制寄存器的位#25之前通过向其写入0xA 来启用 FEDACCRL1->ECDACEN 位?
谢谢。
你好,查克,
不能,EEPROM 和 OTP 的 ECC 保护逻辑仅在闪存封装中实现。 设置 ARM ACTLR 寄存器(辅助控制寄存器)的位25是为了在 CPU 中启用 SECDED 逻辑,该逻辑用于主程序闪存(bank0和 bank1)。
QJ 您好,
很抱歉,我已经混淆了 EEEP/OTP (从0xF0000000开始)和主程序闪存(从0x0开始为3MB)。
我要做的是通过模拟坏的主程序闪存生成 ECC 双位错误,在给定地址翻转2位。
请您提供更多见解吗? 我没有使用壁龛,所以需要一个这样做的程序。
非常感谢。
你好,查克,
使用诊断模式7:
请参阅 “F021闪存模块控制器(FMC)”一章中的“ECC 数据修正诊断测试模式:Diag 模式=7”一节。
QJ 您好,
我在使用 FPAR_OVR_bit.DAT_INV_PAR = 0x03执行第5.6.2.6段 ECC 数据修正诊断测试模式:Diag 模式= 7中找到的步骤,该步骤在第5.3.3段综合症表中未定义,因此用于模拟多位无法纠正的闪存 ECC 错误。
结果是,我收到了异常中止而不是未更正的 ESM 错误,该错误应激活 nError 信号针脚。
在这种情况下,应生成什么 ESM 错误?
由于这是一个未校正的 ECC 错误,这是一个严重的 ESM Group2或 Group3不可屏蔽错误,为什么没有断言 nError 信号针脚?
谢谢。
QJ,
读取地址0x20000000处的镜像闪存位置后 ,生成 CPU 异常中止,并捕获了以下数据故障寄存器,这似乎是正确的:
唯一的问题是没有为此双位模拟错误生成 ESM 错误。 中止异常后,所有 ESMSR1,2,3和4寄存器都是0x00000000。
在 ACTLR ARM CPU 寄存器中,已将以下内容配置为将错误传递给 CPU:
无法掩盖此严重错误,原因可能是什么?
对于2位 ECC 错误,数据将中止。 请按照以下步骤执行2位 ECC 错误自检。
0. /*闪存模块 ECC 响应已启用*/
FEDACCTRL1 = 0x000A060AU;
1./*启用诊断模式并选择诊断模式7 */
FDIAGCTRL = 0x00050007U;
[19:16]=0x5: 诊断模式已启用
[2:0]: ECC 数据修正诊断测试模式7
2./*选择 ECC 诊断模式,要损坏两位 ECC */
FPADROVR = 0x00005A03U;
[15:12]=0x5:地址总线奇偶校验已启用
[7:0]=0x3:数据奇偶校验
3./*设置诊断模式的触发器*/
FDIAGCTRL |= 0x01000000U;
4./*从镜像内存映射中读取闪存位置,这将导致数据中止*/
读取=(*(易失性 UINT32 *)(0x20000000U));
5./*禁用诊断模式*/
FDIAGCTRL = 0x000A0007U;
将设置 ESM 3.7,nError 将被关闭,并生成数据中止。
感谢 QJ 的帮助,
仅缺少一件事:在 spnu499c 段5.6.2.6中找到的过程没有提到 必须配置闪存错误检测和修正控制寄存器1 (FEDACCTR1),这样 CPU ECC 闪存错误事件信号将被解除阻止。
添加此解锁指令可以解决问题。
此致!
QJ,
还有一个问题:即使没有执行闪存 ECC 检查测试,该行是否也应该是应用程序的一部分?
FEDACCTRL1 = 0x000A060AU;
如果我离开此线路而未执行闪存 ECC 检查测试,应用程序将崩溃。
如果我不将其与应用程序放在一起,如果发生闪存 ECC 错误,是否仍会向 CPU 报告?
谢谢。
即使未执行闪存 ECC 检查测试,此线路是否也应该是应用程序的一部分?
FEDACCTRL1 = 0x000A060AU;
[/引用]是的。 否则,ECC 错误将不会报告给 ESM 和闪存状态寄存器
[引用 userid="91537" url=~ë/support/icros/arm-based 微处理器组/基于 ARM 的微控制器/f/arm-based 微控制器-forum/1066054/tms570ls3137-enabling-ecce-flash-wraper-vs -On-The-CPU/3969452#3969452"]如果应用程序仍不发生错误,我会报告应用程序错误[如果没有发生,则不会发生错误]如果 CPU 中启用了 ECC,但包装器中未启用 ECC,CPU 仍将检查并纠正单位 ECC 错误,并对主闪存的不可纠正错误生成异常中止。