Nandflash 驱动移植(六)

2014-11-24 09:13:46 · 作者: · 浏览: 2

#define NF_RDMECC1() (g_pNFConReg->NFMECC1)
#define NF_RDSECC() (g_pNFConReg->NFSECC)

#define NF_RDM8ECC0() (g_pNFConReg->NFM8ECC0)
#define NF_RDM8ECC1() (g_pNFConReg->NFM8ECC1)
#define NF_RDM8ECC2() (g_pNFConReg->NFM8ECC2)
#define NF_RDM8ECC3() (g_pNFConReg->NFM8ECC3)

#define NF_RDMECCD0() (g_pNFConReg->NFMECCD0)
#define NF_RDMECCD1() (g_pNFConReg->NFMECCD1)
#define NF_RDSECCD() (g_pNFConReg->NFSECCD)

#define NF_ECC_ERR0 (g_pNFConReg->NFECCERR0)
#define NF_ECC_ERR1 (g_pNFConReg->NFECCERR1)

#define NF_ECC8BIT_NUM ((g_pNFConReg->NF8ECCERR0 & (0xf<<25))>>25)
#define NF_ECC8LOCATION_BYTE1 (g_pNFConReg->NF8ECCERR0 & (0x3ff))
#define NF_ECC8LOCATION_BYTE2 ((g_pNFConReg->NF8ECCERR0 & (0x3ff<<15))>>15)
#define NF_ECC8LOCATION_BYTE3 (g_pNFConReg->NF8ECCERR1 & (0x3ff))
#define NF_ECC8LOCATION_BYTE4 ((g_pNFConReg->NF8ECCERR1 & (0x3ff<<11))>>11)
#define NF_ECC8LOCATION_BYTE5 ((g_pNFConReg->NF8ECCERR1 & (0x3ff<<22))>>22)
#define NF_ECC8LOCATION_BYTE6 (g_pNFConReg->NF8ECCERR2 & (0x3ff))
#define NF_ECC8LOCATION_BYTE7 ((g_pNFConReg->NF8ECCERR2 & (0x3ff<<11))>>11)
#define NF_ECC8LOCATION_BYTE8 ((g_pNFConReg->NF8ECCERR2 & (0x3ff<<22))>>22)

#define NF_ECC8LOCATION_BIT(n) (n <= 4) ((g_pNFConReg->NFMLC8BITPT0 & (0xff<<((n-1)*8)))>>((n-1)*8)):((g_pNFConReg->NFMLC8BITPT1 & (0xff<<((n-5)*8)))>>((n-5)*8))

#define NF_ECC4BIT_NUM ((g_pNFConReg->NFECCERR0 & (0x7<<26))>>26)
#define NF_ECC4LOCATION_BYTE(n) ((n <= 2) ((g_pNFConReg->NFECCERR0 & (0x3ff<<((n-1)*16)))>>((n-1)*16)):((g_pNFConReg->NFECCERR1 & (0x3ff<<((n-3)*16)))>>((n-3)*16)))

#define NF_ECC4LOCATION_BIT(n) ((g_pNFConReg->NFMLCBITPT & (0xff<<((n-1)*8)))>>((n-1)*8))

#define NF_WRMECCD0(data) {g_pNFConReg->NFMECCD0 = (data);}
#define NF_WRMECCD1(data) {g_pNFConReg->NFMECCD1 = (data);}
#define NF_WRSECCD(data) {g_pNFConReg->NFSECCD = (data);}

#define NF_RDSTAT (g_pNFConReg->NFSTAT)

//-----------------------------------------------------------------------------

typedef enum
{
ECC_CORRECT_MAIN = 0, // correct Main ECC
ECC_CORRECT_SPARE1 = 1, // correct Spare for Sector Info using Main ECC Result Area
ECC_CORRECT_SPARE2 = 2, // correct Spare for MECC using Main ECC Result Area
ECC_CORRECT_SPARE = 3 // correct Spare using Spare ECC Result Area
} ECC_CORRECT_TYPE;

//-----------------------------------------------------------------------------

#endif // __NAND_H_.

nand.h文件里有8bit ECC的相关定义,不要高兴的太早,这里面是有错滴,不知道是不是飞凌那边故意搞错的,还是本来就不是6410的。
且看定义:
#define NF_ECC_8BIT_STOP() {g_pNFConReg->NFCONT |= (1<<12);} //stop the last encode or decode of 8bit mode.

对比文档看一下这个NFCONT[12]是干什么的


NFCONT[11]这个才是8bitStop,但为什么源码中要定义NFCONT[12]为NF_ECC_8BIT_STOP,这个容易让人产生误解。咱还是改一下吧!
#define NF_ECC_8BIT_STOP() {g_pNFConReg->NFCONT |= (1<<11);}