YAFFS2文件制作以及烧写工具的特殊处理

        如果各位看官对yaffs文件系统不熟悉,看一下鄙人的拙作《Yaffs文件系统简介 》也未尝不是一件好事儿,毕竟开卷有益。

       这篇文章主要简单的描述yaffs2文件的制作,以及在烧写的过程中数据的处理。以便区分yaffs2文件和其它不同的文件系统。

        上一篇文章《SLC NAND FLASH的物理结构》中讲述过SLC NAND FLASH的硬件的特殊性,是包括data area+spare area两部分,因为yaffs是nand special file system。因此必然会好好利用nand的spare area存储一些数据。当然也有可能使用者就觉得没必要使用spare区存储数据或者一些其他原因没有使用这部分物理存储区存储数据,那么是不是yaffs文件系统就没有办法了呢,当然设计者应该想到这些地方。因为在yaffs2文件系统中就设置了一个选项让使用者选择是in-bind还是out-bind。

         我们假定使用者使用spare区存储了数据,这里在nand的驱动中成为FTL数据。这就是一个硬件和软件称呼上有差别的地方,并不应该影响我们的理解。硬件上称为data area+spare area,软件上成为data area+oob spare(FTL spare)

         既然如上述情况,那么我们在使用的时候需要将spare area写入我们需要的数据,而这部分数据的长度大小如何界定呢?

        拿page为2K的nand来讲,一般使用2048B+64B的空间设定,2048B的data area会分为4个subpage,而通常nand都会使用ECC进行数据的校验和纠正。根据不同的ECC使用的ECC校验码的位数也有不同。拿ECC4来讲,占用了7B的数据位。这样的ECC能够校验512B的页大小,算下来四个subpage需要4*7B0=28B的ECC校验码。那么还剩余的空间为64B-28B=36B的数据,因此我们可以设定yaffs2文件系统使用28B-36B的数据长度来存储文件系统所需要的数据。

        因为文件系统是给kernel使用的,因此在kernel中的设置一定是要和烧写工具中的设置以及yaffs2文件的长度一致。此处切记!!!否则会因为数据长度的不对导致一些错误。在通过USB数据线进行文件的烧写工作时,为了确保数据的正确性,会将数据进行CRC校验。通过传输端和读取端数据的CRC值的比较确认数据传输过程中是否有误。此处要注意CRC是传输过程中的数据校验方式,而ECC是NAND芯片为了保证读取数据时的正确性而使用的。而在实际的存储过程中,会把这两部分的数据全部存储在spare area。

你可能感兴趣的:(YAFFS2文件制作以及烧写工具的特殊处理)