[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