上个月,我在您的帮助下实现了闪存 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 代码中,当数据存储在闪存中时,不会生成奇偶校验位。
我已经明白了。
我了解到每次在闪存中写入任何数据时都会生成奇偶校验位。
这样理解错了吗?
是否需要一些程序来重新生成奇偶校验位?