大家好、我将使用66AK2E05和4K 页 NAND 芯片 Micron MT29F4G08ABBFAH4测试一个定制电路板、其中4K 页、每页256 OOB 字节和256KiB PEB。
为了调整软件、我从 K2E-EVM 源开始执行了以下操作:
U-boot:
- 在配置标题中启用 CONFIG_SYS_NAND_PAGE_4K、而不是 CONFIG_SYS_NAND_PAGE_2K
- 将 args_ubi 环境变量中的2048更改为4096
Linux 内核:
- 注释掉.dts 文件中的所有"ti,cs-*"值,以保留 U-boot 配置的设置,以防新 NAND 的时序太紧
结果是我可以从 U-boot 对 NAND 进行编程、但在 Linux 中、如果我尝试 ubattaching -m 4 (ubifs 分区)、我会得到一个内核错误。 此操作会在从 u-boot 烧录 ubi 映像后执行、并使用 ubiformat 格式形成 MTD 分区:
[96.019096] ubi0:连接 mtd4 [96.026619] ubi0警告:ubi_io_read:从 PEB 读取64个字节时出错-74 (ECC 错误) 0:0:0、只读64个字节、重试 [96.041697] ubi0警告:ubi_io_read: 从 PEB 0:0读取64个字节时出错-74 (ECC 错误)、只读64个字节、重试 [96.0571115] ubi0警告:ubi_io_read:从 PEB 0:0读取64个字节时出错-74 (ECC 错误)、只读64个字节、重试[96.07546] ubi0错误:ubi_io_read: 从 PEB 0:0读取64个字节时出错-74 (ECC 错误)、读取64个字节 [96.081221] CPU:0 PID:574 Comm:ubiattach 被污染:g o 4.19.59-g5f8c1c6121 #1 [96.089853]硬件名称:KeyStone [96.093346]回溯: [ 96.095805][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c) [96.103394] r7:c1004c48 r6:60000013 r5:00000000 r4:c104555c [ 96.109070][ ](show_stack)从[ ](dump_stack+0x90/0xa4) [96.116311][ ](dump_stack)从[ ](ubi_io_read+0x1bc/0x340) [96.123812] r7:c1004c48 r6:00000040 r5:ffffffffb6 r4:db710000 [96.129486][ ](ubi_io_read)、来自[ ](ubi_IO_READ_EC_HDR+0x4c/0x204) [96.137597] R10:00000000 R9:00000040 R8:db7a5d80 r7:00000000 R6:db710000 R5:db711000 [ 96.145444] R4:00000000 [ 96.147984][ ](ubi_io_read_ec_HDR)、来自[ ](ubi_attach+0x1d8/0x1518) [96.156181] r10:db711000 r9:00000000 r8:db7a5d80 r7:db710000 r6:db712000 r5:dc344f80 [96.164028] r4:00000000
此外、尝试读取 NAND 会在每个块中显示 ECC 错误、例如:
root@myboard:~ nanddump -l 0x4000 /dev/mtd4 >/dev/null ECC Failed:64 ECC Corrected:0 Number of BAD Blocks:0 Number of BBT Blocks:4 Block Size 262144、page size 4096、OOB Size 256 dump data started at 0x00000000、Ending at 0x00004000... ECC:8个不可纠正的位翻转(偏移量0x00000000) ECC:8个不可纠正的位翻转(偏移量0x00001000) ECC:8个不可纠正的位翻转(偏移量0x00002000) ECC:8个不可纠正的位翻转(偏移量0x00003000)
此外、U-boot 将 OOB 大小报告为128B、但我认为这并不重要、因为它需要80字节用于 ECC。 我是否需要修改 ECC 布局以考虑更大的 OOB? 这不能对 ubibattach 在 ubibitformat 后崩溃负责、因此 Linux 代码中必须存在错误(也是)。
我怀疑时序可能也需要放松、但我没有找到一种明确的方法来根据 NAND 规格计算.dts (U-boot 和 Linux)中所需的 ns 值。 .dts 中使用的间隔名称与 NAND 规格没有明显的关系、我是否缺少一些有关该主题的应用手册或其他文档?
TI 是否有这款或其他类似 NAND 芯片的经验/指导?
感谢您的任何帮助。