问题描述
我有一块带 MT29F2G08ABAGAWP
闪存的 stm32 板,我有一块带 MT29F2G08ABAEAWP
闪存的前一块板,区别在于 OOB,第一个 OOB 是 64 字节,第二个 OOB它是 128 字节,我在计算 LEB 的任何地方都找不到公式,也找不到第二次闪存的 PEB 参数,数据表中有参数:
for MT29F2G08ABAEAWP first:
Page size x8: 2112 bytes (2048 + 64 bytes);
Block size: 64 pages (128K + 4K bytes);
Device size: 2Gb: 2048 blocks.
for MT29F2G08ABAGAWP second,for which I cannot calculate the values:
Page size x8: 2176 bytes (2048 + 128 bytes);
Block size: 64 pages (128K + 8K bytes);
Device size: 2Gb: 2048 blocks.
如果你知道如何从这些参数中计算出 LEB、PEB、子页面大小、最大逻辑擦除块数、最小 I/O 单元大小,请告诉我,谷歌没有给出一个答案。
解决方法
解决方案:
diff -Naur uboot-2017.11_orig/drivers/mtd/nand/nand_base.c uboot-2017.11/drivers/mtd/nand/nand_base.c
--- uboot-2017.11_orig/drivers/mtd/nand/nand_base.c 2021-08-05 17:50:55.136923003 +0300
+++ uboot-2017.11/drivers/mtd/nand/nand_base.c 2021-08-06 14:10:22.395612680 +0300
@@ -3440,7 +3440,7 @@
mtd->oobsize = 448;
break;
case 3:
- mtd->oobsize = 64;
+ mtd->oobsize = 128;
break;
case 4:
mtd->oobsize = 32;
@@ -3467,8 +3467,7 @@
mtd->writesize = 1024 << (extid & 0x03);
extid >>= 2;
/* Calc oobsize */
- mtd->oobsize = (8 << (extid & 0x01)) *
- (mtd->writesize >> 9);
+ mtd->oobsize = 128;
extid >>= 2;
/* Calc blocksize. Blocksize is multiples of 64KiB */
mtd->erasesize = (64 * 1024) << (extid & 0x03);
@@ -3488,7 +3487,7 @@
nand_is_slc(chip) &&
(id_data[5] & 0x7) == 0x6 /* 24nm */ &&
!(id_data[4] & 0x80) /* !BENAND */) {
- mtd->oobsize = 32 * mtd->writesize >> 9;
+ mtd->oobsize = 128;
}
}