[Yaffs] inadvertently marking all blocks bad?
Lawson.Reed
Reed.Lawson at IGT.com
Wed Jul 6 19:44:10 BST 2005
Hi,
When I remove a file and then copy in a file and yaffs2 tries to
erase that area of flash to add the new file, I get this:
nand_erase: attempt to erase a bad block at page 0x000108c0
nand_erase: attempt to erase a bad block at page 0x000108c0
**>> Erasure failed 1059
**>> Block 1059 retired
over and over again (different block number, though) for each
block occupied by the recently removed file.
Eventually, all blocks are marked bad. :-(
It seems like the first byte of the oob area is being written
to some non "0xff" value as part of the file write process.
I am using a Samsung parts:
NAND device: Manufacturer ID: 0xec, Chip ID: 0xdc (Samsung NAND 512MiB
3,3V 8-bit)
2 NAND chips detected
The data sheet says that the bad blocks are marked by making the offset 2048
in the
first page of a block (first oob byte) non 0xff. So, why is YAFFS2 using
that
for tags (according to http://www.aleph1.co.uk/yaffs/yaffs.html)??
I know this will make you cringe, but just so you know....
I have taking 2.6 mtd and yaffs2 code and back ported them to the 2.4
kernel.
I know someone will suggest that I switch to 2.6, but that is not an option
for me.
I wrote my own low level driver for my hardware. It all works except
for this problem. I had to change a few things here and there to get it
working.
So, I probably made a mistake somewhere and that is why this is happening.
But I am having trouble understanding the YAFFS2 code regarding it's use of
the OOB
and what I could have done to cause it to step on the bad block markers.
Any insight would be greatly appreciated.
Thanks,
__________________________________
Reed Lawson
IGT Firmware Engineering
(775) 448-0755
More information about the yaffs
mailing list