我试图测试的ECC (错误修正代码)在U引导.为此,我想使用U引导在NAND闪存中翻转一点,而不重写CRC。然后,当我重新启动处理器,我希望看到U引导纠正比特使用ECC。
问题是,如何使用U引导将一个新位或字节或页写入内存,而无需编写新的CRC?
发布于 2017-05-29 15:07:30
从没有找到带有a实现的u引导,源代码通常如下所示:
if (strcmp(cmd, "biterr") == 0) {
/* todo */
return 1;
}在这种情况下,要走的路要复杂得多。由于我花了一段时间才发现如何做到这一点,我相信其他人在这里描述手动过程可能会有所帮助。
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检查是否收到位翻转错误消息:
nand read ${ram_addr1} ${sector_addr} ${sector_size}请注意,您可以将环境设置为按原样运行此命令,或替换原始值的${}指令。ram_addr1和ram_addr2可能是任何可用的公羊附件,只要是ram_addr2 - ram_addr1 > sector_size
发布于 2014-07-02 13:05:32
使用nand biterr来模拟偏移量处的位翻转。
例如,第二个块中字节69 0x45中的位3= 0x20000。
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
发布于 2014-08-09 19:36:23
您可以使用nand read.raw和nand write.raw,通过将写入传递给OOB。
https://stackoverflow.com/questions/24517554
复制相似问题