📄 nand.c
字号:
#include "def.h"
#include "utils.h"
#define NAND_FLASH_SUPPORT
#ifdef NAND_FLASH_SUPPORT
struct NFChipInfo {
U32 id;
U32 size;
}
static NandFlashChip[] = {
{0xec73, SIZE_16M},
{0xec75, SIZE_32M},
{0xec76, SIZE_64M},
{0xec79, SIZE_128M},
{0, 0},
};
static U32 support;
static U32 nand_id;
#define READCMD0 0
#define READCMD1 1
#define READCMD2 0x50
#define ERASECMD0 0x60
#define ERASECMD1 0xd0
#define PROGCMD0 0x80
#define PROGCMD1 0x10
#define QUERYCMD 0x70
#define READIDCMD 0x90
#define NFChipEn() NFChipSel(1)
#define NFChipDs() NFChipSel(0)
#define NFIsBusy() (!NFIsReady())
static U32 NFReadID(void)
{
U32 id, loop = 0;
NFChipEn();
NFWrCmd(READIDCMD);
NFWrAddr(0);
while(NFIsBusy()&&(loop<10000)) loop++;
if(loop>=10000)
return 0;
id = NFRdDat()<<8;
id |= NFRdDat();
NFChipDs();
return id;
}
static U16 NFReadStat(void)
{
U16 stat;
NFChipEn();
NFWrCmd(QUERYCMD);
stat = NFRdDat();
NFChipDs();
return stat;
}
void NandFlashInit(void)
{
int i;
support = 0;
nand_id = NFReadID();
for(i=0; NandFlashChip[i].id!=0; i++)
if(NandFlashChip[i].id==nand_id) {
nand_id = i;
support = 1;
return;
}
}
void NandFlashStatusRep(void)
{
if(support) {
printf("\nNand Flash ID is 0x%x, Size = %dM, Status = 0x%x\n", NandFlashChip[nand_id].id, NandFlashChip[nand_id].size>>20, NFReadStat());
} else {
printf("\nNo supported Nand Flash Found!\n");
}
}
//void (*pNandFlashInit)(void) = NandFlashInit;
#endif /* NAND_SUPPORT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -