使用的NandFlash為三星的K9F2G08U0M_第1頁
使用的NandFlash為三星的K9F2G08U0M_第2頁
使用的NandFlash為三星的K9F2G08U0M_第3頁
使用的NandFlash為三星的K9F2G08U0M_第4頁
使用的NandFlash為三星的K9F2G08U0M_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、使用的Nand Flash為三星的K9F2G08U0M,存儲為256M,數(shù)據(jù)寬度為8bit.具體的資料可以參考datasheet.由于S3C2440里面包括了Nand FLash 控制器,所以,我們的工作就是根據(jù)芯片手冊配置一下寄存器。包括的寄存器如下: NFCONF;NFCONT;NFCMD;NFADDR;NFDATA;NFMECCD0;NFMECCD1;NFSECCD;NFSTAT;NFESTAT0;NFESTAT1;NFMECC0;NFMECC1;NFSECC;NFSBLK;NFEBLK;(1) 對于每個寄存器的地址,每一位的功能可以參考S3C2440芯片手冊!對于目前的編程主要涉及到如

2、下五個寄存器:NFCONT;NFCMD;NFADDR;NFDATA;NFSTAT;使用宏定義:#define rNFCONF (*(volatile unsigned *)0x4E000000) #define rNFCONT (*(volatile unsigned *)0x4E000004) #define rNFCMD (*(volatile unsigned *)0x4E000008) #define rNFADDR (*(volatile unsigned char *)0x4E00000C)#define rNFDATA8 (*(volatile unsigned char *)0

3、x4E000010) #define rNFSTAT (*(volatile unsigned *)0x4E000020)特別注明:對于NFCONF寄存器,特別要說明的是TACLS,TWRPH0,TWRPH1,這三個參數(shù)。如何設(shè)置這三個參數(shù),主要得看K9F2G08U0M 手冊上的時序表,參數(shù)表,上面已經(jīng)寫好了CLE ,setup時間,WE_N的Pulse WiDth,WE_N HIGH HOLD TIME .根據(jù)這些參數(shù),設(shè)置個合適的TACLS,TWRPH0,TWRPH1值!(2) 命令! Nand Flash編程時涉及到很多命令,其實這些命令幫助我們完成了很多的工作,我們現(xiàn)在只需做發(fā)送命令的

4、工作。#define Read_Cmd00#define Read_Cmd10x30#define Read_ID_Cmd0x90#define Reset_Cmd0xFF#define PageProgram_Cmd00x80#define PageProgram_Cmd10x10#define Cache_Program_Cmd00x80#define Cache_Program_Cmd10x15#define Copy_Back_Program_Cmd00x85#define Copy_Back_Program_Cmd1 0x10#define Block_Erase_Cmd00x60#

5、define Block_Erase_Cmd10xD0#define Read_Status_Cmd0x70當(dāng)我們編寫擦出,讀,編程N(yùn)and Flash的函數(shù)時,就會涉及到以上各個命令。對于如何使用以上命令,在什么周期用,時序條件如何,完全可以參考K9F2G08U0M手冊,上面很詳細(xì)。寫函數(shù)時,可以根據(jù)流程圖,時序圖,文字,一步步來,基本上不會有太大的問題。關(guān)于Erase operation根據(jù)上圖,相信編寫擦除函數(shù),應(yīng)該問題不大?。。?) 本次實驗主要完成以下函數(shù)的設(shè)計void S3C2440_Nand_Reset(void);unsigned S3C2440_Nand_Wait_Idle(

6、void);void S3C2440_Nand_Init(void);unsigned short S3C2440_Nand_Read_ID(void); /獲取Nand Flash 設(shè)備類型號的void S3C2440_Nand_WR_Addr(unsigned int addr);unsigned S3C2440_Nand_Block_Erase(unsigned block_addr);void S3C2440_Nand_Read(unsigned char * des_addr,unsigned int src_addr,int size);unsigned S3C2440_Nand_

7、Program(unsigned char * buf,unsigned int addr);分享以下設(shè)計代碼:/ 0:pass;1:failunsigned S3C2440_Nand_Wait_Idle(void) unsigned char stat;S3C2440_Nand_WRCmd(Read_Status_Cmd);dostat=S3C2440_Nand_RD_Data8();while(!(stat&0x40);return stat&0x1;void S3C2440_Nand_Init(void)S3C2440_Nand_CONF()=(TACLS12) | (TWRPH08)

8、| (TWRPH14) |(0NFCONT = (013)|(012)|(010)|(09)|(08)|(16)|(15)|(14)|(11)|(10);unsigned short S3C2440_Nand_Read_ID(void)unsigned short ID;S3C2440_Nand_Chip_En();S3C2440_Nand_WRCmd(Read_ID_Cmd);S3C2440_NandWR_Addr_Single(0);while(S3C2440_Nand_ISBUSY();ID=S3C2440_Nand_RD_Data8()NAND_SECTOR_BIT_WID+1;S3C

9、2440_NandWR_Addr_Single(column_addr&0xff);S3C2440_NandWR_Addr_Single(column_addr8)&0x0f);S3C2440_NandWR_Addr_Single(page_addr&0xff);S3C2440_NandWR_Addr_Single(page_addr8)&0xff);S3C2440_NandWR_Addr_Single(page_addr16)&0x1);unsigned S3C2440_Nand_Block_Erase(unsigned block_addr)int i,status;block_addr

10、&=0x3f; /ingore the low 6 bits;S3C2440_Nand_Chip_En();S3C2440_Nand_WRCmd(Block_Erase_Cmd0);S3C2440_NandWR_Addr_Single(block_addr&0xff);S3C2440_NandWR_Addr_Single(block_addr8)&0xff);S3C2440_NandWR_Addr_Single(block_addr16)&0x1);S3C2440_Nand_WRCmd(Block_Erase_Cmd1);for(i=0;iNAND_SECTOR_BIT_WID;S3C2440

11、_Nand_Chip_En();while (page_num)S3C2440_Nand_InitEcc();S3C2440_Nand_WRCmd(Read_Cmd0);S3C2440_Nand_WR_Addr(src_addr+(j(NAND_SECTOR_BIT_WID+1);S3C2440_Nand_WRCmd(Read_Cmd1);for(i=0;i100;i+);while(S3C2440_Nand_ISBUSY();for(i=0;iNAND_SECTOR_SIZE;i+)*des_addr+=S3C2440_Nand_RD_Data8();page_num-;j+;S3C2440

12、_Nand_Chip_Disable();unsigned S3C2440_Nand_Program(unsigned char * buf,unsigned int addr)int i,status;if(addr & NAND_BLOCK_MASK)return Addr_NOT_Align; /address or size is not align;S3C2440_Nand_Chip_En();S3C2440_Nand_InitEcc(); S3C2440_Nand_WRCmd(PageProgram_Cmd0);S3C2440_Nand_WR_Addr(addr);for(i=0;

13、iNAND_SECTOR_SIZE;i+)S3C2440_Nand_WR_Data8(*buf+);S3C2440_Nand_WRCmd(PageProgram_Cmd1);if(S3C2440_Nand_Wait_Idle() status=ERROR; else status=TRUE;S3C2440_Nand_Chip_Disable();return status;對于上面函數(shù)里面涉及的一下小函數(shù),宏定義,設(shè)計起來很簡單,在此就不累述了,看看芯片資料就可以了!對于K9F2G08U0M使用的地址共29位,A0A28,分5個周期完成發(fā)送工作!對于S3C2440_Nand_Block_Erase()函數(shù)涉及的只是A12A28,row address,當(dāng)然其中A12A17會被忽略,編程時應(yīng)該考慮到!對于S3C2440_Nand_Read(unsigned char * des_addr,unsigned int src_addr,int size) 函數(shù)里面的參數(shù)src_a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論