Hi,
> 2. Finally I got a message:
> nand_read_ecc: Failed ECC read, page 0x0002710e
> and after a power cycle verification application failed to verify data:
> read=0xec expected=0xe4
> Looks like one bit did not program from 1 to 0, but why didn't ecc catch it?
> I'll take a look at the rest of the file tomorrow..
OK, it is reproducible:
------------------------
verifier 0 started
nand_read_ecc: Failed ECC read, page 0x00004a77
nand_read_ecc: Failed ECC read, page 0x00004a77
instance 0 terminated with status -1
verifyBlock: verify failed,
instance=0 block=95488 blockSize=1024 position=578,
read=0xee expected=0xe6
------------------------
All messages except nand_read_ecc are produced by test application.
Application instance number = 0 (only one was run)
Data was written/verified in 1 kB blocks (nothing to do with "erase block")
Verify failed at position 578 of the block number 95488. I think it maps to the
physical NAND address 0x0094ee42. See nand dump below.
Looks like ECC fails for whatever is the reason and cannot correct
bit error. Makes sense?
Then the filesystem quitely returned bad data?!
BTW, "Failed ECC read" message is produced when nand_correct_data()
function fails.
Here is a failed page dump from mtd device:
# /mnt/nfs/nanddump -p -s 9760256 -l 32 /dev/mtd3
Block size 16384,
nand_read_ecc: Failed ECC read, page 0x00004a77
nand_read_ecc: Failed ECC read, page 0x00004a77
page size 512, OOB size 16
Dumping data starting at 0x0094ee00 and ending at 0x0094ee20...
0x0094ee00: f3 e3 d7 cc 96 e7 3b ad 86 cf ff 50 a8 30 78 86
0x0094ee10: 76 e9 7f 11 8a bf 8d ec 0b c8 c3 99 84 be 1f 77
0x0094ee20: a2 f6 43 38 dd 7e e5 63 4d e5 b3 f6 15 2c 7c 8b
0x0094ee30: 15 fc 9c 9f bb 29 8b c6 f1 4e 5f 75 0c 7e ec ae
0x0094ee40: 74 2f ee 51 ad cc b4 fb b1 68 f1 c6 94 6d 51 a9
0x0094ee50: 69 ed 48 24 17 d3 ea 08 21 4a 7e 2d c8 6a dc 3d
0x0094ee60: 9a c2 8e 47 8e 43 42 3f ab 33 05 3f a1 56 e8 0a
0x0094ee70: 44 30 2f 5b 03 19 63 24 63 e1 51 2c 4c 2d 69 e6
0x0094ee80: f0 f7 2d 7e 3a 70 be e5 a3 c3 24 44 1a 0c 4f 5e
0x0094ee90: 3c 7e b9 3f 97 1c 63 fb fe b5 27 4a e2 90 30 d2
0x0094eea0: 87 5d 51 c2 cd 0f a7 71 d2 cc b5 ec d8 04 4a 15
0x0094eeb0: 82 03 54 1a 20 b8 15 1e 6d 3c 68 4f cc 98 22 53
0x0094eec0: f5 73 15 c3 82 bd 34 54 89 e9 41 61 ee 8b 76 70
0x0094eed0: 8f cb 8a af 83 9f cd f0 db 35 3f a7 cd 61 fb c2
0x0094eee0: d4 10 85 56 cd b9 ab 56 a3 ec b8 91 77 2e 01 06
0x0094eef0: f9 8c b5 7c 2b 82 6e 07 b7 ac ae 84 0d a9 47 e2
0x0094ef00: ba cc 38 87 86 e3 de 29 cf 96 ba 47 c4 bb 4d be
0x0094ef10: 47 03 3a f3 85 a7 7a 3d 53 28 c1 60 d2 48 42 8c
0x0094ef20: d5 7b 13 5b 5e f1 84 2e 87 3e 75 4c f9 c2 0a 41
0x0094ef30: c5 44 b4 4b eb 2e 88 3e 56 49 9f 28 52 e1 b4 27
0x0094ef40: 5c c8 82 bb b9 06 e9 41 44 5e 8d 3d 20 97 7e e6
0x0094ef50: db 32 31 e7 70 b9 05 b7 02 a4 df 54 86 94 7b e2
0x0094ef60: 5c fd dd 15 03 86 56 47 e4 e3 85 05 7a 03 eb 56
0x0094ef70: 36 1c 1d 96 d5 22 4d d7 c7 2d 2c 4d c1 a7 2f 1d
0x0094ef80: a5 cd 32 a8 53 89 f0 38 6c 75 3d e7 78 28 3d ae
0x0094ef90: 44 5a 45 19 7c 92 f0 43 bf 1c 90 80 c4 c0 9d 69
0x0094efa0: 8d d0 15 e0 59 01 18 c5 76 55 ac ef 7d e9 9d c1
0x0094efb0: 43 e2 da c0 75 cb 03 34 e7 94 b5 ab 54 52 14 e1
0x0094efc0: 22 26 c1 7b 27 da 41 9e 2f ed 8d ad d7 2b 6e 1a
0x0094efd0: 0d 49 da 82 14 de b6 fb 72 6b a7 c6 be bb a7 e0
0x0094efe0: e1 68 5c 09 42 9d a7 72 8a 34 1f 61 5e 8d 7c 6b
0x0094eff0: d6 56 ed ea 34 a4 e6 a6 0f 8d 6c cd 48 13 ae 2a
OOB Data: 02 ea 12 80 ff ff 06 01 cf c3 03 94 c1 d6 55 a7
Byte by byte comparison of the good and bad files yield:
FileOffset Good Bad
97780291 0xe6 0xee
97780471 0x6c 0x6e
97780500 0x73 0xf3
97780510 0x8 0x48
97780564 0xc7 0xe7
97780565 0x60 0x70
97780579 0x9d 0xdd
97780643 0x11 0x15
97780686 0x2a 0x2b
Looks like some bits did not program to 0.
Sergei Sharonov
P.S. Any of you people tested yaffs under power fail conditions?