📄 nand.h
字号:
#ifndef __NAND_H
#define __NAND_H
#ifdef __cplusplus
extern "C" {
#endif
#define FAIL 0
#define OK 1
#define NF_MECC_UnLock() {rNFCONT&=~(1<<7);}
#define NF_MECC_Lock() {rNFCONT|=(1<<7);}
#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_nCS1_L() {rNFCONT&=~(1<<2);}
#define NF_nCS1_H() {rNFCONT|=(1<<2);}
#define NF_nFCE_L() {rNFCONT&=~(1<<1);}
#define NF_nFCE_H() {rNFCONT|=(1<<1);}
#define NF_RSTECC() {rNFCONT|=(1<<5)|(1<<4);}
#define NF_RDDATA() (rNFDATA)
#define NF_RDDATA8() ((*(volatile unsigned char*)0x4E000010) )
#define NF_RDDATA16() ((*(volatile unsigned short*)0x4E000010) )
#define NF_WRDATA(data) {rNFDATA=data;}
#define NF_WRDATA8(data) {rNFDATA8=data;}
// RnB Signal
#define NF_CLEAR_RB() {rNFSTAT |= (1<<4);} // Have write '1' to clear this bit.
#define NF_DETECT_RB() {while(!(rNFSTAT&(1<<4)));}
#define ID_K9S1208V0M 0xec76
#define ID_KMXD64P3 0x9876
#define ID_K9K2G08U0M 0xecda
#define ID_K9K2G16U0M 0xecca
// HCLK=100Mhz
#define TACLS 1 // 1-clk(0ns)
#define TWRPH0 3 // 3-clk(25ns)
#define TWRPH1 1 // 1-clk(10ns) //TACLS+TWRPH0+TWRPH1>=50ns
#define BAD_MARK (0x44444444)
////////////////////////////// 8-bit ////////////////////////////////
// Main function
void Test_NAND(void);
// Sub function
void Test_K9S1208(void);
void NF8_Program(void);
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);
void Test_K9F2G08(void);
void Adv_NF8_Program(void);
void Adv_PrintSubMessage(void);
void Test_Adv_NF8_Rw(void);
void Test_Adv_NF8_Page_Write(void);
void Test_Adv_NF8_Page_Read(void);
void Test_Adv_NF8_Block_Erase(void);
void Adv_NF8_PrintBadBlockNum(void);
void Test_Adv_NF8_Lock(void);
void Test_Adv_NF8_SoftUnLock(void);
void Test_MLC_Adv_ECC(void);
void Test_MLC_ECC(void);
U8 Read_Status(void);
//*************** H/W dependent functions ***************
// Assembler code for speed
void Nand_Reset(void);
void InputTargetBlock(void);
void NF8_Print_Id(void);
static U16 NF8_CheckId(void);
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);
void NF8_Print_Id(void);
static U16 NF8_CheckId(void);
void InputTargetBlock_Adv(void);
static int Adv_NF8_EraseBlock(U32 blockNum);
static int Adv_NF8_ReadPage(U32 block,U32 page,U8 *buffer);
static int Adv_NF8_WritePage(U32 block,U32 page,U8 *buffer);
static int Adv_NF8_IsBadBlock(U32 block);
static int Adv_NF8_MarkBadBlock(U32 block);
static void NF8_Init(void);
void SRAM_Test(int Print_msg);
//*******************************************************
#ifdef __cplusplus
}
#endif
#endif /*__NAND_H*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -