bad block replacement
I'm using a Samsung KM29U256T 32Mb nand flash with 4 partitions on a cramfs. I'm trying to implement ECC and a method for replacing bad blocks. The spare array consists of 16 bytes, positions 512-528, the 517th position being reserved for the bad block marker.
Can I arbitrarily pick where to store the 6 byte ECC code in the spare array as long as I don't erase and/or overwrite the bad block marker?
Concerning the replacement of bad blocks, Samsung guarantees that the 1st or 2nd page of every invalid block has non-FFh data at the 517th position of the array. They recommend keeping a table of valid/invalid blocks.
When replacing blocks, should one start at the end of the flash and replace a bad block with a good free block? How many free good blocks should one typically allocate for the duration of the flash's life?
thank you
-Bill
Quoted 7 lines · William J. Beksi
I'm using a Samsung KM29U256T 32Mb nand flash with 4 partitions on a cramfs. I'm trying to implement ECC and a method for replacing bad blocks. The spare array consists of 16 bytes, positions 512-528, the 517th position being reserved for the bad block marker.
Can I arbitrarily pick where to store the 6 byte ECC code in the spare array as long as I don't erase and/or overwrite the bad block marker?
Yes you can so long as there is no conflict with any hardware ECC etc. Since I know you're using software ECC that is not a problem.
Quoted 5 lines
Concerning the replacement of bad blocks, Samsung guarantees that the 1st or 2nd page of every invalid block has non-FFh data at the 517th position of the array. They recommend keeping a table of valid/invalid blocks.
Generally (speaking for YAFFS and JFFS2 here) we don't keep a table like that for devices like this since we can just look at the 517th byte.
Quoted 4 lines
When replacing blocks, should one start at the end of the flash and replace a bad block with a good free block? How many free good blocks should one typically allocate for the duration of the flash's life?
Perhaps a better way is to save some sort of index marker in thespare area (ie some block id). Look at how SmartMedia does it. This should work for what you want. The SmartMedia block handling algorithms are on the Samsung www.
Spare blocks can be left in the erased state (ie. kept as a "free pool"). When you erase blocks they are released back into the "free pool". Just never erase a bad block!
At boot time you can then just scan the blocks to determine the logical to physical mapping.
Allowing 2% for all bad blocks is a GoodThing and is what SmartMedia does. ie. For each 1024 blocks you round it to 1000.
-- Charles
Quoted 4 lines · William J. Beksi
I'm using a Samsung KM29U256T 32Mb nand flash with 4 partitions on a cramfs. I'm trying to implement ECC and a method for replacing bad blocks. The spare array consists of 16 bytes, positions 512-528, the 517th position being reserved for the bad block marker.
The generic nand driver knows all about this. ECC is implemented and bad block management is done in NAND aware filesystems.
Using cramfs on NAND is not really a good idea. Cramfs is _NOT_ aware of NAND flash. There exist JFFS2 (compressing) and YAFFS (not compressing), which are NAND aware. Use one of those and you are done with out any changes in the code.
Signature · 5 lines
Thomas ________________________________________________________________________ linutronix - competence in embedded & realtime linux http://www.linutronix.de mail: [email protected]