Dear Charles,
i use Yaffs Direct Interface in my application.
1¡¢i think i've found a bug in yaffs_tagscompat.c in function yaffs_TagsCompatabilityReadChunkWithTagsFromNAND()
in this function there is the following section :
if (eTags->chunkUsed) {
yaffs_GetTagsFromSpare(dev, &spare, &tags);
+ if (dev->tagsEccUnfixed) {
+ eTags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
+ }
eTags->objectId = tags.objectId;
eTags->chunkId = tags.chunkId;
eTags->byteCount = tags.byteCountLSB;
....
}
i add the red code, if not, when power failure during writing Tags to nand. next time when power on, the block maybe retired (but this does't mean the block is really broken).
you can take a test by
2¡¢When I'm writting chuck data to nand, the writting opration may not completed because of power failure.(Progressing, is interrupted)
Next time when power on, the block may be flaged retired.
function yaffs_HandleReadDataError() in yaffs_tagscompat.c, you take a comment
/* TODO:
* Just do a garbage collection on the affected block
* then retire the block
* NB recursion
*/
Can you take a sample to show how to do it here?
Best Regards,