在基于 Arm 的板 (wb45n) 中的 U-boot 中,我手动擦除然后将一个块标记为坏块。
U-Boot> nand 擦除 0x00720000 20000
NAND 擦除:设备 0 偏移量 0x00720000,大小 0x20000
在 0x720000 处擦除——100% 完成。
OK
U-Boot> nand markbad 0x00720000
块 0x00720000 成功标记为坏
U-Boot> nand bad
>
设备 0 坏块:
00720000
我编写软件,可以看到在此过程中跳过了坏块。
NAND写入:设备0偏移0x5e0000,大小0x16c0000
跳过坏块0x00720000
23855104字节写入:OK
软件写入后,我重新启动,坏块就没有了。
U-Boot> nand bad
>
设备 0 坏块:
U-Boot>
似乎它们已经被自动纠正了。如果我在将块标记为坏块之前不擦除这些块,我可以成功编写软件,但我(经常但并非总是)在内核启动期间收到以下错误:(我真的不知道为什么会产生此错误消息,任何欢迎解释)
UBI 错误:scan_peb:PEB 175 中的错误图像序列号 1748114077,预期为 1578922167
擦除计数器标头转储:
magic 0x55424923 version 1 ec 1 vid_hdr_offset 2048 data_offset 4096 image_seq 1748114077 hdr_crc 0x285278f
启动内核...
解压缩 Linux...完成,启动内核。
添加到擦除:PEB 0,EC 0 UBI 错误:ubi_compare_lebs:不支持的闪存 UBI 格式
UBI 错误:ubi_attach_mtd_dev:无法附加 mtd6,错误 -22
UBI 错误:ubi_init:无法附加 mtd6
UBIFS 错误(pid 1):ubifs_mount:无法打开“ubi0:rootfs”,错误 -19
内核恐慌 - 未同步:VFS:无法在未知块(0,0)上挂载 root fs
我想做的是测试主板,看看它在失败之前可以处理多少个坏块。
我标记坏块的方式正确吗?
为什么坏块会消失?
有没有办法标记会持续存在的坏块?
最后一个错误是什么意思?
答案1
https://community.nxp.com/thread/334536#comment-453692
该错误与板子闪烁的一个问题有关,即:
您错误地刷新了新图像 - 您没有删除所有的闪光
您刷新了一个新图像 - 通过仅擦除您写入的擦除块,但不擦除擦除块的其余部分。
我可以想象如果
- 你省略了你的
nand erase
或 - 您在 NAND 上写入了一个带有 N 个标记为坏块的映像,然后随后写入了相同的映像,但在 NAND 上写入了 N-1 个标记为坏块的映像。当前图像结束后,前一个图像的末尾会留下 1 个块,该块不会被覆盖。