How to create production image for NAND flash?

0

I am trying to create a production image that can be flashed with flash programmer in factory. I am using Micron 51MB nand flash.

I am finding issues with the approaches I have taken so far.

1) Boot a development board with all the partitions

i.e

/dev/mtd0--> xloader

/dev/mtd1 -> uboot

/dev->mtd2 -> kernel

/dev/mtd3> root file system

/dev/mtd4 -> user application

now, I used nanddump -nof xloader.bin  /dev/mtd0

nanddump -nof uboot.bin  /dev/mtd1

nanddump -nof kernel.bin  /dev/mtd2

nanddump -nof rootfs.bin  /dev/mtd3

nanddump -nof apps.bin  /dev/mtd4

cat /dev/mtd0 /dev/mtd1  /dev/mtd2 /dev/mtd3 /dev/mtd4 > golden_flash

when I flash this golden_flash on an empty flash on which I first run u-boot from RAM and then

tftp golden_flash

nand erase all

nand write 0x82000000 golden_flash

it wouldn't work.

Upon boot, I get

mtd->read(0x1fc38 bytes from 0x60a03c8) returned ECC error

mtd->read(0xa7b0 bytes from 0x60b5850) returned ECC error

Empty flash at 0x060b584c ends at 0x060b6000

jffs2_scan_eraseblock(): Node at 0x060b618c {0x1985, 0xe022, 0x000000a7) has invalid CRC 0x5c3d15cb (calculated 0x5b9110fd)

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x060b6190: 0x00a7 instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x060b6194: 0x15cb instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x060b6198: 0x2e5b instead

mtd->read(0x59c bytes from 0x13eba64) returned ECC error

mtd->read(0x44 bytes from 0x13ec800) returned ECC error

mtd->read(0x7bc bytes from 0x13ec844) returned ECC error

mtd->read(0x558 bytes from 0x13ebaa8) returned ECC error

mtd->read(0x44 bytes from 0x13ec844) returned ECC error

mtd->read(0x514 bytes from 0x13ebaec) returned ECC error

mtd->read(0x44 bytes from 0x13ec888) returned ECC error

I flashed the image from u-boot

Is there any better way to create production image or correct way to create production image for NAND flash?

linux-kernel
hardware
embedded-linux
asked on Stack Overflow Jul 30, 2013 by user1867459 • edited Jul 30, 2013 by brbcoding

1 Answer

1

As a previous commenter stated, you're going to have issues with bad blocks since bad block counts and locations are not consistent between devices. But if you skip bad blocks on the dumps, any bad blocks in mtd0-mtd3 will result in partition boundary mismatch. The nand write command probably does not utilize knowledge of the partition layout, so bad blocks in the first four partitions of the device in manufacturing will also result in a misalignment. I think the best option is to flash the five partitions separately.

answered on Stack Overflow Jul 31, 2013 by jimbr

User contributions licensed under CC BY-SA 3.0