⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nand.h

📁 Embest IDE下s3c2440的测试工程
💻 H
字号:
#ifndef __NAND_H
#define __NAND_H

//#define BAD_CHECK	(0)
#define ECC_CHECK	(1)

#define ASM		1
#define C_LANG	2
#define DMA		3
#define TRANS_MODE 1

#define CMD_READ                    0x00        //  Read
#define CMD_READ1                   0x01        //  Read1
#define CMD_READ2                   0x30        //  Read2
#define CMD_READID                  0x90        //  ReadID
#define CMD_WRITE                   0x80        //  Write phase 1
#define CMD_WRITE2                  0x10        //  Write phase 2
#define CMD_ERASE                   0x60        //  Erase phase 1
#define CMD_ERASE2                  0xd0        //  Erase phase 2
#define CMD_STATUS                  0x70        //  Status read
#define CMD_RESET                   0xff        //  Reset

//  Status bit pattern
#define STATUS_READY                0x40        //  Ready
#define STATUS_ERROR                0x01        //  Error


#define OEM_BLOCK_RESERVED		0x01
#define OEM_BLOCK_READONLY		0x02
#ifndef BADBLOCKMARK
#define BADBLOCKMARK                0x44
#endif

// FMD block status definitions.
#define BLOCK_STATUS_UNKNOWN	0x01
#define BLOCK_STATUS_BAD		0x02
#define BLOCK_STATUS_READONLY	0x04
#define BLOCK_STATUS_RESERVED 0x08

// FMD OEM reserved area bitfield.
#define OEM_BLOCK_RESERVED		0x01
#define OEM_BLOCK_READONLY		0x02

#define SECTOR_SIZE	                2048

//*************************************************
//*************************************************
//**           H/W dependent functions           **
//************************************************* 
//*************************************************

//The code is made for bi-endian mode

// block0: reserved for boot strap
// block1~4095: used for OS image
// badblock SE: xx xx xx xx xx 00 ....
// good block SE: ECC0 ECC1 ECC2 FF FF FF ....

//=============    spare area configuration    ====================================
//     0		1		2		3		4		5		6		7		8		9		0xa ...	
//  Mecc0   Mecc1     Mecc2         FF           FF      Bad Block     FF           FF        Secc0     Secc1          FF
//====================================================================


#define NF_MECC_UnLock()         {rNFCONT&=~(1<<5);}
#define NF_MECC_Lock()         {rNFCONT|=(1<<5);}
#define NF_SECC_UnLock()         {rNFCONT&=~(1<<6);}
#define NF_SECC_Lock()         {rNFCONT|=(1<<6);}
#define NF_CMD(cmd)			{rNFCMD=cmd;}
#define NF_ADDR(addr)		{rNFADDR=addr;}	
#define NF_nFCE_L()			{rNFCONT&=~(1<<1);}
#define NF_nFCE_H()			{rNFCONT|=(1<<1);}
#define NF_RSTECC()			{rNFCONT|=(1<<4);}
#define NF_RDDATA() 		(rNFDATA)
#define NF_RDDATA8() 		((*(volatile unsigned char*)0x4E000010) )
#define NF_WRDATA(data) 	{rNFDATA=data;}
#define NF_WRDATA8(data) 	{rNFDATA8=data;}

// RnB Signal
#define NF_CLEAR_RB()    		{rNFSTAT |= (1<<2);}	// Have write '1' to clear this bit.
#define NF_DETECT_RB()    		{while(!(rNFSTAT&(1<<2)));}

#define NF_DATA_R()   rNFDATA
#define NF_DATA_W4(data) 	{rNFDATA=data;}
#define NF_DATA_W(data) 	{rNFDATA8=data;}


#define NF_ECC()      rNFMECC0


#define ID_NAND			0xecd3

#define ID_K9S1208V0M	0xec76
#define ID_K9K2G16U0M	0xecca
#define ID_K9F1G08U0A	0xecf1		//need to be modified	
#define ID_K9K8G08U0A	0xecd3

// HCLK=100Mhz
#define TACLS		0	// 1-clk(0ns) 
#define TWRPH0		6	// 3-clk(25ns)
#define TWRPH1		2	// 1-clk(10ns)  //TACLS+TWRPH0+TWRPH1>=50ns

#define USE_NFINIT   (0)
////////////////////////////// 8-bit ////////////////////////////////
static int NF8_EraseBlock(U32 blockNum);
static int NF8_ReadPage(U32 block,U32 page,U8 *buffer);
static int NF8_WritePage(U32 block,U32 page,U8 *buffer);
static int NF8_IsBadBlock(U32 block);
static int NF8_MarkBadBlock(U32 block);

int NF8_ReadPage2(U32 block,U32 page,U8 *buffer);

// Main function
void Test_Nand(void);

// Sub function
void Test_K9S1208(void);
void Test_K9F1G08(void);
void Test_K9K8G08(void);

void NandFlashProgram(U32 block,U32 filesize);

void PrintSubMessage(void);
void Test_NF8_Rw(void);
void Test_NF8_Page_Write(void);
void Test_NF8_Page_Read(void);
void Test_NF8_Block_Erase(void);
void NF8_PrintBadBlockNum(void);
void Test_NF8_Lock(void);
void Test_NF8_SoftUnLock(void);

U8 Read_Status(void);

//*************** H/W dependent functions ***************
// Assembler code for speed
void __RdPage512(U8 *pBuffer);
void __RdPage2048( U8 *pBuffer);
void __WritePage512(U8 *pBuffer, PUSHORT pNFData);
void __WritePage2048(U8 *pBuffer, PUSHORT pNFData);

void Nand_Reset(void);
void InputTargetBlock(void);

void NF8_Print_Id(void);
U16 NF8_CheckId(void);
void NF8_Init(void);

//*******************************************************



#endif /*__NAND_H*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -