⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nandflash.h

📁 ucos_ii在mini2440上的移植KEIL编译环境
💻 H
字号:
#ifndef _NANDFlash_H_
#define _NANDFlash_H_
#include <S3C2440.H>

/*****************参数*************/
//TACLS + TWRPH0 + TWRPH1 >= 50ns
#define TACLS 	 	2   //1-clk(0ns)
#define TWRPH0 		5  //3-clk(25ns)
#define TWRPH1 		1  //1-clk(10ns)
#define pagesize    2048 

/*****************寄存器配置***********/
//NFCONF
//CLE/ALE持续时间设置值(0-3),持续时间=HCLK * TACLS
#define NF_TACLS  		(TACLS)
//TWRPH0持续持续时间设置值(0-7),持续时间=HCKL*(TWRPH0 +1)
#define NF_TWRPH0   	(TWRPH0)
//TWRPH1持续时间设置值(0-7),持续时间=HCLK*(TWRPH1+1)
#define NF_TWRPH1   	(TWRPH1)
#define NFCONF_VAL   	((NF_TACLS <<12) |(NF_TWRPH0<<8) |(NF_TWRPH1<<4))

//NFCONT
//0--只写,1--初始化ECC编码器
#define NF_INIT_ECC 	(1)
//0--允许片选,1--禁止片选,该值只在MODE位为1时有效
#define NF_REG_NCE  	(1)
//0-禁止NandFlash控制器,1--使能NandFlash控制器
#define NF_MODE  		(1)
#define NFCONT_VAL  	((NF_INIT_ECC<<4)|(NF_REG_NCE <<1) | (NF_MODE<<0))

//NFSTAT
#define NF_RB_TRANS   	(1)   //0--未检测到Rnb转换,1--检测到Rnb转换

/*******************宏定义*****************/
#define NF_INVALIDBLOCK_BYTE 	 (2047+1)   //坏块标志位地址
#define NF_VALID_BLOCK_SIGN  	 (0XFF)    //可用块标志

#define NF_nFCE_L()       	{NFCONT &= ~(NF_REG_NCE << 1);}
#define NF_nFCE_H()        	{NFCONT |= (NF_REG_NCE << 1);}

#define NF_CLEAR_RB()      	{NFSTAT |= (NF_RB_TRANS << 2);}
#define NF_DETECT_RB()     	{while(!(NFSTAT & (NF_RB_TRANS << 0)));}

#define NF_RDDATA()        	(NFDATA)
#define NF_RDDATA8()      	(*((unsigned char *)(&NFDATA)))
#define NF_WRDATA(data)   	{NFDATA = data;}
#define NF_WRDATA8(data)   	{*((unsigned char *)(&NFDATA)) = data;}
#define NF_CMD(cmd)		   	{NFCMD = cmd;}
#define NF_ADDRESS(addr)   	{NFADDR = addr;}


//Nand Flash复位
void NAND_Reset(void);

//Nand初始化
void NAND_Init(void) ;

//读取Nand Flash的ID
unsigned int NAND_ReadId(char * th2,char * th3,char * th4,char * th5);
unsigned int NF_ReadStatus(void);

int NF_write_addr(int nRowAddr,int nColAddr);
int NF_CheckBlock(unsigned int nBlock);
int NF_ReadPage(int nRowAddr,int nColAddr,void * pvReadBuff,int nSize);
int NAND_WritePage(int nRowAddr,int nColAddr,void *pvWireBuff,int nLeng);
int NF_EreaseBlock(int nBlock);

//void nand_read(unsigned char *buf, unsigned long start_addr, int len);
//int nand_write(unsigned char *buf, unsigned long start_addr, int len);

int nand_read(int nRowAddr,int nColAddr,char * pvReadBuff,int nBuffSize);
int nand_write(int nRowAddr,int nColAddr,char *pvWireBuff,int nBuffSize);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -