NAND.c

#include "nand.h"
//#include "printf.h"




static void NF_Reset()
{

NF_Enable();
NF_Enable_RB();
NF_Send_Cmd(NAND_CMD_RESET);
NF_Check_Busy();
NF_Disable();
}


#define TACLS   1
#define TWRPH0  4
#define TWRPH1  0
void NF_Init(void)
{

rGPACON &= ~(0x3f << 17);

rGPACON |= (0x3f << 17);

rNFCONF = (TACLS << 12)|(TWRPH0 << 8)|(TWRPH1 << 4);

rNFCONT = (0 << 12) | (1 << 0);

rNFSTAT = 0;

NF_Reset();

}


void NF_WritePage(unsigned int block , unsigned int page,unsigned char *buffer)
{
unsigned int i;
unsigned int blockPage = (block << 6) + page;
unsigned char *bufPt = buffer;

NF_Reset();
NF_Enable();
NF_Enable_RB();

NF_Send_Cmd(NAND_CMD_WRITE1);
NF_Send_Addr(0x00);
NF_Send_Addr(0x00);
NF_Send_Addr(blockPage & 0xff);
NF_Send_Addr((blockPage >> 8) & 0xff);
NF_Send_Addr((blockPage >> 16) & 0x01);
for(i = 0; i < 2048; i++)
{
NF_Send_Data(*bufPt++);
}
NF_Send_Cmd(NAND_CMD_WRITE2);
NF_Check_Busy();
NF_Disable();
}


void NF_ReadPage(unsigned int block ,unsigned int page,unsigned char *dstaddr)
{
unsigned int i;
unsigned int blockPage = (block << 6) + page;
NF_Reset();
NF_Enable();
NF_Enable_RB();

NF_Send_Cmd(NAND_CMD_READ0);
NF_Send_Addr(0x00);
NF_Send_Addr(0x00);
NF_Send_Addr(blockPage & 0xff);
NF_Send_Addr((blockPage >> 8) & 0xff);
NF_Send_Addr((blockPage >> 16) & 0x01);
NF_Send_Cmd(NAND_CMD_READSTART);
NF_Check_Busy();
for(i = 0; i < 2048; i++)
{
dstaddr[i] = NF_Read_Byte();
}
NF_Disable();
}


void NF_EraseBlock(unsigned int block)
{
unsigned int blocknum = block << 6;
NF_Reset();
NF_Enable();
NF_Enable_RB();

NF_Send_Cmd(NAND_CMD_ERASE1);
NF_Send_Addr(blocknum & 0xff);
NF_Send_Addr((blocknum >> 8) & 0xff);
NF_Send_Addr((blocknum >> 16) & 0xff);
NF_Send_Cmd(NAND_CMD_ERASE2);

NF_Check_Busy();
NF_Disable();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值