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