Yaffs2支持 2K page的nandflash读写。2k page的nandflash包含的oob数据为64 bytes。Yaffs利用了oob区保存了自己的节点信息。对于数据的ecc,yaffs并不参与计算生成,而是交给mtd来处理。其中决定yaffs是否生成数据的ecc的关键是useNANDECC。如果这个变量=1,则mtd生成数据的ecc。可以通过 cat /proc/yaffs来检查yaffs的配置信息
如果yaffs不生成数据的ecc,则oob数据区的使用由mtd来管理。Mtd根据nand_base.c中的nand_ecclayout结构来定义。
Mtd采用256 bytes数据生成3个ecc数据的算法。如果是2048的数据,需要的ecc数据为24个。Eccbytes = 24。这24个ecc数据在oob区中的位置为从第40个开始,到第63个结束。就是在oob区的最后排列。Eccpos描述了这个排列方法。Oob其他未使用的数据定义为oobfree,开始为第2个,长度有38个。这样整个oob区如下分布
最开始的两个没有使用,用来标识badblock,接下来的38个为free区,最后的24个用来保存数据的ecc。
Yaffs使用了oobfree中的28(16+12)bytes用来保存节点信息yaffs_PackedTags2。这个信息包含一个tags和对应的ecc数据。