关于load bootloader时出现'Uncorrectable ECC Error'的问题

问题描述:

u-boot> nand write 0x10000000 0 ${filesize}

NAND write: device 0 offset 0x0, size 0x1e25c8
Skip bad block 0x00120000
Uncorrectable ECC Error: intr 0x70, addr=0x200000, blk=16,
Uncorrectable ECC Error: intr 0x50, addr=0x200400, blk=16,
NAND write to offset 2025c8 failed -5
1966080 bytes written: ERROR

上图是在本周的工作中遇到了一个问题,在uboot下进行bootloader的升级的时候,系统某区域进行数据擦写的时候一直爆出'Uncorrectable ECC Error'这个错误。

思考:

根据报错提示,出错的地址在0x200000(2M)和0x200400处。这一点很奇怪,为什么呢?

因为执行的这条命令"nand write 0x10000000 0 ${filesize}"中filesize的大小只有1.88MB,它为什么会在超过1.88MB处报错呢?

再看报错信息,其中有一个提示"Skip bad block 0x00120000",也就是说在写入的过程中,跳过了一个坏块,那么写入文件的区域就会向后迁移,那么也就会超过其文件大小(1.88MB)处。

而需要注意的是,在我们执行"nand write 0x10000000 0 ${filesize}"写入指令之前,执行的是"nand erase 0  ${filesize}",即我们只对这个文件大小的位置(1.88MB)进行了擦除,而由于坏块存在我们实际写入的位置却超过了1.88MB的大小,那么当我们对超过1.88MB的区域(没有进行过擦除,可能存在坏块)进行文件写入的时候,由于坏块的存在,导致其出现”uncorrectable ecc error”的错误。

 

PS:经过实际实验,当我对一块从没有擦除过的区域进行文件写入的时候,也会出现同样的uncorrectable ecc error的错误。证实了上述的推导,即由于擦除区域过小,导致写入区域超过擦除区域的时候,由于坏块的影响,出现uncorrectable ecc error的错误。

解决方法: 

综上所述,我们需要扩大擦除的区域,根据项目中的flash map,我们将擦除命令修改成"nand erase 0 0xd00000"。其擦除区域大概有13M的大小,足够升级一个bootloader文件了。 

原创文章 103 获赞 158 访问量 8万+

猜你喜欢

转载自blog.csdn.net/csdnxmj/article/details/103027423
今日推荐