主控芯片: F1C200s
SPI NAND: GD5F1QG4UAY1G
SPI SPEED: 50M Hz
&spi0 {
status = "okay";
spi-nand@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "spi-nand";
reg = <0>;
spi-max-frequency = <50000000>;
status = "okay";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "spinand";
reg = <0x000000 0x7800000>;
};
};
};
};
擦除, 三秒完成:
# date;flash_eraseall /dev/mtd0;date;
Thu Jan 1 00:00:49 UTC 1970
Erasing 128 Kibyte @ 3ba0000 - 49% complete.
Skipping bad block at 0x03bc0000
Erasing 128 Kibyte @ 5fe0000 - 79% complete.
Skipping bad block at 0x06000000
Erasing 128 Kibyte @ 7800000 - 100% complete.
Thu Jan 1 00:00:52 UTC 1970
#
读速度约 2.2M字节/秒, 约18Mbps
# date;dd if=/dev/mtd0 of=/dev/null bs=1M count=10;date;
Thu Jan 1 00:01:41 UTC 1970
10+0 records in
10+0 records out
Thu Jan 1 00:01:45 UTC 1970
#
# date;dd if=/dev/mtd0 of=/dev/null bs=1M count=10;date;
Thu Jan 1 00:01:58 UTC 1970
10+0 records in
10+0 records out
Thu Jan 1 00:02:02 UTC 1970
#
# date;dd if=/dev/mtd0 of=/dev/null bs=1M count=20;date;
Thu Jan 1 00:02:14 UTC 1970
20+0 records in
20+0 records out
Thu Jan 1 00:02:23 UTC 1970
#
#
# date;dd if=/dev/mtd0 of=/dev/null bs=1M count=100;date;
Thu Jan 1 00:02:41 UTC 1970
100+0 records in
100+0 records out
Thu Jan 1 00:03:25 UTC 1970
写速度, 36秒写了59M字节, 约1.6M字节/秒, 合 13Mbps
# date;dd if=/dev/zero of=/dev/mtd0 bs=1M count=59;date;
Thu Jan 1 00:14:56 UTC 1970
59+0 records in
59+0 records out
Thu Jan 1 00:15:32 UTC 1970
离线
# date;flash_eraseall /dev/mtd0;date;
Thu Jan 1 00:26:51 UTC 1970
Erasing 128 Kibyte @ 3ba0000 - 49% complete.
Skipping bad block at 0x03bc0000
Erasing 128 Kibyte @ 5fe0000 - 79% complete.
Skipping bad block at 0x06000000
Erasing 128 Kibyte @ 7800000 - 100% complete.
Thu Jan 1 00:26:54 UTC 1970
# dd if=/dev/zero of=/dev/mtd0 bs=1M count=1 seek=59;
dd: error writing '/dev/mtd0': Input/output error
1+0 records in
0+0 records out
#
# dd if=/dev/zero of=/dev/mtd0 bs=1M count=1 seek=96
dd: error writing '/dev/mtd0': Input/output error
1+0 records in
0+0 records out
#
擦除失败的block, dd一样会出错.
# dd if=/dev/zero of=/dev/mtd0 bs=128K seek=478
dd: error writing '/dev/mtd0': Input/output error
1+0 records in
0+0 records out
#
# dd if=/dev/zero of=/dev/mtd0 bs=128K seek=768
dd: error writing '/dev/mtd0': Input/output error
1+0 records in
0+0 records out
第478, 768两个block出错了.
离线
Program/Erase/Read Speed
- Page Program time: 400us typical
- Block Erase time: 3ms typical
- Page read time: 80us maximum(w/I ECC)
这是GD5F1GQ4XBXIG 手册的速度,
折算下来
整片擦除应该是: 3ms * 1024 = 3.072s
整片读 80us * 1024 * 64 = 5242880us = 5.242880s
整片写: 400us * 1024 * 64 = 26214400us = 26.214400s
应该靠近这个速度才对。
离线
感谢楼上的兄弟提醒, 我继续跟踪一下.
# nandtest -o 0x03bc0000 -l 0x40000 /dev/mtd0
ECC corrections: 0
ECC failures : 0
Bad blocks : 2
BBT blocks : 0
Bad block at 0x03bc0000
03be0000: checking...of 4)...
Finished pass 1 successfully
#
# nandtest -m -o 0x06000000 -l 0x40000 /dev/mtd0
ECC corrections: 0
ECC failures : 0
Bad blocks : 2
BBT blocks : 0
Bad block at 0x06000000
06020000: checking...of 4)...
Finished pass 1 successfully
#
linux 下面的nandtest整片nand flash 扫描要 10分钟左右, 只扫两个坏块还是挺快的。
离线
带oob读出一个block数据: nanddump -s 0x06000000 -l 0x20000 -o -f /opt/1.bin /dev/mtd0
# nanddump -s 0x06000000 -l 0x20000 -o -f /opt/1.bin /dev/mtd0
ECC failed: 0
ECC corrected: 0
Number of bad blocks: 2
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x06000000 and ending at 0x06020000...
# ls -l /opt/
total 132
-rw-r--r-- 1 root root 135168 Jan 1 01:13 1.bin
#
算了一下, 一个block包括oob区:
(2048+64)*64 = 135168
应该是 135168 字节!
离线
做一个测试啊, 把 0x06000000 这个坏的分区复制到 0x06020000 / 0x06040000 , 看看会发生什么事情
导出这个坏的block到y.bin:
nanddump -o --bb=dumpbad -f /opt/y.bin -s 0x06000000 -l 0x800 /dev/mtd0
发现数据(包括64byte oob)都是 0:
# hexdump -v /op/y.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
0000020 0000 0000 0000 0000 0000 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000
0000050 0000 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
0000070 0000 0000 0000 0000 0000 0000 0000 0000
0000080 0000 0000 0000 0000 0000 0000 0000 0000
0000090 0000 0000 0000 0000 0000 0000 0000 0000
00000a0 0000 0000 0000 0000 0000 0000 0000 0000
00000b0 0000 0000 0000 0000 0000 0000 0000 0000
00000c0 0000 0000 0000 0000 0000 0000 0000 0000
00000d0 0000 0000 0000 0000 0000 0000 0000 0000
00000e0 0000 0000 0000 0000 0000 0000 0000 0000
00000f0 0000 0000 0000 0000 0000 0000 0000 0000
0000100 0000 0000 0000 0000 0000 0000 0000 0000
0000110 0000 0000 0000 0000 0000 0000 0000 0000
0000120 0000 0000 0000 0000 0000 0000 0000 0000
0000130 0000 0000 0000 0000 0000 0000 0000 0000
0000140 0000 0000 0000 0000 0000 0000 0000 0000
0000150 0000 0000 0000 0000 0000 0000 0000 0000
0000160 0000 0000 0000 0000 0000 0000 0000 0000
0000170 0000 0000 0000 0000 0000 0000 0000 0000
0000180 0000 0000 0000 0000 0000 0000 0000 0000
0000190 0000 0000 0000 0000 0000 0000 0000 0000
00001a0 0000 0000 0000 0000 0000 0000 0000 0000
00001b0 0000 0000 0000 0000 0000 0000 0000 0000
00001c0 0000 0000 0000 0000 0000 0000 0000 0000
00001d0 0000 0000 0000 0000 0000 0000 0000 0000
00001e0 0000 0000 0000 0000 0000 0000 0000 0000
00001f0 0000 0000 0000 0000 0000 0000 0000 0000
0000200 0000 0000 0000 0000 0000 0000 0000 0000
0000210 0000 0000 0000 0000 0000 0000 0000 0000
0000220 0000 0000 0000 0000 0000 0000 0000 0000
0000230 0000 0000 0000 0000 0000 0000 0000 0000
0000240 0000 0000 0000 0000 0000 0000 0000 0000
0000250 0000 0000 0000 0000 0000 0000 0000 0000
0000260 0000 0000 0000 0000 0000 0000 0000 0000
0000270 0000 0000 0000 0000 0000 0000 0000 0000
0000280 0000 0000 0000 0000 0000 0000 0000 0000
0000290 0000 0000 0000 0000 0000 0000 0000 0000
00002a0 0000 0000 0000 0000 0000 0000 0000 0000
00002b0 0000 0000 0000 0000 0000 0000 0000 0000
00002c0 0000 0000 0000 0000 0000 0000 0000 0000
00002d0 0000 0000 0000 0000 0000 0000 0000 0000
00002e0 0000 0000 0000 0000 0000 0000 0000 0000
00002f0 0000 0000 0000 0000 0000 0000 0000 0000
0000300 0000 0000 0000 0000 0000 0000 0000 0000
0000310 0000 0000 0000 0000 0000 0000 0000 0000
0000320 0000 0000 0000 0000 0000 0000 0000 0000
0000330 0000 0000 0000 0000 0000 0000 0000 0000
0000340 0000 0000 0000 0000 0000 0000 0000 0000
0000350 0000 0000 0000 0000 0000 0000 0000 0000
0000360 0000 0000 0000 0000 0000 0000 0000 0000
0000370 0000 0000 0000 0000 0000 0000 0000 0000
0000380 0000 0000 0000 0000 0000 0000 0000 0000
0000390 0000 0000 0000 0000 0000 0000 0000 0000
00003a0 0000 0000 0000 0000 0000 0000 0000 0000
00003b0 0000 0000 0000 0000 0000 0000 0000 0000
00003c0 0000 0000 0000 0000 0000 0000 0000 0000
00003d0 0000 0000 0000 0000 0000 0000 0000 0000
00003e0 0000 0000 0000 0000 0000 0000 0000 0000
00003f0 0000 0000 0000 0000 0000 0000 0000 0000
0000400 0000 0000 0000 0000 0000 0000 0000 0000
0000410 0000 0000 0000 0000 0000 0000 0000 0000
0000420 0000 0000 0000 0000 0000 0000 0000 0000
0000430 0000 0000 0000 0000 0000 0000 0000 0000
0000440 0000 0000 0000 0000 0000 0000 0000 0000
0000450 0000 0000 0000 0000 0000 0000 0000 0000
0000460 0000 0000 0000 0000 0000 0000 0000 0000
0000470 0000 0000 0000 0000 0000 0000 0000 0000
0000480 0000 0000 0000 0000 0000 0000 0000 0000
0000490 0000 0000 0000 0000 0000 0000 0000 0000
00004a0 0000 0000 0000 0000 0000 0000 0000 0000
00004b0 0000 0000 0000 0000 0000 0000 0000 0000
00004c0 0000 0000 0000 0000 0000 0000 0000 0000
00004d0 0000 0000 0000 0000 0000 0000 0000 0000
00004e0 0000 0000 0000 0000 0000 0000 0000 0000
00004f0 0000 0000 0000 0000 0000 0000 0000 0000
0000500 0000 0000 0000 0000 0000 0000 0000 0000
0000510 0000 0000 0000 0000 0000 0000 0000 0000
0000520 0000 0000 0000 0000 0000 0000 0000 0000
0000530 0000 0000 0000 0000 0000 0000 0000 0000
0000540 0000 0000 0000 0000 0000 0000 0000 0000
0000550 0000 0000 0000 0000 0000 0000 0000 0000
0000560 0000 0000 0000 0000 0000 0000 0000 0000
0000570 0000 0000 0000 0000 0000 0000 0000 0000
0000580 0000 0000 0000 0000 0000 0000 0000 0000
0000590 0000 0000 0000 0000 0000 0000 0000 0000
00005a0 0000 0000 0000 0000 0000 0000 0000 0000
00005b0 0000 0000 0000 0000 0000 0000 0000 0000
00005c0 0000 0000 0000 0000 0000 0000 0000 0000
00005d0 0000 0000 0000 0000 0000 0000 0000 0000
00005e0 0000 0000 0000 0000 0000 0000 0000 0000
00005f0 0000 0000 0000 0000 0000 0000 0000 0000
0000600 0000 0000 0000 0000 0000 0000 0000 0000
0000610 0000 0000 0000 0000 0000 0000 0000 0000
0000620 0000 0000 0000 0000 0000 0000 0000 0000
0000630 0000 0000 0000 0000 0000 0000 0000 0000
0000640 0000 0000 0000 0000 0000 0000 0000 0000
0000650 0000 0000 0000 0000 0000 0000 0000 0000
0000660 0000 0000 0000 0000 0000 0000 0000 0000
0000670 0000 0000 0000 0000 0000 0000 0000 0000
0000680 0000 0000 0000 0000 0000 0000 0000 0000
0000690 0000 0000 0000 0000 0000 0000 0000 0000
00006a0 0000 0000 0000 0000 0000 0000 0000 0000
00006b0 0000 0000 0000 0000 0000 0000 0000 0000
00006c0 0000 0000 0000 0000 0000 0000 0000 0000
00006d0 0000 0000 0000 0000 0000 0000 0000 0000
00006e0 0000 0000 0000 0000 0000 0000 0000 0000
00006f0 0000 0000 0000 0000 0000 0000 0000 0000
0000700 0000 0000 0000 0000 0000 0000 0000 0000
0000710 0000 0000 0000 0000 0000 0000 0000 0000
0000720 0000 0000 0000 0000 0000 0000 0000 0000
0000730 0000 0000 0000 0000 0000 0000 0000 0000
0000740 0000 0000 0000 0000 0000 0000 0000 0000
0000750 0000 0000 0000 0000 0000 0000 0000 0000
0000760 0000 0000 0000 0000 0000 0000 0000 0000
0000770 0000 0000 0000 0000 0000 0000 0000 0000
0000780 0000 0000 0000 0000 0000 0000 0000 0000
0000790 0000 0000 0000 0000 0000 0000 0000 0000
00007a0 0000 0000 0000 0000 0000 0000 0000 0000
00007b0 0000 0000 0000 0000 0000 0000 0000 0000
00007c0 0000 0000 0000 0000 0000 0000 0000 0000
00007d0 0000 0000 0000 0000 0000 0000 0000 0000
00007e0 0000 0000 0000 0000 0000 0000 0000 0000
00007f0 0000 0000 0000 0000 0000 0000 0000 0000
-------------
0000800 0000 0000 0000 0000 0000 0000 0000 0000
0000810 0000 0000 0000 0000 0000 0000 0000 0000
0000820 0000 0000 0000 0000 0000 0000 0000 0000
0000830 0000 0000 0000 0000 0000 0000 0000 0000
然后把带oob的数据写到 0x06020000 / 0x06040000
nandwrite -o -s 0x06020000 /dev/mtd0 /opt/y.bin
nandwrite -o -s 0x06040000 /dev/mtd0 /opt/y.bin
重启后, 果然多了两个坏block:
# nanddump -o --bb=dumpbad -f /opt/y.bin -s 0x06000000 -l 0x800 /dev/mtd0
ECC failed: 0
ECC corrected: 0
Number of bad blocks: 4
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x06000000 and ending at 0x06000800...
ECC: 1 uncorrectable bitflip(s) at offset 0x06000000
没错, 就是他们:
# flash_eraseall /dev/mtd0
Erasing 128 Kibyte @ 3ba0000 - 49% complete.
Skipping bad block at 0x03bc0000
Erasing 128 Kibyte @ 5fe0000 - 79% complete.
Skipping bad block at 0x06000000
Skipping bad block at 0x06020000
Skipping bad block at 0x06040000
Erasing 128 Kibyte @ 7800000 - 100% complete.
离线
擦除 & 编程这个 nand:
flash_eraseall /dev/mtd0
flashcp /mnt/tfcard/devicetree.dtb /dev/mtd0
然后读出带oob的第一个page数据:
# nanddump -o --bb=dumpbad -f /opt/y2.bin -s 0x00000000 -l 0x800 /dev/mtd0
ECC failed: 2
ECC corrected: 0
Number of bad blocks: 5
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x00000000 and ending at 0x00000800...
#
# hexdump /opt/y2.bin -v
0000000 0dd0 edfe 0000 5739 0000 3800 0000 6035
0000010 0000 2800 0000 1100 0000 1000 0000 0000
0000020 0000 f703 0000 2835 0000 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0100 0000 0000
0000040 0000 0300 0000 0400 0000 0000 0000 0100
0000050 0000 0300 0000 0400 0000 0f00 0000 0100
0000060 0000 0300 0000 0400 0000 1b00 0000 0100
0000070 0000 0300 0000 1200 0000 2c00 6957 6f64
0000080 6172 4d20 6e61 6f67 6950 5220 0033 0000
0000090 0000 0300 0000 3000 0000 3200 6c61 776c
00000a0 6e69 656e 2c72 7573 696e 2d76 3166 3263
00000b0 3030 0073 6c61 776c 6e69 656e 2c72 7573
00000c0 696e 2d76 3166 3163 3030 0073 0000 0100
00000d0 6861 6963 352d 0076 0000 0300 0000 1000
00000e0 0000 3200 6572 7567 616c 6f74 2d72 6966
00000f0 6578 0064 0000 0300 0000 0800 0000 3d00
0000100 6861 6963 352d 0076 0000 0300 0000 0400
0000110 0000 4c00 4c00 404b 0000 0300 0000 0400
0000120 0000 6400 4c00 404b 0000 0300 0000 0000
0000130 0000 7c00 0000 0300 0000 0000 0000 8e00
0000140 0000 0300 0000 1000 0000 a100 0000 0200
0000150 0000 0100 0000 0800 0000 0000 0000 0300
0000160 0000 0900 0000 a600 6964 6173 6c62 6465
0000170 0000 0000 0000 0200 0000 0100 7375 3062
0000180 762d 7562 0073 0000 0000 0300 0000 1000
0000190 0000 3200 6572 7567 616c 6f74 2d72 6966
00001a0 6578 0064 0000 0300 0000 0a00 0000 3d00
00001b0 7375 3062 762d 7562 0073 0000 0000 0300
00001c0 0000 0400 0000 4c00 4c00 404b 0000 0300
00001d0 0000 0400 0000 6400 4c00 404b 0000 0300
00001e0 0000 0000 0000 8e00 0000 0300 0000 1000
00001f0 0000 a100 0000 0200 0000 0100 0000 0900
0000200 0000 0000 0000 0300 0000 0900 0000 a600
0000210 6964 6173 6c62 6465 0000 0000 0000 0200
0000220 0000 0100 7375 3162 762d 7562 0073 0000
0000230 0000 0300 0000 1000 0000 3200 6572 7567
0000240 616c 6f74 2d72 6966 6578 0064 0000 0300
0000250 0000 0a00 0000 3d00 7375 3162 762d 7562
0000260 0073 0000 0000 0300 0000 0400 0000 4c00
0000270 4c00 404b 0000 0300 0000 0400 0000 6400
0000280 4c00 404b 0000 0300 0000 0000 0000 7c00
0000290 0000 0300 0000 0000 0000 8e00 0000 0300
00002a0 0000 1000 0000 a100 0000 0200 0000 0700
00002b0 0000 0600 0000 0000 0000 0300 0000 0900
00002c0 0000 a600 6964 6173 6c62 6465 0000 0000
00002d0 0000 0200 0000 0100 7375 3262 762d 7562
00002e0 0073 0000 0000 0300 0000 1000 0000 3200
00002f0 6572 7567 616c 6f74 2d72 6966 6578 0064
0000300 0000 0300 0000 0a00 0000 3d00 7375 3262
0000310 762d 7562 0073 0000 0000 0300 0000 0400
0000320 0000 4c00 4c00 404b 0000 0300 0000 0400
0000330 0000 6400 4c00 404b 0000 0300 0000 0000
0000340 0000 7c00 0000 0300 0000 0000 0000 8e00
0000350 0000 0300 0000 1000 0000 a100 0000 0200
0000360 0000 0700 0000 0300 0000 0000 0000 0300
0000370 0000 0900 0000 a600 6964 6173 6c62 6465
0000380 0000 0000 0000 0200 0000 0100 6376 3363
0000390 3076 0000 0000 0300 0000 1000 0000 3200
00003a0 6572 7567 616c 6f74 2d72 6966 6578 0064
00003b0 0000 0300 0000 0700 0000 3d00 6376 3363
00003c0 3076 0000 0000 0300 0000 0400 0000 4c00
00003d0 2d00 c0c6 0000 0300 0000 0400 0000 6400
00003e0 2d00 c0c6 0000 0200 0000 0100 6376 3363
00003f0 3376 0000 0000 0300 0000 1000 0000 3200
0000400 6572 7567 616c 6f74 2d72 6966 6578 0064
0000410 0000 0300 0000 0700 0000 3d00 6376 3363
0000420 3376 0000 0000 0300 0000 0400 0000 4c00
0000430 3200 a05a 0000 0300 0000 0400 0000 6400
0000440 3200 a05a 0000 0300 0000 0400 0000 ad00
0000450 0000 0f00 0000 0200 0000 0100 6376 3563
0000460 3076 0000 0000 0300 0000 1000 0000 3200
0000470 6572 7567 616c 6f74 2d72 6966 6578 0064
0000480 0000 0300 0000 0700 0000 3d00 6376 3563
0000490 3076 0000 0000 0300 0000 0400 0000 4c00
00004a0 4c00 404b 0000 0300 0000 0400 0000 6400
00004b0 4c00 404b 0000 0200 0000 0100 6c63 636f
00004c0 736b 0000 0000 0100 6c63 2d6b 3432 004d
00004d0 0000 0300 0000 0400 0000 b500 0000 0000
00004e0 0000 0300 0000 0c00 0000 3200 6966 6578
00004f0 2d64 6c63 636f 006b 0000 0300 0000 0400
0000500 0000 c200 6e01 0036 0000 0300 0000 0700
0000510 0000 d200 736f 3263 4d34 0000 0000 0300
0000520 0000 0400 0000 ad00 0000 0300 0000 0200
0000530 0000 0100 736f 3263 4d34 335f 6b32 0000
0000540 0000 0300 0000 0400 0000 b500 0000 0000
0000550 0000 0300 0000 1300 0000 3200 6966 6578
0000560 2d64 6166 7463 726f 632d 6f6c 6b63 0000
0000570 0000 0300 0000 0400 0000 e500 0000 ee02
0000580 0000 0300 0000 0400 0000 ef00 0000 0100
0000590 0000 0300 0000 0400 0000 fa00 0000 0300
00005a0 0000 0300 0000 0400 0000 ad00 0000 0500
00005b0 0000 0200 0000 0100 6c63 2d6b 3233 006b
00005c0 0000 0300 0000 0400 0000 b500 0000 0000
00005d0 0000 0300 0000 0c00 0000 3200 6966 6578
00005e0 2d64 6c63 636f 006b 0000 0300 0000 0400
00005f0 0000 c200 0000 0080 0000 0300 0000 0700
0000600 0000 d200 736f 3363 6b32 0000 0000 0300
0000610 0000 0400 0000 ad00 0000 0600 0000 0200
0000620 0000 0200 0000 0100 7063 7375 0000 0000
0000630 0000 0300 0000 0400 0000 0f00 0000 0000
0000640 0000 0300 0000 0400 0000 0000 0000 0100
0000650 0000 0100 7063 4075 0030 0000 0000 0300
0000660 0000 0400 0000 0101 7063 0075 0000 0300
0000670 0000 0f00 0000 3200 7261 2c6d 7261 396d
0000680 3632 6a65 732d 0000 0000 0300 0000 0400
0000690 0000 0d01 0000 0000 0000 0300 0000 0800
00006a0 0000 fa00 0000 0400 0000 0b00 0000 0200
00006b0 0000 0200 0000 0100 6f73 0063 0000 0300
00006c0 0000 0b00 0000 3200 6973 706d 656c 622d
00006d0 7375 0000 0000 0300 0000 0400 0000 0000
00006e0 0000 0100 0000 0300 0000 0400 0000 0f00
00006f0 0000 0100 0000 0300 0000 0000 0000 1101
0000700 0000 0100 6f69 006e 0000 0300 0000 1400
0000710 0000 3200 6c61 776c 6e69 656e 2c72 7573
0000720 786e 2d69 6f69 006e 0000 0300 0000 0500
0000730 0000 a600 6b6f 7961 0000 0000 0000 0100
0000740 6568 7061 635f 616d 3040 0000 0000 0300
0000750 0000 0e00 0000 3200 6c61 776c 6e69 656e
0000760 2c72 6d63 0061 0000 0000 0300 0000 0400
0000770 0000 1801 6d63 0061 0000 0300 0000 0400
0000780 0000 2201 0000 0400 0000 0300 0000 0400
0000790 0000 2a01 0000 0000 0000 0300 0000 0400
00007a0 0000 3401 0000 0000 0000 0300 0000 0800
00007b0 0000 3e01 6f69 5f6e 6d63 0061 0000 0200
00007c0 0000 0200 0000 0100 7273 6d61 632d 6e6f
00007d0 7274 6c6f 656c 4072 6331 3030 3030 0030
00007e0 0000 0300 0000 4a00 0000 3200 6c61 776c
00007f0 6e69 656e 2c72 7573 696e 2d76 3166 3163
0000800 ffff ffff ffff ffff ffff ffff ffff ffff
0000810 ffff ffff ffff ffff ffff ffff ffff ffff
0000820 ffff ffff ffff ffff ffff ffff ffff ffff
0000830 ffff ffff ffff ffff ffff ffff ffff 00ff
发现oob数据是这样的:
0000800 ffff ffff ffff ffff ffff ffff ffff ffff
0000810 ffff ffff ffff ffff ffff ffff ffff ffff
0000820 ffff ffff ffff ffff ffff ffff ffff ffff
0000830 ffff ffff ffff ffff ffff ffff ffff 00ff
并没有ECC校验数据嘛? 那校验数据去哪里了呢?没有校验数据怎么保证SPI NAND数据正确呢?
离线
GD SPI NAND官方手册: gd5f1gq4xbxig_v3.0_20190505.pdf
带着这些疑问, 我打开了手册.
Page Size :
- 2048 bytes + 128 bytes with ECC disabled
- 2048 bytes + 64 bytes with ECC enabled
开启ECC只有64字节可用, 关闭ECC可以多出64字节, 由此猜测有64字节用于内部ECC了.
顺着数据手册:
果然如此, 后面64Byte才是ECC!
离线
咨询aodzip大佬, 让我试一试 nand dump.oob, 我用启明云端的7寸开发板测试:
SigmaStar # nand dump.oob 0x0
Page 00000000 dump:
OOB:
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
SigmaStar #
SigmaStar # nand dump.raw 0x0
Page 00000000 dump:
4d 53 54 41 52 53 45 4d 49 55 53 46 44 43 49 53
03 cd eb 11 00 00 00 00 00 00 00 00 00 00 00 00
40 00 00 08 40 00 00 08 00 02 00 00 00 6c 00 0a
00 00 00 00 00 00 00 00 ca 02 ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
OOB:
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
仍然全部是 0xFF
OOB:
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
看来uboot的spinand驱动里面oob也是内部管理的,
除非自己改驱动,把ecc关了,把obb缓冲区扩充到128字节,然后再秀出来。
离线
SigmaStar #
SigmaStar # nand markbad 0x6000000
block 0x06000000 successfully marked as bad
SigmaStar #
SigmaStar # nand bad
Device 0 bad blocks:
06000000
SigmaStar #
SigmaStar # nand dump.oob 0x6000000
Page 06000000 dump:
OOB:
00 ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
继续作死, 主动把 0x6000000标记成坏块, 然后把 oob 读出来, 第一个字节非0xFF, 所以是坏块了。
离线
SigmaStar #
SigmaStar # nand scrub -y 0x6000000 0x20000
NAND scrub: device 0 offset 0x6000000, size 0x20000
Erasing at 0x6000000 -- 100% complete.
Time:5479 us, speed:23922 KB/s
OK
SigmaStar #
SigmaStar # nand dump.oob 0x6000000
Page 06000000 dump:
OOB:
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff
SigmaStar # nand bad
Device 0 bad blocks:
ecc error P: 0x0
SigmaStar #
把0x6000000 地址的坏块标志擦洗了一下, 坏块数归零了。
离线