* NAND flash write goes wrong
@ 2007-05-10 18:50 borasah
2007-05-10 19:16 ` Josh Boyer
2007-05-11 6:36 ` Ricard Wanderlof
0 siblings, 2 replies; 16+ messages in thread
From: borasah @ 2007-05-10 18:50 UTC (permalink / raw)
To: linux-mtd
Hi,
I have a MIPS based board and want to use its NAND flash for storage. NAND
chip is a Samsung part: K9F1208UDA. It has 16KB erase block size and 512 byte
page size.
cat /proc/mtd
dev: size erasesize name
mtd0: 02000000 00020000 "mtdram test device"
mtd1: 00800000 00004000 "NAND FS 0"
mtd2: 03800000 00004000 "NAND FS 1"
As you see there are two partitions on it. I want to use "NAND FS 1"(56MB) for
rootFS storage. I obtained mtd-utils from the site and compiled them for both
the host and the target. I am using "mkfs.jffs2 command on the host" to
generate a jffs2 image.
./mkfs.jffs2 -p 0x3800000 -s 0x200 -e 0x4000 -r rootfs -o img -l
Then on the target I do
flash_eraseall -j /dev/mtd
In the beginning there was no bad block. But after some experiments I see
many(43) "bad sector" warnings and this continues to increase when I write
new images.
Erasing 16 Kibyte @ 24000 -- 0 % complete. Cleanmarker written at 24000.
Skipping bad block at 0x00028000
...
Is this normal? Then I do
./nandwrite /dev/mtd2 img
It writes by skipping bad blocks.
...
Writing data to block 189c000
Bad block at 189c000, 1 block(s) from 189c000 will be skipped
Writing data to block 18a0000
...
Everything seems normal. As a last item, I want to see if the image creation
and write is successfull, do
mount -t jffs2 /dev/mtdblock2 /mnt
Results:
jffs2: Erase block size too small (16KiB). Using virtual blocks size (32KiB)
instead
CLEANMARKER node found at 0x00000000 has totlen 0xc != normal 0x0
Empty flash at 0x00003f5c ends at 0x00004000
CLEANMARKER node found at 0x00004000 has totlen 0xc != normal 0x0
CLEANMARKER node found at 0x00008000 has totlen 0xc != normal 0x0
mtd->read(0x7a8c bytes from 0x8574) returned ECC error
Empty flash at 0x0000bffc ends at 0x0000c000
CLEANMARKER node found at 0x0000c000 has totlen 0xc != normal 0x0
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e30c: 0x2a1f
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e310: 0x4013
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e314: 0xeb6a
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e318: 0xd754
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e31c: 0xaca8
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e320: 0x0030
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e324: 0x1e8e
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e328: 0xe002
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e330: 0x3481
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000e340: 0x03e8
instead
Further such events for this erase block will not be printed
...
I read the FAQ at http://www.linux-mtd.infradead.org/faq/jffs2.html. "Magic
bitmask 0x1985 not found" points four things as cause. At my case, seems
1) you flash driver is severely buggy so it reads trash instead of valid
data;
2) you did not manage to flash JFFS2 image correctly so that you ended up
with garbage on your flash, although the original image was perfectly fine;
Now I am assuming 1 is correct which is vendor provided. But I dont see where
I did wrong when generating the image? Can someone shed some light on this?
# mtd_debug info /dev/mtd2
mtd.type = MTD_NANDFLASH
mtd.flags = MTD_CLEAR_BITS | MTD_ECC
mtd.size = 58720256 (56M)
mtd.erasesize = 16384 (16K)
mtd.oobblock = 512
mtd.oobsize = 16
mtd.ecctype = MTD_ECC_NONE
regions = 0
Thanks...
--
Bora SAHIN
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-10 18:50 NAND flash write goes wrong borasah
@ 2007-05-10 19:16 ` Josh Boyer
2007-05-10 21:37 ` borasah
2007-05-11 6:36 ` Ricard Wanderlof
1 sibling, 1 reply; 16+ messages in thread
From: Josh Boyer @ 2007-05-10 19:16 UTC (permalink / raw)
To: borasah; +Cc: linux-mtd
On Thu, 2007-05-10 at 21:50 +0300, borasah@gmail.com wrote:
> Hi,
>
> I have a MIPS based board and want to use its NAND flash for storage. NAND
> chip is a Samsung part: K9F1208UDA. It has 16KB erase block size and 512 byte
> page size.
> cat /proc/mtd
> dev: size erasesize name
> mtd0: 02000000 00020000 "mtdram test device"
> mtd1: 00800000 00004000 "NAND FS 0"
> mtd2: 03800000 00004000 "NAND FS 1"
>
> As you see there are two partitions on it. I want to use "NAND FS 1"(56MB) for
> rootFS storage. I obtained mtd-utils from the site and compiled them for both
> the host and the target. I am using "mkfs.jffs2 command on the host" to
> generate a jffs2 image.
> ./mkfs.jffs2 -p 0x3800000 -s 0x200 -e 0x4000 -r rootfs -o img -l
> Then on the target I do
> flash_eraseall -j /dev/mtd
Could you try without the -j and see if it fares any better?
josh
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-10 19:16 ` Josh Boyer
@ 2007-05-10 21:37 ` borasah
2007-05-10 22:15 ` Thomas Gleixner
0 siblings, 1 reply; 16+ messages in thread
From: borasah @ 2007-05-10 21:37 UTC (permalink / raw)
To: Josh Boyer; +Cc: linux-mtd
Hi Josh,
> > I have a MIPS based board and want to use its NAND flash for storage.
> > NAND chip is a Samsung part: K9F1208UDA. It has 16KB erase block size and
> > 512 byte page size.
> > cat /proc/mtd
> > dev: size erasesize name
> > mtd0: 02000000 00020000 "mtdram test device"
> > mtd1: 00800000 00004000 "NAND FS 0"
> > mtd2: 03800000 00004000 "NAND FS 1"
> >
> > As you see there are two partitions on it. I want to use "NAND FS
> > 1"(56MB) for rootFS storage. I obtained mtd-utils from the site and
> > compiled them for both the host and the target. I am using "mkfs.jffs2
> > command on the host" to generate a jffs2 image.
> > ./mkfs.jffs2 -p 0x3800000 -s 0x200 -e 0x4000 -r rootfs -o img -l
> > Then on the target I do
> > flash_eraseall -j /dev/mtd
>
> Could you try without the -j and see if it fares any better?
Thanks for your suggestion. I tried it. But seems the same...
jffs2: Erase block size too small (16KiB). Using virtual blocks size (32KiB)
instead
CLEANMARKER node found at 0x00000000 has totlen 0xc != normal 0x0
Empty flash at 0x00003f5c ends at 0x00004000
CLEANMARKER node found at 0x00004000 has totlen 0xc != normal 0x0
CLEANMARKER node found at 0x00008000 has totlen 0xc != normal 0x0
Empty flash at 0x0000bffc ends at 0x0000c000
CLEANMARKER node found at 0x0000c000 has totlen 0xc != normal 0x0
CLEANMARKER node found at 0x00010000 has totlen 0xc != normal 0x0
mtd->read(0x7a50 bytes from 0x105b0) returned ECC error
Empty flash at 0x00013ffc ends at 0x00014000
CLEANMARKER node found at 0x00014000 has totlen 0xc != normal 0x0
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000151c8: 0x004f
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000151cc: 0xfbba
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000151d0: 0x00ff
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000151d4: 0x9400
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000151d8: 0xff82
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000153ec: 0x81ed
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000153f0: 0x03e8
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000153f4: 0x69e8
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000153f8: 0x4fd0
instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000153fc: 0x4fd0
instead
Further such events for this erase block will not be printed
...
Inode #265 was a directory with children - removing those too...
Inode #266 was a directory with children - removing those too...
Inode #342 was a directory with children - removing those too...
...
mtd->read(0x118 bytes from 0x1d973c) returned ECC error
jffs2_get_inode_nodes(): Data CRC failed on node at 0x001d96f8: Read
0x0dbe310a, calculated 0x6853096b
...
--
Bora SAHIN
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-10 21:37 ` borasah
@ 2007-05-10 22:15 ` Thomas Gleixner
2007-05-10 22:42 ` borasah
0 siblings, 1 reply; 16+ messages in thread
From: Thomas Gleixner @ 2007-05-10 22:15 UTC (permalink / raw)
To: borasah; +Cc: linux-mtd
On Fri, 2007-05-11 at 00:37 +0300, borasah@gmail.com wrote:
> jffs2: Erase block size too small (16KiB). Using virtual blocks size (32KiB)
---------------------------------------------------^^^^^^^
The virtual block support was removed two years ago. Please use an up to
date kernel.
http://www.linux-mtd.infradead.org/source.html#kernelversions
tglx
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-10 22:15 ` Thomas Gleixner
@ 2007-05-10 22:42 ` borasah
0 siblings, 0 replies; 16+ messages in thread
From: borasah @ 2007-05-10 22:42 UTC (permalink / raw)
To: tglx; +Cc: linux-mtd
Hi,
> On Fri, 2007-05-11 at 00:37 +0300, borasah@gmail.com wrote:
> > jffs2: Erase block size too small (16KiB). Using virtual blocks size
> > (32KiB)
>
> ---------------------------------------------------^^^^^^^
>
> The virtual block support was removed two years ago.
Oops...
> Please use an up to date kernel.
> http://www.linux-mtd.infradead.org/source.html#kernelversions
I am using 2.6.11. Is this valid for it?
Or I can use older mtd-utils?
--
Bora SAHIN
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-10 18:50 NAND flash write goes wrong borasah
2007-05-10 19:16 ` Josh Boyer
@ 2007-05-11 6:36 ` Ricard Wanderlof
2007-05-11 6:57 ` Artem Bityutskiy
2007-05-11 13:56 ` borasah
1 sibling, 2 replies; 16+ messages in thread
From: Ricard Wanderlof @ 2007-05-11 6:36 UTC (permalink / raw)
To: Linux mtd
On Thu, 10 May 2007, borasah@gmail.com wrote:
> Hi,
>
> I have a MIPS based board and want to use its NAND flash for storage. NAND
> chip is a Samsung part: K9F1208UDA. It has 16KB erase block size and 512 byte
> page size.
> cat /proc/mtd
> dev: size erasesize name
> mtd0: 02000000 00020000 "mtdram test device"
> mtd1: 00800000 00004000 "NAND FS 0"
> mtd2: 03800000 00004000 "NAND FS 1"
>
> As you see there are two partitions on it. I want to use "NAND FS 1"(56MB) for
> rootFS storage. I obtained mtd-utils from the site and compiled them for both
> the host and the target. I am using "mkfs.jffs2 command on the host" to
> generate a jffs2 image.
> ./mkfs.jffs2 -p 0x3800000 -s 0x200 -e 0x4000 -r rootfs -o img -l
I don't know if this is it but
- I wouldn't pad the output image using -p <padsize>. Since there may be
bad blocks in the flash, the image might not fit if padded to the
whole partition size. Just skip the -p and its argument. As long as
the whole partition into which the image is written has been erased
beforehand, jffs2 will be able to make use of the unused space.
- The -s <pagesize> argument doesn't specify the page size of the
flash chip, rather it should be the same as the 'page size' in the
Linux system, normally 4096 for most architectures.
- In nand flash, the cleanmarkers are normally not part of the image
as they reside in the 'spare area' in the flash. The JFFS2 driver will
automatically create cleanmarkers when it scans the chip at first boot,
and having them in the image will confuse the issue, even if it normally
works anway (but with lots of warnings at boot time).
So, add -n to the list of arguments to inhibit cleanmarker
generation by mkfs.jffs2.
> ...
> Erasing 16 Kibyte @ 24000 -- 0 % complete. Cleanmarker written at 24000.
> Skipping bad block at 0x00028000
> ...
> Is this normal? Then I do
> ./nandwrite /dev/mtd2 img
> It writes by skipping bad blocks.
> ...
> Writing data to block 189c000
> Bad block at 189c000, 1 block(s) from 189c000 will be skipped
> Writing data to block 18a0000
> ...
If there indeed are bad blocks it is correct to skip them both when
erasing and writing.
/Ricard
--
Ricard Wolf Wanderlöf ricardw(at)axis.com
Axis Communications AB, Lund, Sweden www.axis.com
Phone +46 46 272 2016 Fax +46 46 13 61 30
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 6:36 ` Ricard Wanderlof
@ 2007-05-11 6:57 ` Artem Bityutskiy
2007-05-11 7:16 ` Matthieu CASTET
2007-05-11 13:56 ` borasah
1 sibling, 1 reply; 16+ messages in thread
From: Artem Bityutskiy @ 2007-05-11 6:57 UTC (permalink / raw)
To: Ricard Wanderlof; +Cc: Linux mtd
Just FYI,
we have recently fixed a bug in MTD which caused JFFS2 to mark good
eraseblocks bad. It was caused by the mtdpart module. One had to have
partitions to trigger this bug. The bug was that when JFFS2 wanted to
mark eraseblock X within its partition as bad, mtdpart did not translate
correctly to the _absolute_ number, but marked _absolute_ eraseblock
number X as bad instead.
So basically, once one met a true bad eraseblock, JFFS2 started trying
to mark it as bad, but marked other eraseblock as bad instead.
I'd recommend everybody to backport this fix.
--
Best regards,
Artem Bityutskiy (Битюцкий Артём)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 6:57 ` Artem Bityutskiy
@ 2007-05-11 7:16 ` Matthieu CASTET
2007-05-11 7:42 ` Artem Bityutskiy
0 siblings, 1 reply; 16+ messages in thread
From: Matthieu CASTET @ 2007-05-11 7:16 UTC (permalink / raw)
To: dedekind; +Cc: Linux mtd
Hi Artem,
Artem Bityutskiy a écrit :
> Just FYI,
>
> we have recently fixed a bug in MTD which caused JFFS2 to mark good
> eraseblocks bad. It was caused by the mtdpart module. One had to have
> partitions to trigger this bug. The bug was that when JFFS2 wanted to
> mark eraseblock X within its partition as bad, mtdpart did not translate
> correctly to the _absolute_ number, but marked _absolute_ eraseblock
> number X as bad instead.
>
> So basically, once one met a true bad eraseblock, JFFS2 started trying
> to mark it as bad, but marked other eraseblock as bad instead.
>
> I'd recommend everybody to backport this fix.
>
Could you give a link to your fix ?
Thanks
Matthieu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 7:16 ` Matthieu CASTET
@ 2007-05-11 7:42 ` Artem Bityutskiy
2007-05-11 7:49 ` Artem Bityutskiy
0 siblings, 1 reply; 16+ messages in thread
From: Artem Bityutskiy @ 2007-05-11 7:42 UTC (permalink / raw)
To: Matthieu CASTET; +Cc: Linux mtd
On Fri, 2007-05-11 at 09:16 +0200, Matthieu CASTET wrote:
> Could you give a link to your fix ?
http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=74641d75275936796d239f828b80cb030e9f9b0a
Although even with this fix JFFS2 does not survive I/O errors in many
cases, there were more error-path fixes. 2.6.20's JFFS2 is much better
in errors handling then older versions.
--
Best regards,
Artem Bityutskiy (Битюцкий Артём)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 7:42 ` Artem Bityutskiy
@ 2007-05-11 7:49 ` Artem Bityutskiy
0 siblings, 0 replies; 16+ messages in thread
From: Artem Bityutskiy @ 2007-05-11 7:49 UTC (permalink / raw)
To: Matthieu CASTET; +Cc: Linux mtd
On Fri, 2007-05-11 at 10:42 +0300, Artem Bityutskiy wrote:
> On Fri, 2007-05-11 at 09:16 +0200, Matthieu CASTET wrote:
> > Could you give a link to your fix ?
>
> http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=74641d75275936796d239f828b80cb030e9f9b0a
>
> Although even with this fix JFFS2 does not survive I/O errors in many
> cases, there were more error-path fixes. 2.6.20's JFFS2 is much better
> in errors handling then older versions.
Err, to make it clearer, _older_ JFFS2 will not survive I/O errors in
many cases even with this fix.
--
Best regards,
Artem Bityutskiy (Битюцкий Артём)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 6:36 ` Ricard Wanderlof
2007-05-11 6:57 ` Artem Bityutskiy
@ 2007-05-11 13:56 ` borasah
2007-05-11 14:31 ` Ricard Wanderlof
1 sibling, 1 reply; 16+ messages in thread
From: borasah @ 2007-05-11 13:56 UTC (permalink / raw)
To: linux-mtd; +Cc: Ricard Wanderlof
> > compiled them for both the host and the target. I am using "mkfs.jffs2
> > command on the host" to generate a jffs2 image.
> > ./mkfs.jffs2 -p 0x3800000 -s 0x200 -e 0x4000 -r rootfs -o img -l
>
> I don't know if this is it but
>
> - I wouldn't pad the output image using -p <padsize>. Since there may be
> bad blocks in the flash, the image might not fit if padded to the
> whole partition size. Just skip the -p and its argument. As long as
> the whole partition into which the image is written has been erased
> beforehand, jffs2 will be able to make use of the unused space.
>
> - The -s <pagesize> argument doesn't specify the page size of the
> flash chip, rather it should be the same as the 'page size' in the
> Linux system, normally 4096 for most architectures.
>
> - In nand flash, the cleanmarkers are normally not part of the image
> as they reside in the 'spare area' in the flash. The JFFS2 driver will
> automatically create cleanmarkers when it scans the chip at first boot,
> and having them in the image will confuse the issue, even if it normally
> works anway (but with lots of warnings at boot time).
> So, add -n to the list of arguments to inhibit cleanmarker
> generation by mkfs.jffs2.
Thanks for the infos. OK, this means
./mkfs.jffs2 -e 0x4000 -r rootfs -o img -l -n
or
./mkfs.jffs2 -s 0x1000 -e 0x4000 -r rootfs -o img -l -n
right? I checked the target .config, it uses 4K as page size. But I gave
Input file is not page aligned
Data did not fit into device, due to bad blocks
: Success
In fact, I tried without -p and with -n before. Without -p nandwrite gives the
above message. Then I put -p and nandwrite started to write...
> > Erasing 16 Kibyte @ 24000 -- 0 % complete. Cleanmarker written at
> > 24000. Skipping bad block at 0x00028000
> > ...
> > Is this normal? Then I do
> > ./nandwrite /dev/mtd2 img
> > It writes by skipping bad blocks.
> > ...
> > Writing data to block 189c000
> > Bad block at 189c000, 1 block(s) from 189c000 will be skipped
> > Writing data to block 18a0000
> > ...
>
> If there indeed are bad blocks it is correct to skip them both when
> erasing and writing.
OK. What I wanted to learn was different. In the begining there was no bad
sector but by the passage of time, when I tried different combinations, bad
sector numbers started to increase. Is this normal? Or are there some
fundamentally different things between kernel version and mtd-utils so these
marks them as bad?
Thanks...
--
Bora SAHIN
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 13:56 ` borasah
@ 2007-05-11 14:31 ` Ricard Wanderlof
2007-05-11 17:58 ` borasah
0 siblings, 1 reply; 16+ messages in thread
From: Ricard Wanderlof @ 2007-05-11 14:31 UTC (permalink / raw)
To: Linux mtd
On Fri, 11 May 2007, borasah@gmail.com wrote:
> Thanks for the infos. OK, this means
> ./mkfs.jffs2 -e 0x4000 -r rootfs -o img -l -n
> or
> ./mkfs.jffs2 -s 0x1000 -e 0x4000 -r rootfs -o img -l -n
> right? I checked the target .config, it uses 4K as page size. But I gave
>
> Input file is not page aligned
> Data did not fit into device, due to bad blocks
> : Success
>
> In fact, I tried without -p and with -n before. Without -p nandwrite gives the
> above message. Then I put -p and nandwrite started to write...
Sorry, I didn't get it completely right last time. It is good practice to
pad the image to a complete eraseblock size, but it shouldn't fill the
whole nand flash partition space available, in case there are bad blocks.
So yes, it should be padded with -p, but not to the full size of the
partition, but a couple of eraseblocks less.
-p specified to nandwrite should also work as it pads the image with 0xff.
>> If there indeed are bad blocks it is correct to skip them both when
>> erasing and writing.
>
> OK. What I wanted to learn was different. In the begining there was no bad
> sector but by the passage of time, when I tried different combinations, bad
> sector numbers started to increase. Is this normal? Or are there some
> fundamentally different things between kernel version and mtd-utils so these
> marks them as bad?
Blocks (nand flash terminology rejects the name 'sectors' in favor of
'blocks' and 'pages') can go bad with time, but we're talking about
thousands if not tens of thousands of erase/write cycles here. So it seems
there's something wrong here.
There was a patch posted just a week or so ago here which fixed a problem
with bad block marking and recognition when not using a flash-based bad
block table.
My (limited) experience is that when the jffs2 driver detects more and
more bad blocks over a short period of time, it is the result of a
hardware problem i.e. the communication with the nand flash doesn't work
properly, causing some reads, writes or erase operations to fail. (Case in
point: during debugging of one of our products I accidentally allocated a
network traffic indicator output pin to one of the nand flash signals,
which caused all sorts of weird nand flash problems if the flash was
accessed at the same time as the network. As long as the network was
silent, there were no problems whatsoever).
/Ricard
--
Ricard Wolf Wanderlöf ricardw(at)axis.com
Axis Communications AB, Lund, Sweden www.axis.com
Phone +46 46 272 2016 Fax +46 46 13 61 30
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 14:31 ` Ricard Wanderlof
@ 2007-05-11 17:58 ` borasah
2007-05-14 6:56 ` Ricard Wanderlof
0 siblings, 1 reply; 16+ messages in thread
From: borasah @ 2007-05-11 17:58 UTC (permalink / raw)
To: linux-mtd; +Cc: Ricard Wanderlof
> > Input file is not page aligned
> > Data did not fit into device, due to bad blocks
> >
> > : Success
> >
> > In fact, I tried without -p and with -n before. Without -p nandwrite
> > gives the above message. Then I put -p and nandwrite started to write...
>
> Sorry, I didn't get it completely right last time. It is good practice to
> pad the image to a complete eraseblock size, but it shouldn't fill the
> whole nand flash partition space available, in case there are bad blocks.
Hmm, you say if the erase block size is 100, and the last part of the image is
64, the remaining 36 should be padded with 0xFF, but all the other free ones
can remain as is?
mkfs.jffs2 -p without SIZE does the above one or to the end of the NAND flash?
I think the first one...
> So yes, it should be padded with -p, but not to the full size of the
> partition, but a couple of eraseblocks less.
You mean "NAND_size - erase_size * x"?
> -p specified to nandwrite should also work as it pads the image with 0xff.
Hmm. You dont have to specify -p to the mkfs.jffs2, nandwrite can also do it
for you, right?
> >> If there indeed are bad blocks it is correct to skip them both when
> >> erasing and writing.
> >
> > OK. What I wanted to learn was different. In the begining there was no
> > bad sector but by the passage of time, when I tried different
> > combinations, bad sector numbers started to increase. Is this normal? Or
> > are there some fundamentally different things between kernel version and
> > mtd-utils so these marks them as bad?
>
> Blocks (nand flash terminology rejects the name 'sectors' in favor of
> 'blocks' and 'pages') can go bad with time, but we're talking about
> thousands if not tens of thousands of erase/write cycles here. So it seems
> there's something wrong here.
Yes, I think too. Now ~140 bad sector is reported during the boot. I just did
at most 50 read/write...
> There was a patch posted just a week or so ago here which fixed a problem
> with bad block marking and recognition when not using a flash-based bad
> block table.
I'm new to the list. Is this Artem's patch? I applied it, but no success...
Maybe http://lists.infradead.org/pipermail/linux-mtd/2007-May/018087.html?
> My (limited) experience is that when the jffs2 driver detects more and
> more bad blocks over a short period of time, it is the result of a
> hardware problem i.e. the communication with the nand flash doesn't work
> properly, causing some reads, writes or erase operations to fail. (Case in
> point: during debugging of one of our products I accidentally allocated a
> network traffic indicator output pin to one of the nand flash signals,
> which caused all sorts of weird nand flash problems if the flash was
> accessed at the same time as the network. As long as the network was
> silent, there were no problems whatsoever).
Ricard, thanks for the the information...
--
Bora SAHIN
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-11 17:58 ` borasah
@ 2007-05-14 6:56 ` Ricard Wanderlof
2007-05-21 9:30 ` borasah
0 siblings, 1 reply; 16+ messages in thread
From: Ricard Wanderlof @ 2007-05-14 6:56 UTC (permalink / raw)
To: Linux mtd
On Fri, 11 May 2007, borasah@gmail.com wrote:
>> Sorry, I didn't get it completely right last time. It is good practice to
>> pad the image to a complete eraseblock size, but it shouldn't fill the
>> whole nand flash partition space available, in case there are bad blocks.
>
> Hmm, you say if the erase block size is 100, and the last part of the image is
> 64, the remaining 36 should be padded with 0xFF, but all the other free ones
> can remain as is?
If the partition has been erased, all the other free ones will also be
0xff.
> mkfs.jffs2 -p without SIZE does the above one or to the end of the NAND flash?
> I think the first one...
Yes, it pads up to the next eraseblock. Again, if the partition was newly
erased, the rest of the partition will also contain 0xff.
>> So yes, it should be padded with -p, but not to the full size of the
>> partition, but a couple of eraseblocks less.
>
> You mean "NAND_size - erase_size * x"?
Yes.
>> -p specified to nandwrite should also work as it pads the image with 0xff.
>
> Hmm. You dont have to specify -p to the mkfs.jffs2, nandwrite can also
> do it for you, right?
Yes.
>> Blocks (nand flash terminology rejects the name 'sectors' in favor of
>> 'blocks' and 'pages') can go bad with time, but we're talking about
>> thousands if not tens of thousands of erase/write cycles here. So it seems
>> there's something wrong here.
>
> Yes, I think too. Now ~140 bad sector is reported during the boot. I just did
> at most 50 read/write...
You sound far from wearing the chip out. There must be another problem
there somewhere.
>> There was a patch posted just a week or so ago here which fixed a problem
>> with bad block marking and recognition when not using a flash-based bad
>> block table.
>
> I'm new to the list. Is this Artem's patch? I applied it, but no success...
> Maybe http://lists.infradead.org/pipermail/linux-mtd/2007-May/018087.html?
By Thomas Knobloch I believe, but yes, that's the patch I was thinking of.
/Ricard
--
Ricard Wolf Wanderlöf ricardw(at)axis.com
Axis Communications AB, Lund, Sweden www.axis.com
Phone +46 46 272 2016 Fax +46 46 13 61 30
^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: NAND flash write goes wrong
[not found] <42E999AD7A0E4647BF159F467EE4FBCB017B5155@BLR-SGM-MSG01.wipro.com>
@ 2007-05-14 7:39 ` Ricard Wanderlof
0 siblings, 0 replies; 16+ messages in thread
From: Ricard Wanderlof @ 2007-05-14 7:39 UTC (permalink / raw)
To: Linux mtd; +Cc: sathish.madhava
On Mon, 14 May 2007, sathish.madhava@wipro.com wrote:
> Dear Ricard
> I have a small question on Yaffs.
> Do we have any utility for creating a Yaffs image as we have it for
> jffs2 ( mkfs.jffs2 from mtd-util2-1.0.0).
>
> In some places I read that to create yaffs, I need to copy the source
> files of yaffs into the kernel/fs/yaffs and then build to kernel to get
> mkyaffs and mkyaffsimage. Is it necessary ? or can I directly create a
> yaffs image and then flash it to NAND and give the boot arguments so as
> to boot it using yaffs image.
I have no experiance of using yaffs. Try the yaffs home page at
http://www.aleph1.co.uk/taxonomy/term/31/index.html .
/Ricard
--
Ricard Wolf Wanderlöf ricardw(at)axis.com
Axis Communications AB, Lund, Sweden www.axis.com
Phone +46 46 272 2016 Fax +46 46 13 61 30
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: NAND flash write goes wrong
2007-05-14 6:56 ` Ricard Wanderlof
@ 2007-05-21 9:30 ` borasah
0 siblings, 0 replies; 16+ messages in thread
From: borasah @ 2007-05-21 9:30 UTC (permalink / raw)
To: linux-mtd; +Cc: Ricard Wanderlof
Hi,
[Snip]
Thanks for the infos...
> >> Blocks (nand flash terminology rejects the name 'sectors' in favor of
> >> 'blocks' and 'pages') can go bad with time, but we're talking about
> >> thousands if not tens of thousands of erase/write cycles here. So it
> >> seems there's something wrong here.
> >
> > Yes, I think too. Now ~140 bad sector is reported during the boot. I just
> > did at most 50 read/write...
>
> You sound far from wearing the chip out. There must be another problem
> there somewhere.
Hmm...
> >> There was a patch posted just a week or so ago here which fixed a
> >> problem with bad block marking and recognition when not using a
> >> flash-based bad block table.
> >
> > I'm new to the list. Is this Artem's patch? I applied it, but no
> > success... Maybe
> > http://lists.infradead.org/pipermail/linux-mtd/2007-May/018087.html?
>
> By Thomas Knobloch I believe, but yes, that's the patch I was thinking of.
I applied it but no success...
------------
I tried K9F1208U0A with linux-2.6.20 -> JFFS2 file system. I successfully used
the part.
Secondly, I tried yaffs with that part in the linux-2.6.11. It was successful
too.
--
Bora SAHIN
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2007-05-21 9:24 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-10 18:50 NAND flash write goes wrong borasah
2007-05-10 19:16 ` Josh Boyer
2007-05-10 21:37 ` borasah
2007-05-10 22:15 ` Thomas Gleixner
2007-05-10 22:42 ` borasah
2007-05-11 6:36 ` Ricard Wanderlof
2007-05-11 6:57 ` Artem Bityutskiy
2007-05-11 7:16 ` Matthieu CASTET
2007-05-11 7:42 ` Artem Bityutskiy
2007-05-11 7:49 ` Artem Bityutskiy
2007-05-11 13:56 ` borasah
2007-05-11 14:31 ` Ricard Wanderlof
2007-05-11 17:58 ` borasah
2007-05-14 6:56 ` Ricard Wanderlof
2007-05-21 9:30 ` borasah
[not found] <42E999AD7A0E4647BF159F467EE4FBCB017B5155@BLR-SGM-MSG01.wipro.com>
2007-05-14 7:39 ` Ricard Wanderlof
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).