📄 driver.c
字号:
#include "w90p710_nandflash.h"
void NandFlashInitController(void)
{
//Reset
NFLASH_CMD(CMD_RESET);
NFLASH_WAITRB;
}
void INVALID(void)
{
rSDRAM&0xFF;
}
unsigned int ReadID(void)
{
unsigned int ID;
/*Send Read ID Command*/
NFLASH_CMD(CMD_ID);
/*Send Address 0*/
NFLASH_ADDR(0);
NFLASH_READ_ID_WAIT;
/*Get Manu ID*/
ID=NFLASH_DATA<<8 ;
/*Get Devic ID*/
ID +=NFLASH_DATA;
INVALID();
return ID;
}
unsigned char Erase_Block(unsigned int block)
{
unsigned int blockPage=(block<<5);
int i;
NFLASH_CMD(0x60);//60h:块擦除
NFLASH_ADDR(blockPage&0xff);
NFLASH_ADDR((blockPage>>8)&0xff);
NFLASH_DELAY(2);
NFLASH_CMD(0xd0);//擦除确认指令
NFLASH_DELAY(3);
// NFLASH_DATA&0xff; //此句可要也可不要
NFLASH_WAITRB;
NFLASH_CMD(0x70);//读当前状态
if(NFLASH_DATA&0x1)
{
INVALID();
return 0;
}
else
{
INVALID();
return 1;
}
}
int Write_Page(unsigned int block,unsigned int page,unsigned char *buffer)
{
unsigned int blockPage=(block<<5)+page;
int i;
// unsigned char *Source;
// Source=buffer;
NFLASH_CMD(0x80);
NFLASH_ADDR(0);
NFLASH_ADDR(blockPage&0xff);
NFLASH_ADDR(blockPage>>8&0xff);
for(i=0;i<528;i++)
{
NFLASH_DATA=*buffer++;
}
NFLASH_CMD(0x10);
NFLASH_RB_WAIT;
NFLASH_WAITRB;
NFLASH_CMD(0x70);
NFLASH_DELAY(3);
if(NFLASH_DATA&0x1)
{
INVALID();
return 0;
}
else
INVALID();
}
void Read_Page(unsigned int block,unsigned int page,unsigned char *buffer)
{
int i;
unsigned int blockPage=(block<<5)+page;
NFLASH_CMD(0x00);
NFLASH_ADDR(0);
NFLASH_ADDR(blockPage&0xff);
NFLASH_ADDR(blockPage>>8&0xff);
for(i=0;i<3;i++);
NFLASH_WAITRB;
for(i=0;i<528;i++)
{
*buffer++=NFLASH_DATA;
}
INVALID();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -