uboot 支持nand flash的数据及oob数据的读写显示操作,也至此手动标记坏块的命令,当一般不建议手动修改flash的坏块标志。这里介绍在uboot中操作和查看flash数据的常用命令及方法。
说明:
本文测试使用的flash信息如下:
SPI Nand(cs 0) ID: 0xc2 0x12 Name:"MX35LF1GE4AB"
Block:128KB Page:2KB Chip:128MB*1 OOB:64B ECC:4bit/512
(一)常用命令:
查看nandflash 信息
Wisdom # nand info
Device 0: MX35LF1GE4AB, sector size 128 KiB
在我的Uboot里与nand info 的信息是一样的。
Wisdom # nand device
Device 0: MX35LF1GE4AB, sector size 128 KiB
读取命令,这里是两条命令:
nand read [addr] [off] [size]
nand read.oob [addr] [off] [size]
不管是读取data, 使用nand read,还是读取oob,使用命令nand read.oob, 后面跟的地址addr,都是ram的地址, off指的是nand flash的地址, size:指要读取nand flash的数据大小, 但是如果是读取oob, size不能超过一个page的oob size, 如果page size为512个字节, oob size就是16个字节.
如果一次想读取完整的一个page 的值,包含oob, 使用下面将的命令, nand dump.
读取flash addr地址开始的size 大小数据出来。最小单位是一个page.也就是说size小于一个page,也会读出一个page的数据。该数据包括oob数据。
与nand read 命令类似,将内存地址addr的size大小数据写入到flash的off偏移地址去,该命令会自动跳过坏块。
清除flash off偏移地址开始的size大小的数据,最小单位是一个page。
"nand scrub - really clean NAND erasing bad blocks (UNSAFE)\n"
"nand markbad off - mark bad block at offset (UNSAFE)\n"
"nand biterr off - make a bit error at offset (UNSAFE)\n"
"nand lock [tight] [status]- bring nand to lock state or display locked pages\n"
"nand unlock [offset] [size] - unlock section\n");
nand dump 0 100
直接输出flash 0地址开始的0x100字节数据及它所在page的OOB数据。从实际输出我们可以看出它实际输出了一个page 的数据。
Wisdom #
Wisdom #
isdom # nand dump 0x100000 0x100
Page 00100000 dump:
27 05 19 56 11 f0 e6 37 5c 97 4f bc 00 30 ae e8
80 00 80 00 80 00 80 00 e9 70 d4 3f 05 02 02 00
77 73 64 5f 6b 65 72 6e 65 6c 5f 76 31 2e 30 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1
00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1
02 00 00 ea 18 28 6f 01 00 00 00 00 e8 ae 30 00
00 90 0f e1 59 0d 00 eb 01 70 a0 e1 02 80 a0 e1
00 20 0f e1 03 00 12 e3 01 00 00 1a 17 00 a0 e3
56 34 12 ef 00 00 0f e1 1a 00 20 e2 1f 00 10 e3
1f 00 c0 e3 d3 00 80 e3 04 00 00 1a 01 0c 80 e3
0c e0 8f e2 00 f0 6f e1 0e f3 2e e1 6e 00 60 e1
00 f0 21 e1 09 f0 6f e1 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e4 47 9f e5 30 0f 11 ee 40 00 80 e3 30 0f 01 ee
6a 00 00 eb 5b 0f 8f e2 4e 1c 90 e8 1c d0 90 e5
01 00 40 e0 00 60 86 e0 00 a0 8a e0 00 90 da e5
01 e0 da e5 0e 94 89 e1 02 e0 da e5 03 a0 da e5
0e 98 89 e1 0a 9c 89 e1 00 d0 8d e0 01 a8 8d e2
00 50 a0 e3 01 a9 8a e2 0a 00 54 e1 1e 00 00 2a
09 a0 84 e0 70 90 8f e2 09 00 5a e1 1a 00 00 9a
09 ac 8a e2 ff a0 ca e3 6c 50 4f e2 1f 50 c5 e3
00 00 4f e1 1f 00 00 e2 1a 00 50 e3 03 00 00 1a
2f 0d 00 eb 05 00 40 e0 0a 00 80 e0 2d 0d 00 eb
05 90 46 e0 1f 90 89 e2 1f 90 c9 e3 05 60 89 e0
0a 90 89 e0 0f 5c 36 e9 05 00 56 e1 0f 5c 29 e9
fb ff ff 8a 06 60 49 e0 06 d0 8d e0 5b 01 00 eb
c4 00 4f e2 06 00 80 e0 00 f0 a0 e1 05 10 90 e1
0d 00 00 0a 00 b0 8b e0 00 c0 8c e0 00 20 82 e0
00 30 83 e0 00 10 9b e5 00 10 81 e0 02 00 51 e1
01 00 53 21 05 10 81 80 04 10 8b e4 0c 00 5b e1
f7 ff ff 3a 05 20 82 e0 05 30 83 e0 00 00 a0 e3
04 00 82 e4 04 00 82 e4 04 00 82 e4 04 00 82 e4
03 00 52 e1 f9 ff ff 3a 04 00 a0 e1 0d 10 a0 e1
01 28 8d e2 07 30 a0 e1 ec 01 00 eb 3b 01 00 eb
12 01 00 eb 07 10 a0 e1 08 20 a0 e1 00 00 4f e1
1f 00 00 e2 1a 00 50 e3 ac 01 00 1a 10 c0 8f e2
00 00 9c e5 0c 00 80 e0 f6 0c 00 eb 70 00 40 e1
fe ff ff ea 7c 06 00 00 28 02 00 00 e8 ae 30 00
00 af 30 00 e8 ae 30 00 a9 ae 30 00 bc ae 30 00
e0 ae 30 00 00 bf 30 00 00 f0 20 e3 00 f0 20 e3
00 f0 20 e3 00 f0 20 e3 00 f0 20 e3 00 f0 20 e3
08 30 a0 e3 88 00 00 ea 3f 00 a0 e3 17 0f 06 ee
37 0f 06 ee 80 00 a0 e3 10 0f 02 ee 30 0f 02 ee
10 0f 03 ee 03 09 a0 e3 30 0f 05 ee 10 0f 05 ee
00 00 a0 e3 9a 0f 07 ee 15 0f 07 ee 16 0f 07 ee
10 0f 11 ee 2d 00 80 e3 01 0a 80 e3 10 0f 01 ee
00 00 a0 e3 15 0f 07 ee 16 0f 07 ee 0e f0 a0 e1
3f 00 a0 e3 17 0f 06 ee 80 00 a0 e3 10 0f 02 ee
10 0f 03 ee 03 09 a0 e3 10 0f 05 ee 00 00 a0 e3
10 0f 07 ee 10 0f 11 ee 0d 00 80 e3 00 00 a0 e3
10 0f 01 ee 10 0f 07 ee 0e f0 a0 e1 01 39 44 e2
ff 30 c3 e3 3f 3c c3 e3 03 00 a0 e1 20 99 a0 e1
09 99 a0 e1 01 a2 89 e2 12 10 a0 e3 03 1b 81 e3
01 29 83 e2 09 00 51 e1 01 00 5a 21 1c 10 c1 e3
10 10 81 33 06 10 81 21 04 10 80 e4 01 16 81 e2
02 00 30 e1 f6 ff ff 1a 04 10 86 e3 03 1b 81 e3
0f 20 a0 e1 22 2a a0 e1 02 1a 81 e1 02 01 83 e0
04 10 80 e4 01 16 81 e2 00 10 80 e5 0e f0 a0 e1
10 0f 11 ee 02 00 c0 e3 01 05 80 e3 10 0f 01 ee
ff ff ff ea 0e c0 a0 e1 1e 60 a0 e3 da ff ff eb
00 00 a0 e3 9a 0f 07 ee 17 0f 08 ee 10 0f 11 ee
05 0a 80 e3 30 00 80 e3 2e 00 00 eb 00 00 a0 e3
17 0f 08 ee 0c f0 a0 e1 0e c0 a0 e1 91 bf 10 ee
0f 00 1b e3 0e 60 a0 13 cb ff ff 1b 00 00 a0 e3
9a 0f 07 ee 0f 00 1b e3 17 0f 08 1e 10 0f 11 ee
01 02 c0 e3 05 0a 80 e3 3c 00 80 e3 02 00 c0 e3
01 05 80 e3 50 6f 12 1e 01 00 80 13 02 10 e0 13
02 61 c6 e3 03 60 c6 e3 10 3f 02 1e 17 0f 08 1e
95 0f 07 ee 10 1f 03 1e 50 6f 02 1e 95 0f 07 ee
10 0f 01 ee 10 0f 11 ee 00 00 a0 e3 95 0f 07 ee
0c f0 a0 e1 0e c0 a0 e1 1e 60 a0 e3 ae ff ff eb
00 00 a0 e3 17 0f 07 ee 9a 0f 07 ee 17 0f 08 ee
10 0f 11 ee 01 0a 80 e3 02 00 00 eb 00 00 a0 e3
17 0f 08 ee 0c f0 a0 e1 0d 00 80 e3 00 10 e0 e3
10 3f 02 ee 10 1f 03 ee 00 00 00 ea 00 f0 20 e3
10 0f 01 ee 10 0f 11 ee 20 f0 4e e0 1c c0 8f e2
10 9f 10 ee 00 10 9c e5 04 20 9c e5 09 10 21 e0
02 00 11 e1 03 f0 8c 00 14 c0 8c e2 f8 ff ff ea
00 00 00 41 00 f0 00 ff 0e f0 a0 e1 0e f0 a0 e1
0e f0 a0 e1 00 70 00 41 00 fe f8 ff 0e f0 a0 e1
0e f0 a0 e1 0e f0 a0 e1 00 72 80 41 00 ff ff ff
a7 ff ff ea 65 00 00 ea 0e f0 a0 e1 00 74 00 41
00 ff 00 ff 71 ff ff ea 5a 00 00 ea df 00 00 ea
00 94 00 41 00 ff 00 ff 56 ff ff ea 4d 00 00 ea
74 00 00 ea 60 92 06 41 f0 ff 0f ff 98 ff ff ea
56 00 00 ea b7 00 00 ea 00 70 00 00 00 f0 00 00
0e f0 a0 e1 0e f0 a0 e1 0e f0 a0 e1 00 a1 01 44
e0 ff ff ff 8e ff ff ea 4c 00 00 ea b2 00 00 ea
10 b1 01 69 f0 ff ff ff 89 ff ff ea 47 00 00 ea
ad 00 00 ea 00 69 05 56 00 ff ff ff 84 ff ff ea
42 00 00 ea a8 00 00 ea 00 80 15 56 00 f0 ff ff
7f ff ff ea 3d 00 00 ea 9e 00 00 ea 00 00 05 56
00 00 0f ff 7a ff ff ea 38 00 00 ea 99 00 00 ea
61 52 01 66 f1 ff 01 ff a1 ff ff ea 33 00 00 ea
5a 00 00 ea 00 00 02 00 00 00 0f 00 70 ff ff ea
2e 00 00 ea 94 00 00 ea 00 00 05 00 00 00 0f 00
6b ff ff ea 29 00 00 ea 8f 00 00 ea 00 00 06 00
00 00 0f 00 66 ff ff ea 24 00 00 ea 85 00 00 ea
00 b0 07 00 00 f0 0f 00 5c ff ff ea 1f 00 00 ea
4b 00 00 ea 00 00 0f 00 00 00 0f 00 69 ff ff ea
21 00 00 ea 4c 00 00 ea 00 00 00 00 00 00 00 00
0e f0 a0 e1 0e f0 a0 e1 0e f0 a0 e1 00 f0 20 e3
00 f0 20 e3 00 f0 20 e3 00 f0 20 e3 00 f0 20 e3
0c 30 a0 e3 90 ff ff ea 10 0f 11 ee 0d 00 c0 e3
10 0f 01 ee 00 00 a0 e3 9a 0f 07 ee 16 0f 07 ee
15 0f 07 ee 0e f0 a0 e1 10 0f 11 ee 0d 00 c0 e3
10 0f 01 ee 00 00 a0 e3 10 0f 07 ee 0e f0 a0 e1
10 0f 11 ee 0d 00 c0 e3 10 0f 01 ee 00 00 a0 e3
17 0f 07 ee 17 0f 08 ee 0e f0 a0 e1 10 0f 11 ee
0d 00 c0 e3 10 0f 01 ee 0e c0 a0 e1 26 00 00 eb
00 00 a0 e3 17 0f 08 ee d5 0f 07 ee 9a 0f 07 ee
95 0f 07 ee 0c f0 a0 e1 00 f0 20 e3 00 f0 20 e3
00 f0 20 e3 00 f0 20 e3 00 f0 20 e3 00 f0 20 e3
10 30 a0 e3 68 ff ff ea 01 20 a0 e3 00 30 a0 e3
16 cf 07 ee e0 10 a0 e3 3f 33 81 e3 5e 3f 07 ee
01 33 53 e2 fc ff ff 2a 20 10 51 e2 f9 ff ff 2a
00 00 32 e3 15 cf 07 1e 9a cf 07 ee 0e f0 a0 e1
00 10 a0 e3 1e 1f 07 ee 15 1f 07 ee 9a 1f 07 ee
0e f0 a0 e1 00 10 a0 e3 1e 1f 07 ee 15 1f 07 ee
1f 1f 07 ee 9a 1f 07 ee 0e f0 a0 e1 b1 af 10 ee
0f 08 1a e3 00 a0 a0 e3 01 00 00 0a 1e af 07 ee
23 00 00 ea ba af 07 ee ff 0e 2d e9 30 0f 30 ee
07 34 10 e2 a3 3b a0 e1 1a 00 00 0a 00 a0 a0 e3
aa 20 8a e0 30 12 a0 e1 07 10 01 e2 02 00 51 e3
11 00 00 ba 10 af 40 ee 95 af 07 ee 10 1f 30 ee
07 20 01 e2 04 20 82 e2 e0 40 9f e5 a1 41 14 e0
14 5f 6f e1 d8 70 9f e5 a1 76 17 e0 04 90 a0 e1
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
Wisdom #
Wisdom #
注意Page 00100000 dump 表示的是0x00100000 偏移地址开始的数据,并不是表示第00100000 个page。
可以直接读取flash 数据到内存来验证该问题:
mw.b 0x82000000 ff 100000; #清除内存
nand read 0x82000000 0x100000 0x100 #读数据到内存
md 0x82000000 50 #显示内存
Wisdom #
Wisdom #
Wisdom #
Wisdom # mw.b 0x82000000 ff 100000;
Wisdom # nand read 0x82000000 0x100000 0x100
NAND read: device 0 offset 0x100000, size 0x100
256 bytes read: OK
Wisdom # md 0x82000000 50
82000000: 56190527 37e6f011 bc4f975c e8ae3000 '..V...7\.O..0..
82000010: 00800080 00800080 3fd470e9 00020205 .........p.?....
82000020: 5f647377 6e72656b 765f6c65 00302e31 wsd_kernel_v1.0.
82000030: 00000000 00000000 00000000 00000000 ................
82000040: e1a00000 e1a00000 e1a00000 e1a00000 ................
82000050: e1a00000 e1a00000 e1a00000 e1a00000 ................
82000060: ea000002 016f2818 00000000 0030aee8 .....(o.......0.
82000070: e10f9000 eb000d59 e1a07001 e1a08002 ....Y....p......
82000080: e10f2000 e3120003 1a000001 e3a00017 . ..............
82000090: ef123456 e10f0000 e220001a e310001f V4........ .....
820000a0: e3c0001f e38000d3 1a000004 e3800c01 ................
820000b0: e28fe00c e16ff000 e12ef30e e160006e ......o.....n.`.
820000c0: e121f000 e16ff009 00000000 00000000 ..!...o.........
820000d0: 00000000 00000000 00000000 00000000 ................
820000e0: e59f47e4 ee110f30 e3800040 ee010f30 [email protected]...
820000f0: eb00006a e28f0f5b e8901c4e e590d01c j...[...N.......
82000100: ffffffff ffffffff ffffffff ffffffff ................
82000110: ffffffff ffffffff ffffffff ffffffff ................
82000120: ffffffff ffffffff ffffffff ffffffff ................
82000130: ffffffff ffffffff ffffffff ffffffff ................
Wisdom #
可以看到nand dump 与nand read 指定地址到内存中的数据是一样的。