- 论坛徽章:
- 0
|
已经把nand_ecc.c yaffs_ecc.c wince ecc.c看完了.
在nand_ecc.c跟yaffs_ecc.c 中,都是以512b中分为2部256b校验一次,并且他们的ECC_TABEL也是一样的,1BIT的矫正代码中,错误情况判断相同,处理也是相同的,这样可以不可以说:他们关于ECC的1BIT矫正这块算法就是一样的?
它们的行校验只有16位,而且在512b里有6b的ECC校验
S3C2410A手册中:NAND 控制器里
512-BYTE ECC PARITY CODE ASSIGNMENT TABLE
ECC0 P64 P64’ P32 P32’ P16 P16’ P8 P8’
ECC1 P1024 P1024’ P512 P512’ P256 P256’ P128 P128’
ECC2 P4 P4’ P2 P2’ P1 P1’ P2048 P2048
这里可以看出,行校验是18位的,而且是512b校验一次3b的ECC.
而在实际应用当中,S3C2410A上nand_ecc是可以使用的.
那么,它们是如何统一起来的呢?nand_ecc yaffs_ecc它们计算ECC与S3C2410A的硬件ECC并不一致啊.存在oob里的ECC字节数也不一样.
WINCE里的校验用的就是纯硬件ECC也是512b校验一次,不存在问题.
知识有限~请各位懂的牛人指导一下吧~ 因为nand_ecc或yaffs_ecc虽然可以用,但是在标记坏块儿时,有时并不准确.比如linux有坏块儿的flash 在WINCE底下格完就没了.而本身标记出来的坏块儿如果不是第1块或第2块应该不影响烧写nand的,但是现在在文件系统的位置有一个坏块儿,直接导致无法烧写了.这是由于nand_ecc与S3C2410A ECC有差异造成的吗?
[ 本帖最后由 jn200002 于 2008-6-30 17:29 编辑 ] |
|