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

📄 nandflash.h

📁 AT91SAM7SE系列IAR编程中外扩NAND的源码。
💻 H
字号:
// ----------------------------------------------------------------------------
//         ATMEL Microcontroller Software Support  -  ROUSSET  -
// ----------------------------------------------------------------------------
// DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ----------------------------------------------------------------------------
// File Name           : NandFlash.h
// Object              :
// 1.0 18/Dec/06 WG   : Creation
// ----------------------------------------------------------------------------

#define AT91C_NAND_FLASH_BASE 	0x40000000  // NCS3 Base address

#define AT91_NANDALE            (1 << 21)   // NANDALE is A21
#define AT91_NANDCLE            (1 << 22)   // NANDCLE is A22

#define DBGU_BUFFER             64

//*----------------------------------------------------------------------------
//* SAMSUNG K9F2G08U0M constants definition
//* 256M x 8 Bit NAND Flash Memory
//* http://www.samsung.com/Products/Semiconductor/NANDFlash/SLC_LargeBlock/2Gbit/K9F2G08U0M/ds_k9f2gxxu0m_rev12.pdf
//*----------------------------------------------------------------------------
#define NB_OF_BLOCKS            2048
#define NB_OF_PAGES             512
#define MAIN_AREA_SIZE          2048
#define SPARE_AREA_SIZE         64

//*----------------------------------------------------------------------------
//* Standard NAND Flash commands
//*----------------------------------------------------------------------------
#define NAND_CMD_READ1                  0x00
#define NAND_CMD_READ2                  0x30
#define NAND_CMD_READID			0x90
#define NAND_CMD_RESET			0xFF
#define NAND_CMD_PAGEPROG1		0x80
#define NAND_CMD_PAGEPROG2		0x10
#define NAND_CMD_ERASE1			0x60
#define NAND_CMD_ERASE2			0xD0
#define NAND_CMD_STATUS			0x70
#define NAND_CMD_RDM_PAGEPROG       	0x85
#define NAND_CMD_RDM_READ1       	0x05
#define NAND_CMD_RDM_READ2       	0xE0

//*----------------------------------------------------------------------------
//* Column Address Offset
//*----------------------------------------------------------------------------
#define ECC_LSB_OFFSET                  0x08
#define ECC_MSB_OFFSET                  0x08

#define SPARE_LSB_OFFSET                0x00
#define SPARE_MSB_OFFSET                0x08

//*----------------------------------------------------------------------------
//* NAND flash Macros compatible with 8 bits devices
//*----------------------------------------------------------------------------
#define WRITE_NAND_COMMAND(d) do{ *(volatile unsigned char *)((unsigned long)AT91C_NAND_FLASH_BASE | AT91_NANDCLE) = (unsigned char)(d); } while(0)
#define WRITE_NAND_ADDRESS(d) do{ *(volatile unsigned char *)((unsigned long)AT91C_NAND_FLASH_BASE | AT91_NANDALE) = (unsigned char)(d); } while(0)
#define WRITE_NAND(d) do{ *(volatile unsigned char *)((unsigned long)AT91C_NAND_FLASH_BASE) = (unsigned char)d; } while(0)
#define READ_NAND() ((volatile unsigned char)(*(volatile unsigned char *)(unsigned int)AT91C_NAND_FLASH_BASE))

#define NAND_DISABLE_CE() do { *AT91C_PIOB_SODR = AT91C_PIO_PB18;} while(0)
#define NAND_ENABLE_CE() do { *AT91C_PIOB_CODR = AT91C_PIO_PB18;} while(0)
#define NAND_WAIT_READY() while (!(*AT91C_PIOB_PDSR & AT91C_PIO_PB19))


//*----------------------------------------------------------------------------
//* Structure definition
//*----------------------------------------------------------------------------
typedef struct SNandInfo
{
	unsigned int Page_Size	;
        unsigned int Block_Size	; 	
	unsigned int Spare_Size ;
	unsigned int Bus_Width	;


} SNandInfo, *PSNandInfo;


//*----------------------------------------------------------------------------
//* External function prototype
//*----------------------------------------------------------------------------

extern void AT91F_EBI_NandFlash_CfgPIO(void);
extern void AT91F_NandFlash_Init (void);
extern void AT91F_NandFlash_Reset (void);
extern void AT91F_NandFlash_Read_ID (PSNandInfo);
extern short AT91F_NandFlash_Create_Bad_Block_Table (PSNandInfo,unsigned char*);
extern void AT91F_NandFlash_Page_Read (PSNandInfo,unsigned char* Page_Buffer,unsigned short Block_Reference,unsigned short Page_Reference);
extern void AT91F_NandFlash_Block_Erase (PSNandInfo,unsigned char* Bad_Block_Table,unsigned short Block_Reference);
extern void AT91F_NandFlash_Page_Write (PSNandInfo,unsigned char* Bad_Block_Table,unsigned char* Page_Buffer,unsigned short Block_Reference,unsigned short Page_Reference);
extern short AT91F_NandFlash_Status_Read(void);


⌨️ 快捷键说明

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