📄 nandflash.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 + -