Charles Manning a écrit : >On Tuesday 09 August 2005 00:26, Ludovic Guilhamat wrote: > > >>Hi, >> >>I found some other clues about my problem, but I didn't fully manage it >>yet... >> >>Brief summary : I want to use yaffs on linux-2.4.22 kernel with uClinux >>(m68k coldfire), and with the MTD of the 2.4.22 kernel. (I attempted to >>backport a newer MTD, but without success for the moment). My Flash is a >>Samsung 16Mb Nand. >> >> > >Part numbers please. Different parts have different properties. > > > > >>So, my problem occurs when I erase a file on my 2Mb partition. More >>precisely, it occurs when I want to copy/create some other files. Hence, >>I think it's the garbage collect process that is the source of my >>problem on my system. >> >> > >In almost all cases, problems that arise during gc are cause by one of: >1) flash geometry issue. The block size you have specified in yaffs or mtd >does not match the physical hardware. >2) Some issue with ECC or low-level NAND access functions. > > > > > >>Here is the log: >> >>* after erasing the file : >> >>yaffs locking >>___________ really free is 3033, pending 1001, nFree is 4034 >>yaffs unlocking >> >>* When I want to recreate a file after an unmount / mount : >> >>nand_read_ecc: from = 0x00909e00, len = 512 >>nand_read_oob: from = 0x00909e00, len = 16 >>nand_write_oob: to = 0x00908000, len = 16 >>nand_write_oob: Failed write verify, page 0x00004840 <----- This >>corresponds to the (falsely) damaged marked blocks that I see when I >>nand_write_oob: to = 0x00908200, len = 16 >>nand_write_oob: Failed write verify, page 0x00004841 <----- want to >>format my partition. >> >> > >You need to turn off write verification in the mtd and do that in YAFFS >instead. > > > >>* Finally, here is the interesting part of 'cat /proc/yaffs' : >> >>nPageWrites........ 10 >>nPageReads......... 181 >>nBlockErasures..... 0 >>nGCCopies.......... 0 >>garbageCollections. 3 <----- It seems that at each garbage >>collection, 8Kb are used on my partition (is it normal ?). Then, >>passiveGCs......... 3 <----- I find 104Kb used, instead of 80Kb... >>nRetriedWrites..... 0 >>nRetireBlocks...... 3 >> >> > >Retired blocks == blocks that YAFFS has decided went bad and then marked bad. >This is most likely caused by a mismatch between YAFFS and mtd, most likely >in either the ECC or similar area. > >-- Charles > > Hi, I finally resolved my problem... My Nand Flash is a Samsung K9F2808U0C which needs the defaults parameters in Yaffs (512 bytes per chunk, 16 bytes for spare area and 32 chunks per block). I think my problem was that I hadn't included some configuration options in my Config.in... : the linux file caching layer, the 'use object header size' and the 'Turn off debug chunk erase check'. I hadn't port these config options because I wanted to port little by little the yaffs on my linux tree. But now, with the first two options activated, it works well. Thanks and regards. Ludovic.