NXP MCU 技术论坛
直播中

王焕锁

7年用户 969经验值
私信 关注
[问答]

关于MPC5674F上的闪存ECC模块的问题求解

上个月,我在您的帮助下实现了闪存 ECC 错误注入代码。

我对附加代码中的奇偶校验生成有疑问。

================================================ ==============================
/* 第2步。程序数据 */
DFLASH_0.MCR.B.PGM = 1; // 选择操作(程序)
*((unsigned int*) DATA_FLASH_addr_0) = 0x00450000; // 首先写入
DFLASH_0.MCR.B.EHV = 1; // 开始程序运行
while(DFLASH_0.MCR.B.DONE == 0){}; // 等待完成
DFLASH_0.MCR.B.EHV = 0; // 操作结束
*((unsigned int*) DATA_FLASH_addr_1) = 0x00000000; // 附加写入
DFLASH_0.MCR.B.EHV = 1; // 开始程序运行
while(DFLASH_0.MCR.B.DONE == 0){}; // 等待完成
DFLASH_0.MCR.B.EHV = 0; // 操作结束
DFLASH_0.MCR.B.PGM = 0; // 取消选择操作

/* step3. 过度编程数据 - 这会产生 ECC 错误 */
DFLASH_0.MCR.B.PGM = 1; // 选择操作(程序)
*((unsigned int*) DATA_FLASH_addr_0) = 0x00580000; // 首先写入
DFLASH_0.MCR.B.EHV = 1; // 开始程序运行
while(DFLASH_0.MCR.B.DONE == 0){}; // 等待完成
DFLASH_0.MCR.B.EHV = 0; // 操作结束
*((unsigned int*) DATA_FLASH_addr_1) = 0x00000000; // 附加写入
DFLASH_0.MCR.B.EHV = 1; // 开始程序运行
while(DFLASH_0.MCR.B.DONE == 0){}; // 等待完成
DFLASH_0.MCR.B.EHV = 0;// 操作结束
DFLASH_0.MCR.B.PGM = 0; //取消选择操作
================================================ ==============================

在第 2 步代码中,当数据存储在闪存中时会生成奇偶校验位。

但是,在步骤 3 代码中,当数据存储在闪存中时,不会生成奇偶校验位。

我已经明白了。

我了解到每次在闪存中写入任何数据时都会生成奇偶校验位。

这样理解错了吗?

是否需要一些程序来重新生成奇偶校验位?

更多回帖

发帖
×
20
完善资料,
赚取积分