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

📄 nand_drv.h

📁 Nand Flash low driver。
💻 H
字号:

#ifndef __NAND512__H__
#define __NAND512__H__
#include "hdcfg.h"

#define NUM_BLOCKS				 4096
#define NUM_PAGE_BLOCK  			 32


#if (NFLASH_TYPE == TYPE_IS_K9F1208X0B) 
#define ID_IS_K9F1208R0B	  		0x36
#define ID_IS_K9F1208B0B	  		0x76
#define ID_IS_K9F1208U0B	  		0x76
#define MULTI_PLANE_CODE	 		0xc0
#endif    // #if (NFLASH_TYPE == TYPE_IS_K9F1208X0B) 

#define TOGGLE_BIT					0x40
#define TOTAL_PASS_BIT				0x01
#define MULTI_PASS_BIT				0x01f
#define WRITE_PROTECT_BIT   			  0x80
#define PAGES_OF_BLOCK    			0x20	/*pages in one physical block  */
#define FLASH_SIZE_64MB 			0x04000000   //64M bytes +2048k
#define MAX_BLOCK 					4096 
#define MAX_PAGE 					(4096*32) 
#define PAGE_SPARE_SIZE			16
#define FLASH_WIDTH 		  8 			 /* Flash data width */
#define PAGE_SIZE   		  528   		 /* Page size in byte */ 
#define PAGE_DATA_SIZE     	 512			/* Page data size in byte */
#define PAGE_SPARE_SIZE 	  16			 /* Spare page size in byte */
#define HALF_PAGE_POINTER     (UINT8) 0x01   /* Half page Pointer */
#define SHIFT_A8				 1


/****************************************************************************
			Utility
****************************************************************************/   						
#define ADDRESS_2_BLOCK(Address)		(Address >> (13+HALF_PAGE_POINTER)) 
#define BLOCK_SIZE 					  (PAGE_DATA_SIZE*NUM_PAGE_BLOCK)
#define BLOCK_2_ADDRESS(Num_block)  	((UINT32) (Num_block* BLOCK_SIZE))
/**************  Utility ***************/ 


/****************************************************************************
			Return Codes
****************************************************************************/
typedef UINT8 NAND_Ret;
typedef UINT8 dataWidth;

typedef struct tNLFASH_INFO_STRUCT
{
	UINT8 maker_code ;
	UINT8 device_code ;
	UINT8 multi_plane_code ;
}tNLFASH_INFO_STRUCT;



/*********error code definition  start***********/
#define NAND_FAIL 				0
#define NAND_PASS  				1
#define NAND_SW_ERR 				2
#define NAND_FULL_ERR 			3
#define NAND_DMA_TIMEOUT 		4
#define NAND_TABLE_ERR 			5
#define NAND_ECC_PASS  			1
#define NAND_ECC_ERR     			6
#define NAND_WRPRT_ERR			7
#define NAND_VERIFY_ERR   		8
#define NAND_ID_ERR   				9
#define NAND_HW_ERR     			10
#define NAND_PRG_FAIL    			11
#define NAND_MAP_ERR			12
#define NAND_LBA_NOEXSIT 			13
#define NAND_MAP_NOEXSIT 			14
#define NAND_FULL						15 
#define NAND_PAGE_OVERFLOW			16
#define NAND_ADDR_OVERFLOW			17
#define NAND_DMA_INVALID			18
#define NAND_UNDEFINED_ERR                 19
/*********error code difinition end ***********/

/**************  Return Codes ***************/ 



/****************************************************************************
			Hardware independent function
****************************************************************************/
NAND_Ret NAND_Init(void);

NAND_Ret NAND_BlockErase(UINT32 udAddress);
#if (NFLASH_TYPE == TYPE_IS_K9F1208X0B) 
NAND_Ret NandChipFastErase(void);
#endif/*(NFLASH_TYPE == TYPE_IS_K9F1208X0B) */

NAND_Ret NAND_CopyBack(UINT32 udSourceAddr, UINT32 udDestinationAddr);

NAND_Ret NAND_PageRead(UINT32 udAddress, dataWidth *Buffer, UINT32 udLenght);

NAND_Ret NAND_PageReadWithEcc(UINT32 udAddress, dataWidth *pReadBuf, UINT32 len);

NAND_Ret NAND_PageProgram(UINT32 udAddress, dataWidth *Buffer, UINT32 udLenght);

NAND_Ret NAND_PageProgramWithEcc(UINT32 udAddress, dataWidth *Buffer, UINT32 udLenght);

NAND_Ret NAND_SpareProgram(UINT32 udAddress, dataWidth *Buffer, UINT32 udLenght);

NAND_Ret NAND_SpareRead(UINT32 udAddress, dataWidth *Buffer, UINT32 udLenght);

NAND_Ret NAND_SpareReadRandom(UINT32 udAddress, dataWidth *pOobBuf, UINT32 udLenght);

/**************  Hardware independent function ***************/

#endif //__NAND512__H__






⌨️ 快捷键说明

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