S3C2440對(duì)Nand Flash操作和電路原理(基于K9F2G08U0A)
l 一個(gè)引導(dǎo)啟動(dòng)單元
本文引用地址:http://m.butianyuan.cn/article/201611/321669.html Nand Flash存儲(chǔ)器接口,支持8位或16位的每頁(yè)大小為256字,512字節(jié),1K字和2K字節(jié)的Nand flash
l 軟件模式:用戶可以直接訪問(wèn)Nand Flash存儲(chǔ)器,此特性可以用于Nand Flash存儲(chǔ)器的讀、擦除和編程。
l S3C2440支持8/16位的Nand Flash存儲(chǔ)器接口總線
l 硬件ECC生成,檢測(cè)和指示(軟件糾錯(cuò))。
l Steppingstone接口,支持大/小端模式的按字節(jié)/半字/字訪問(wèn)。
我用的開發(fā)板是天嵌的TQ2440,板子用到的Nand Flash是Samsung公司的K9F2G08U0A,它是8位的Nand flash。本文只介紹Nand Flash的電路原理和Nand Flash的讀、寫、擦除等基本操作,暫不涉及Nand Flash啟動(dòng)程序的問(wèn)題。
Nand Flash的電路連接如圖 1所示:
圖 1 Nand Flash電路原理
上圖的左邊為K9F2G08U0A與2440的連接圖,原理方面就不多介紹,去看看datasheet估計(jì)就懂得了,右邊的部分是S3C2440的Nand控制器的配置。配置引腳NCON,GPG13,GPG14和GPG15用來(lái)設(shè)置Nand Flash的基本信息,Nand控制器通過(guò)讀取配置引腳的狀態(tài)獲取外接的Nand Flash的配置信息,圖 2是這四個(gè)配置引腳的定義:
圖 2 Nand控制配置引腳信息
由于K9F2G08U0A的總線寬度為8位,頁(yè)大小為2048字節(jié),需要5個(gè)尋址命令,所以NCON、GPG13和GPG14應(yīng)該接高電平,GPG15應(yīng)該接低電平。
K9F2G08U0A沒有地址或數(shù)據(jù)總線,只有8個(gè)IO口,這8個(gè)IO口用于傳輸命令、地址和數(shù)據(jù)。K9F2G08U0A主要以page(頁(yè))為單位進(jìn)行讀寫,以block(塊)為單位進(jìn)行擦除。每一頁(yè)中又分為main區(qū)和spare區(qū),main區(qū)用于正常數(shù)據(jù)的存儲(chǔ),spare區(qū)用于存儲(chǔ)一些附加信息,如塊好壞的標(biāo)記、塊的邏輯地址、頁(yè)內(nèi)數(shù)據(jù)的ECC校驗(yàn)和等。K9F2G08U0A的存儲(chǔ)陣列如圖 3所示:
圖 3 K9F2G08U0A內(nèi)部存儲(chǔ)陣列
由上圖,我們可以知道:K9F2G08U0A的一頁(yè)為(2K+64)字節(jié)(2K表示的是main區(qū)容量, 64表示的是spare區(qū)容量),它的一塊為64頁(yè),而整個(gè)設(shè)備包括了2048個(gè)塊。這樣算下來(lái)一共有2112M位容量,如果只算main區(qū)容量則有256M字節(jié)(即256M×8位)。
圖 4 K9F2G08U0A地址序列
要實(shí)現(xiàn)用8個(gè)IO口來(lái)要訪問(wèn)這么大的容量,如圖 4所示:K9F2G08U0A規(guī)定了用5個(gè)周期來(lái)實(shí)現(xiàn)。第一個(gè)周期訪問(wèn)的地址為A0~A7;第二個(gè)周期訪問(wèn)的地址為A8~A11,它作用在IO0~IO3上,而此時(shí)IO4~IO7必須為低電平;第三個(gè)周期訪問(wèn)的地址為A12~A19;第四個(gè)周期訪問(wèn)的地址為A20~A27;第五個(gè)周期訪問(wèn)的地址為A28,它作用在IO0上,而此時(shí)IO1~IO7必須為低電平。前兩個(gè)周期傳輸?shù)氖橇械刂?,后三個(gè)周期傳輸?shù)氖切械刂?。通過(guò)分析可知,列地址是用于尋址頁(yè)內(nèi)空間,行地址用于尋址頁(yè),如果要直接訪問(wèn)塊,則需要從地址A18開始。由于所有的命令、地址和數(shù)據(jù)全部從8位IO口傳輸,所以Nand flash定義了一個(gè)命令集來(lái)完成各種操作。有的操作只需要一個(gè)命令(即一個(gè)周期)即可,而有的操作則需要兩個(gè)命令(即兩個(gè)周期)來(lái)實(shí)現(xiàn)。K9F2G08U0A的命令說(shuō)明如圖 5所示:
圖 5 K9F2G08U0A命令表
為了方便使用,我們宏定義了K9F2G08U0A的常用命令
#define CMD_READ10x00 //頁(yè)讀命令周期1
#define CMD_READ20x30 //頁(yè)讀命令周期2
#define CMD_READID 0x90 //讀ID命令
#define CMD_WRITE1 0x80 //頁(yè)寫命令周期1
#define CMD_WRITE2 0x10 //頁(yè)寫命令周期2
#define CMD_ERASE1 0x60 //塊擦除命令周期1
#define CMD_ERASE2 0xd0 //塊擦除命令周期2
#define CMD_STATUS0x70 //讀狀態(tài)命令
#define CMD_RESET0xff //復(fù)位
#define CMD_RANDOMREAD1 0x05 //隨意讀命令周期1
#define CMD_RANDOMREAD2 0xE0 //隨意讀命令周期2
#define CMD_RANDOMWRITE 0x85 //隨意寫命令
接下來(lái)介紹幾個(gè)Nand Flash控制器的寄存器。Nand Flash控制器的寄存器主要有NFCONF(Nand Flash配置寄存器),NFCONT(Nand Flash控制寄存器),NFCMMD(Nand Flash命令集寄存器),NFADDR(Nand Flash地址集寄存器),NFDATA(Nand Flash數(shù)據(jù)寄存器),NFMECCD0/1(Nand Flash的main區(qū)ECC寄存器),NFSECCD(Nand Flash的spare區(qū)ECC寄存器),NFSTAT(Nand Flash操作狀態(tài)寄存器),NFESTAT0/1(Nand Flash的ECC狀態(tài)寄存器),NFMECC0/1(Nand Flash用于數(shù)據(jù)的ECC寄存器),以及NFSECC(Nand Flash用于IO的ECC寄存器)。
(1)NFCONF:2440的NFCONF寄存器是用來(lái)設(shè)置NAND Flash的時(shí)序參數(shù)TACLS、TWRPH0、TWRPH1。配置寄存器的[3:0]是只讀位,用來(lái)指示外部所接的Nand Flash的配置信息,它們是由配置引腳NCON,GPG13,GPG14和GPG15所決定的(比如說(shuō)K9F2G08U0A的配置為NCON、GPG13和GPG14接高電平,GPG15接低電平,所以[3:0]位狀態(tài)應(yīng)該是1110)。
(2)NFCONT:用來(lái)使能/禁止NAND Flash控制器、使能/禁止控制引腳信號(hào)nFCE、初始化ECC。它還有其他功能,在一般的應(yīng)用中用不到,比如鎖定NAND Flash。
(3)NFCMMD:對(duì)于不同型號(hào)的Flash,操作命令一般不一樣。參考前面介紹的K9F2G08U0A命令序列。
(4)NFADDR:當(dāng)寫這個(gè)寄存器時(shí),它將對(duì)Flash發(fā)出地址信號(hào)。只用到低8位來(lái)傳輸,所以需要分次來(lái)寫入一個(gè)完整的32位地址,K9F2G08U0A的地址序列在圖4已經(jīng)做了詳細(xì)說(shuō)明。
(5)NFDATA:只用到低8位,讀、寫此寄存器將啟動(dòng)對(duì)NAND Flash的讀數(shù)據(jù)、寫數(shù)據(jù)操作。
(6)NFSTAT:只用到位0,用來(lái)檢測(cè)NAND是否準(zhǔn)備好。0:busy,1:ready。
NFCONF寄存器使用TACLS、TWRPH0、TWRPH1這3個(gè)參數(shù)來(lái)控制NAND Flash信號(hào)線CLE/ALE與寫控制信號(hào)nWE的時(shí)序關(guān)系,它們之間的關(guān)系如圖6和圖7所示:
圖6 CLE/ALE時(shí)序圖
圖7 nWE和nRE時(shí)序圖
TACLS為CLE/ALE有效到nWE有效之間的持續(xù)時(shí)間,TWRPH0為nWE的有效持續(xù)時(shí)間,TWRPH1為nWE無(wú)效到CLE/ALE無(wú)效之間的持續(xù)時(shí)間,這些時(shí)間都是以HCLK為單位的。通過(guò)查閱K9F2G08U0A的數(shù)據(jù)手冊(cè),我們可以找到并計(jì)算與S3C2440相對(duì)應(yīng)的時(shí)序:K9F2G08U0A中的Twp與TWRPH0相對(duì)應(yīng),Tclh與TWRPH1相對(duì)應(yīng), TACLS應(yīng)該是與Tcls相對(duì)應(yīng)。K9F2G08U0A給出的都是最小時(shí)間, 2440只要滿足它的最小時(shí)間即可。TACLS、TWRPH0、TWRPH1這三個(gè)變量取值大一些會(huì)更保險(xiǎn),在這里,這三個(gè)值分別取1,2和0。
評(píng)論