歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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    //復位

Copyright © Linux教程網 All Rights Reserved