OK6410裸机简单的NAND FLASH驱动
OK6410裸机简单的NAND FLASH驱动
OK6410裸机简单的NAND FLASH驱动,只写了个简单的函数,读取一页
/*************************************************************************************************************
* 文件名: NandFlash.c
* 功能: S3C6410 NandFlash底层驱动函数
* 作者: 陈鹏
* 创建时间: 2012年3月31日21:34
* 最后修改时间:2012年3月31日
* 详细: NandFlash底层驱动函数,
板载NAND FLASH信息:2GB,MLC K9G4G08(K9GAG08U0D,页大小4KB,4bit纠正)
*************************************************************************************************************/
#include "s3c6410_system.h"
#include "NandFlash.h"
#include "s3c6410_map.h"
//配置
//CONF
#define ECCType 1 //ECC类型选择,0:SLC(1位修正);1:MLC(4位修正)
#define TACLS 5 //CLE & ALE持续时间(0-7)(= HCLK * TACLS)
#define TWRPH0 5 //TWRPH0持续时间(0-7)(= HCLK * (TWRPH0 + 1))
#define TWRPH1 5 //TWRPH1持续时间(0-7)(= HCLK * (TWRPH1 + 1))
#define AdvFlash 1 //预先NAND flash 存储器启动;0:支持512字节/页;1:支持2KB/页
#define AddrCycle 1 //NAND Flash存储器地址周期,0: 0:3地址周期,1:4地址周期;1: 0:4地址周期,1:5地址周期
//CONT
#define SoftLock 0 //软件锁配置,0:禁用锁,1:使能锁
#define MainECCLock 1 //锁存主区ECC生成:0:开启主区ECC;1:锁存主区ECC
#define SpareECCLock 1 //锁存备用区ECC生成;0:开启备用区ECC,1:锁存备用区ECC,备用区ECC 状态寄存器是NFSECC(0x7020003C)
#define RegNCE1 1 //NAND Flash 存储器nGCS[3]信号控制:0:强制nGCS[3]为低(使能片选);1:强制nGCS[3]为高(禁用片选)注:即使Reg_nCE1 和 Reg_nCE0 同时被设置为0,它们之中也只有一个被声明
#define MODE 1 //NAND Flash 控制器操作模式:0:NAND Flash 控制器禁用(不工作)1:NAND Flash 控制器使能
//NAND FLASH操作宏
#define NANDCMD(cmd) (NAND->CMMD = (cmd)) //向NAND flash写入命令
#define NANDADDR(addr) (NAND->ADDR = (addr)) //向NAND flash写入地址
#define NANDDATA (NAND->DATA) //向NAND flash读写数据
#define NF_nCS3_L (NAND->CONT&=~(1<<2))
#define NF_nCS3_H (NAND->CONT|=(1<<2))
#define NF_nCS2_L (NAND->CONT&=~(1<<1)) //片选
#define NF_nCS2_H (NAND->CONT|=(1<<1))
#define NF_RnB (NAND->STAT & BIT0) //0:存储器忙,1:空闲
//NAND FLASH信息宏
#define FLASH_MAX_ADDR 0x80000000 //FLASH最大能够达到的地址,是2GB
#define FLASH_BLOCK_SIZE 0x20000 //FLASH块大小,为512KB
#define FLASH_PAGE_SIZE 0x1000 //FLASH页大小,为4KB
//ECC 8BIT 512B
//NAND FLASH 命令定义
#define NAND_READ_1th 0x00 //读数据区,第一个访问周期
#define NAND_READ_2th 0x30 //读数据区,第二个访问周期
#define NAND_READ_ID 0x90 //读NAND ID
#define NAND_READ_STATUS1 0x70 //读状态1
#define NAND_READ_STATUS2 0xf1 //读状态2
#define NAND_RESET 0xff //复位
|
评论暂时关闭