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

本文分析了在U-Boot环境下进行bootloader升级时遇到的'UncorrectableECCError'错误。详细解释了错误发生的原因,包括坏块跳过导致的写入偏移和擦除区域不足。并提供了通过扩大擦除区域来解决该问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

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文件了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值