
On 2010-07-09, Scott Wood scottwood@freescale.com wrote:
On Fri, Jul 09, 2010 at 08:56:40AM -0400, Ben Gardiner wrote:
If you are putting an MTD filesystem in that partition then the filesystem itself will take care of bad blocks that might occur in the partition during runtime. During the flash programming of this filesystem using nand write.jffs2 (or .e) will skip bad blocks that might occur in the partition.
If you are putting an image (kernel or initrd) into the partition then the 'nand read.e' and 'nand write.e' (as well as mtd-utils nandwrite) will handle bad blocks by skipping over them.
On any recent u-boot, the .jffs2/.e/.i suffixes are maintained for compatibility only -- bad block skipping is now the default behavior.
I'm using 1.3.4 (that's what's supported by Atmel). While that's the current "released" version, it appears to be over two years old?
I've been reading nand flash docs and source code for a while now, and I must admit the more I read the more questions I have.
1) Is there any documentation for the "nand" commands?
There's nothing in the manual, and doc/README.nand appears to be incomplete, and self-contradictory. [There's no mention at all of .e or .i, and there are contradictory descriptions for .jffs2.]
2) Are the behaviors of ".jffs2", ".e", and ".i" the same? (It appears so from the source code.) If not how do they differ?
3) In the 1.3.4 source code, there are lots of instances where there are boolean flags with names like "jffs2". AFAICT those flags have nothing to do with the JFFS2 filesystem, but simply control whether or not bad flash blocks are skipped during read/write operations. Am I reading the code correctly?
4) If in a custom command, I want to read/write a large block of data to/from nand flash while skipping bad blocks what functions do I call? Right now I'm doing something like this:
nand_info[0].read(nand_info+0, offset, sizeof(buffer), &len, buffer)
nand_info[0].write(nand_info+0, offset, bytecount, &len, buffer)
but, I have a feeling that's not right (though it seems to work, I suspect it's not going to skip bad blocks).