📄 nandflash.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 + -