首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用U引导改变NAND闪存中的一点

使用U引导改变NAND闪存中的一点
EN

Stack Overflow用户
提问于 2014-07-01 19:06:12
回答 4查看 2.5K关注 0票数 2

我试图测试的ECC (错误修正代码)在U引导.为此,我想使用U引导在NAND闪存中翻转一点,而不重写CRC。然后,当我重新启动处理器,我希望看到U引导纠正比特使用ECC。

问题是,如何使用U引导将一个新位或字节或页写入内存,而无需编写新的CRC?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-29 15:07:30

从没有找到带有a实现的u引导,源代码通常如下所示:

代码语言:javascript
复制
if (strcmp(cmd, "biterr") == 0) {
    /* todo */
    return 1;
}

在这种情况下,要走的路要复杂得多。由于我花了一段时间才发现如何做到这一点,我相信其他人在这里描述手动过程可能会有所帮助。

代码语言:javascript
复制
nand read ${ram_addr1} ${sector_addr} ${sector_size}
nand read.oob ${ram_addr2} ${sector_addr} ${oob_size}
nand erase ${sector_addr} ${sector_size}
nand write ${ram_addr1} ${sector_addr_plus_page_size} ${sector_size_minus_page_size}
cp ${ram_addr2} ${ram_addr1} ${oob_size}
mm ${ram_addr1_plus_biterr_offset}
#modify a single bit of the referred data
nand write.raw ${ram_addr1} ${sector_addr} 1

检查是否收到位翻转错误消息:

代码语言:javascript
复制
nand read ${ram_addr1} ${sector_addr} ${sector_size}

请注意,您可以将环境设置为按原样运行此命令,或替换原始值的${}指令。ram_addr1ram_addr2可能是任何可用的公羊附件,只要是ram_addr2 - ram_addr1 > sector_size

票数 4
EN

Stack Overflow用户

发布于 2014-07-02 13:05:32

使用nand biterr来模拟偏移量处的位翻转。

例如,第二个块中字节69 0x45中的位3= 0x20000。

代码语言:javascript
复制
U-Boot> nand biterr 0x20045 3
Erasing at 0x20000 -- 100% complete.
toggling bit 3 in byte 45 in block 20000 00 ->08
byte offset 0x00020045 toggled bit 3

参考资料:

http://www.infopoort.nl/index.php/Software:U-Boot

票数 2
EN

Stack Overflow用户

发布于 2014-08-09 19:36:23

您可以使用nand read.raw和nand write.raw,通过将写入传递给OOB。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24517554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档