專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

STM32增強(qiáng)型微控制器訪問(wèn)NAND Flash學(xué)習(xí)筆記

作者:小鄧   來(lái)源:會(huì)員上傳   點(diǎn)擊數(shù):  更新時(shí)間:2014年05月19日   【字體:

 

一、了解NAND Flash
 
Flash即是存儲(chǔ)芯片的一種,其結(jié)合了ROM和RAM的特點(diǎn),既具備電可擦除編程的性能,又可以快速讀取數(shù)據(jù),數(shù)據(jù)不會(huì)因斷電丟失。目前市面上Flash主要有NOR Flash和NAND Flash。
簡(jiǎn)單的理解就是,NOR Flash具有隨機(jī)存取和隨字節(jié)執(zhí)行寫操作的能力,即可以訪問(wèn)到存儲(chǔ)器內(nèi)部的任意一個(gè)字節(jié),且具有讀取速度快等特點(diǎn),它占據(jù)1MB—16MB閃存的大部分市場(chǎng),根據(jù)其讀取數(shù)據(jù)速度快的特點(diǎn)主要應(yīng)用在代碼存儲(chǔ);而NAND Flash以“頁(yè)”為單位進(jìn)行對(duì)數(shù)據(jù)的讀寫操作,且具有寫入和擦除速度快等特點(diǎn),它應(yīng)用在8MB—256MB的產(chǎn)品中,根據(jù)其特點(diǎn)主要應(yīng)用在數(shù)據(jù)存儲(chǔ)上。
以型號(hào)HY27UF081G2A的NAND Flash芯片為例,其總線寬度為8bit,總內(nèi)存大小為1Gbit(即128MB),共分為1024塊(Block),每塊又分為64頁(yè)(Page),每頁(yè)共2KB(main memory)+64B(spare memory),main memory用來(lái)存放數(shù)據(jù),spare memory用來(lái)標(biāo)記已壞的塊區(qū)和保存對(duì)main memory的ECC校驗(yàn)碼等(正常情況下不用)。更多的HY27UF081G2A資料參照相關(guān)Datasheet。
 
二、了解HY27UF081G2A芯片引腳功能和NAND Flash接口時(shí)序及控制命令
1、引腳說(shuō)明

圖1  引腳圖
圖2  引腳名稱

 
 
      2、地址周期

圖3  地址周期

其中A10—A0表示頁(yè)內(nèi)地址偏移(表示0—2047字節(jié),1頁(yè)大小即為2K)
      A11表示上半頁(yè)或者下半頁(yè)(這位程序員無(wú)需關(guān)心,決定A10—A0時(shí)也間接決定了A11)
      A17—A12表示頁(yè)地址(表示0—63頁(yè))
      A27—A18表示塊地址(表示0—1023塊)
由于NAND Flash訪問(wèn)的單位是“頁(yè)”,設(shè)置訪問(wèn)地址時(shí)只需要確定A27—A12的值即可確定到某一頁(yè),如果要從頁(yè)內(nèi)的某一位置開始訪問(wèn),則根據(jù)需要設(shè)置A10—A0位來(lái)確定從頁(yè)內(nèi)第幾個(gè)字節(jié)開始訪問(wèn),如:要訪問(wèn)存儲(chǔ)空間為第3塊的第5頁(yè),且從第100字節(jié)開始進(jìn)行訪問(wèn),則對(duì)應(yīng)的4個(gè)Cycle周期的地址信號(hào)為:1 st :0x64  , 2 nd :0x00     3 rd :0xC5  ,  4th :0x00
 
3、了解控制命令,如下所示

圖4  控制命令

 
4、了解接口時(shí)序,對(duì)該存儲(chǔ)器進(jìn)行訪問(wèn)操作有讀取芯片ID、讀頁(yè)數(shù)據(jù)、寫頁(yè)數(shù)據(jù),塊擦除等共有13種,每種不同的操作對(duì)應(yīng)不用的接口時(shí)序,此處只例舉其中的4種操作:讀取芯片ID、讀頁(yè)數(shù)據(jù)、寫頁(yè)數(shù)據(jù)、塊擦除相應(yīng)的接口時(shí)序圖,更多操作參閱其Datasheet。

圖5  讀取芯片ID時(shí)序
圖6  讀取一頁(yè)數(shù)據(jù)
圖7  寫一頁(yè)數(shù)據(jù)(頁(yè)編程)
圖8  塊擦除
 

同時(shí)應(yīng)注意一些時(shí)序參數(shù),如在上幾幅時(shí)序圖中出現(xiàn)的tAR(ALE至~RE的延時(shí)),tCLR(CLE至~RE的延時(shí))等等,這些時(shí)間參數(shù)都有不同的取值范圍(ns級(jí)別),時(shí)序圖中出現(xiàn)的Col Add1、Col Add2為列地址表示頁(yè)內(nèi)地址偏移,對(duì)應(yīng)4個(gè)Cycle地址中的第1、第2個(gè),Row Add1、Row Add2為行地址標(biāo)識(shí)某塊某頁(yè)地址,對(duì)應(yīng)4個(gè)Cycle地址中的第3、第4個(gè)。更多詳細(xì)資料參見(jiàn)相關(guān)Datasheet。
 
三、STM32F10x增強(qiáng)型控制器的FSMC模塊
      FSMC(可變靜態(tài)存儲(chǔ)控制器)是STM32系列微控制器采用的一種新型的存儲(chǔ)器擴(kuò)展技術(shù),可根據(jù)系統(tǒng)的需要方便的進(jìn)行不用類型大容量靜態(tài)存儲(chǔ)器的擴(kuò)展;簡(jiǎn)單的理解FSMC模塊可對(duì)多種外接存儲(chǔ)器進(jìn)行控制,其主要包括NOR Flash、NAND Flash、PC卡,下面對(duì)訪問(wèn)NANDFlash介紹。
 
1、STM32F10x控制器與HY27UF081G2A的對(duì)接
先看STM32F10x控制器提供的NAND Flash接口(這里為8位的NAND閃存)

圖9  STM32F10x控制器的NAND Flash接口

接口各信號(hào)對(duì)應(yīng)的GPIO口為:
A[17] : PD12
A[16] : PD11
D[0:7] : PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10
NCE[x] : 這里使用NCE[2],對(duì)應(yīng)GPIO口為PD7
NOE(=NER) : PD4
NWE : PD5
NWAIT/INT[3:2] : PD6(根據(jù)情況使用該引腳信號(hào),這里不使用)
 
結(jié)合HY27UF081G2A的引腳功能說(shuō)明,STM32與HY27UF081G2A的連線方式選擇如下:
            STM32F10x的NAND接口                  HY27UF081G2A引腳
                  D[0:7]------------------------------------------IO0~IO7
                  A[17]-------------------------------------------ALE
                  A[16]-------------------------------------------CLE這里使用PG6接到R/~B,在檢測(cè)NAND Flash
                  NEC[2]------------------------------------------~CE
                  NOE---------------------------------------------~RE
                  NWE--------------------------------------------~WE
PG6---------------------------------------------R/~B(是否忙時(shí)直接讀取PG6引腳上的電平來(lái)判斷)
 
2、NAND地址映像及功能介紹

圖10  存儲(chǔ)器映像和時(shí)序寄存器(這里只用塊2來(lái)控制訪問(wèn)NAND Flash)

 
通用和屬性空間又可以在低256K字節(jié)部分畫分為三個(gè)區(qū)

圖11  存儲(chǔ)塊選擇

應(yīng)用軟件使用這三個(gè)區(qū)訪問(wèn)NAND Flash存儲(chǔ)器:
發(fā)送命令至NAND Flash:對(duì)命令區(qū)任意地區(qū)寫入命令即可。
指定NAND Flash的地址:對(duì)地址區(qū)任意地址寫入地址命令即可,一個(gè)NAND地址有4或5個(gè)字節(jié)(這里使用的HY27UF081G2A芯片為4個(gè)字節(jié)),需要連續(xù)地執(zhí)行對(duì)地址區(qū)的寫才能輸出完整的操作地址。
    讀寫數(shù)據(jù):軟件只需對(duì)數(shù)據(jù)區(qū)任意一個(gè)地址寫入或讀出數(shù)據(jù)即可。
注:因?yàn)镹AND Flash存儲(chǔ)器自動(dòng)累加其內(nèi)部的操作地址,讀寫數(shù)據(jù)時(shí)沒(méi)有必要變換數(shù)據(jù)區(qū)的地址,即不必對(duì)連續(xù)的地址區(qū)操作;應(yīng)用軟件使用這三個(gè)區(qū)進(jìn)行訪問(wèn)NAND Flash之前要先完成對(duì)相應(yīng)的管理寄存器的初始化配置,下面介紹相應(yīng)的管理配置寄存器。
 
3、STM32的NAND Flash存儲(chǔ)器塊通過(guò)以下一組寄存器來(lái)管理配置
控制寄存器:FSMC_PCRx
中斷狀態(tài)寄存器:FSMC_SRx
ECC寄存器:FSMC_ECCRx
通用存儲(chǔ)器空間的時(shí)序寄存器:FSMC_MEMx
屬性存儲(chǔ)器空間的時(shí)序寄存器:FSMC_PATTx
I/O空間的時(shí)序寄存器:FSMC_PIOx
注:這里用的是塊2部分,因此上面寄存器中的x=2。
 
對(duì)于要只控制NAND Flash存儲(chǔ)器,上面的三個(gè)時(shí)序寄存器中只用到FSMC_MEMx,配置該寄存器來(lái)控制NAND通用存儲(chǔ)空間的訪問(wèn)時(shí)序,該寄存器中保存著訪問(wèn)時(shí)序的4個(gè)時(shí)間參數(shù)(MEMsSET+1、MEMxHIZ+1、MEMxWAIT+1、MEMxHOLD+1),每個(gè)時(shí)間參數(shù)的具體說(shuō)明可參閱STM32相應(yīng)Datasheet。訪問(wèn)時(shí)序圖如下:

圖12  STM32的NAND通用存儲(chǔ)空間的訪問(wèn)時(shí)序

 
對(duì)NAND Flash的簡(jiǎn)單控制訪問(wèn)(讀、寫、擦除等)這里只需要配置FSMC_PCRx和FSMC_MEMx這兩個(gè)寄存器就夠了,對(duì)NAND Flash復(fù)雜的控制訪問(wèn)(檢測(cè)壞塊、ECC校驗(yàn)等)此處不做研究。FSMC_PCRx和FSMC_MEMx寄存器功能參閱STM32相關(guān)Datasheet。
 
四、STM32F10x控制器訪問(wèn)HY27UF081G2A過(guò)程
針對(duì)于簡(jiǎn)單的讀、寫、擦除等訪問(wèn),則過(guò)程為:
1、管理寄存器FSMC_PCRx和FSMC_MEMx初始化
      2、通過(guò)訪問(wèn)通用空間的命令區(qū)、數(shù)據(jù)區(qū)、地址區(qū)完成對(duì)NAND Flash的讀、寫、擦除等操作。
 
軟件實(shí)現(xiàn)過(guò)程:(在此之前要完成系統(tǒng)時(shí)鐘配置、相應(yīng)的總線時(shí)鐘使能、相應(yīng)GPIO口的初始化工作,這里不再進(jìn)行說(shuō)明)
1、管理寄存器FSMC_PCRx和FSMC_MEMx初始化
FSMC_PCRx = 0x00060048;
(設(shè)置ECC頁(yè)面大小2048字節(jié)、ALE至~RE的延時(shí)為1個(gè)HCLK,CLE至~RE的延時(shí)為1個(gè)HCLK,使能ECC電路,設(shè)置總線寬度為8位,設(shè)置存儲(chǔ)器類型為NAND Flash,關(guān)閉模塊功能,關(guān)閉模塊等待功能)
  FSMC_MEMx = 0x01020301;      //設(shè)置MEMsSET+1 = 4個(gè)HCLK、MEMxHIZ+1 = 3個(gè)HCLK、
//MEMxWAIT+1 = 4個(gè)HCLK、MEMxHOLD+1 = 4個(gè)HCLK
FSMC_PCRx |= 0x00000002;      //使能模塊功能
關(guān)閉窗口