摘 要: 針對基于ARM的大容量NAND FLASH應(yīng)用中的問題進(jìn)行研究,發(fā)現(xiàn)ARM的可變靜態(tài)存儲控制器模塊只有2個NAND FLASH片選引腳,無法直接提供大容量NAND FLASH所需的4個片選信號;NAND FLASH存儲以頁為單位,對于不足1頁的數(shù)據(jù)無法進(jìn)行存儲。通過對ARM的引腳復(fù)用功能和NAND FLASH的工作特點(diǎn)進(jìn)行研究,提出了自定義NAND FLASH片選信號解決片選不足,通過對數(shù)據(jù)進(jìn)行填充解決不足1頁的數(shù)據(jù)無法存儲的問題。最終通過實(shí)驗(yàn)進(jìn)行驗(yàn)證,保證了基于ARM的大容量NAND FLASH可以充分有效的應(yīng)用。
關(guān)鍵詞: ARM處理器; 片選; 大容量存儲; NAND閃存
中圖分類號: TN710?34; TP333 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2016)02?0065?04
Application on large capacity NAND FLASH based on ARM
GAO Yang, GUAN Xueyuan
(National Key Lab on Transient Physics, Nanjing University of Science and Technology, Nanjing 210094, China)
Abstract: The questions existing in application of the large capacity NANDFLASH based on ARM are researched, because flexible static memory controller (FSMC) module of ARM only has two pins for chip selection but can not provide four chip selection signals required by large capacity NAND FLASH, and the storage of FLASH NAND is based on the unit of page, which can not store the data of the insufficient page. By research on the multiplexing functions of ARM pin and working characteristics of NAND FLASH, the self?definition of NAND FLASH chip selection signal is proposed to solve the problem of pin insufficiency and the filling in data is adopted to settle the problem that the data insufficient as one page can not be stored. The method verified in experiments. It ensured the application of large capacity NAND FLASH based on ARM effectively.
Keywords: ARM; chip selection; large capacity memory; NAND flash
作為主流的存儲器之一,NAND FLASH以其存儲速度快、可靠性高、體積小、質(zhì)量輕、功耗低、適應(yīng)各種工作環(huán)境等特點(diǎn),廣泛應(yīng)用于各類存儲設(shè)備[1]。在處理器中,ARM具有高性能、低功耗、低價格等特點(diǎn),占有很大的市場份額。隨著信息行業(yè)的發(fā)展,各類信息的數(shù)據(jù)量越來越大,為了滿足信息應(yīng)用和處理的更高需求,增大相關(guān)設(shè)備的存儲容量也就尤為重要。因此,本文主要針對基于ARM的大容量NAND FLASH在應(yīng)用方面的主要問題進(jìn)行分析。
1 大容量NAND FLASH應(yīng)用中的問題
目前市面上的NAND FLASH型號眾多,相應(yīng)的容量、結(jié)構(gòu)特點(diǎn)和操作方式上也各有差異,但每個廠商的不同型號除了容量上的差異,其余基本相同。本文以容量較大的K9MDG08U5M為例,這款NAND FLASH是三星公司的8位存儲芯片,容量高達(dá)16 GB。K9MDG08U5M內(nèi)部包含4片,每片有8 192塊,每塊有128頁[2]。
1.1 NAND FLASH片選問題
在存儲系統(tǒng)中,通過NAND FLASH完成存儲功能,但其內(nèi)部沒有獨(dú)立的控制結(jié)構(gòu),所以要實(shí)現(xiàn)整個存儲系統(tǒng),就必須依賴其他控制芯片。類似于K9MDG08U5M這種大容量NAND FLASH,片選信號有4個,也是目前片選信號最多的。對于不同型號的ARM或者是包含ARM內(nèi)核的SoC來說,其涉及NAND FLASH的FSMC(可變靜態(tài)存儲控制器)模塊只有2個片選引腳,因此無法直接提供大容量NAND FLASH所需的4個片選信號。
1.2 NAND FLASH編程操作問題
NAND FLASH的操作主要包含擦除、編程和讀取,最為關(guān)鍵的是編程操作,保證數(shù)據(jù)的可靠性和完整性是實(shí)現(xiàn)存儲功能的最基本要求。由于內(nèi)部物理結(jié)構(gòu)的特點(diǎn),NAND FLASH的讀/寫以頁為單位,而擦除則以塊為單位[3]。編程操作時,一般在控制器中開辟1頁大小的緩存,待緩存中的數(shù)據(jù)收集滿后再傳輸給NAND FLASH進(jìn)行存儲。在實(shí)際應(yīng)用中,所采集的數(shù)據(jù)很難準(zhǔn)確預(yù)測,更難以保證數(shù)據(jù)量正好等于頁容量的整數(shù)倍,這樣就不可避免地造成最后不夠1頁的數(shù)據(jù)無法存入NAND FLASH中,這種數(shù)據(jù)丟失對于存儲系統(tǒng)來說是不允許出現(xiàn)的。
2 應(yīng)用中問題解決方法
前面敘述了大容量NAND FLASH在實(shí)際應(yīng)用中的兩個典型問題:一是大容量帶來的多片選,造成ARM處理器片選不足的問題;二是容量越大,最后數(shù)據(jù)不滿1頁的可能性越高,造成數(shù)據(jù)丟失的問題也越嚴(yán)重。為了使這種大容量NAND FLASH能有更廣泛的應(yīng)用,就必須解決這兩個問題。
2.1 解決片選
本文ARM以意法半導(dǎo)體的STM32F407為例,這款微處理器具有NAND FLASH所需的FSMC。FSMC能夠連接同步、異步存儲器和 16 位 PC 存儲卡,數(shù)據(jù)總線位寬可根據(jù)需要配置成8位或16位,具有兩個支持 ECC 硬件的 NAND FLASH存儲區(qū)域,可檢查多達(dá) 8 KB 的數(shù)據(jù)[4]。FSMC定義了兩個NAND FLASH片選[5]FSMC_NCE[3:2],從FSMC的角度,外部存儲器被劃分為4個固定大小的存儲區(qū)域,其中存儲區(qū)域2和存儲區(qū)域3用于連接NAND FLASH,每個存儲區(qū)域只能連接一個器件。默認(rèn)的情況下,F(xiàn)SMC可連接2個單片選NAND FLASH。4片選的K9MDG08U5M就需要另外定義其余片選。ARM的大多數(shù)引腳都具有復(fù)用功能,可以按照定義配置成不同的功能,但是一個引腳在同一時間只能配置成一種功能。每一個片選[CE]有效時,該片都有一個R/[B]狀態(tài)輸出,用于判斷當(dāng)前NAND FLASH的狀態(tài)[6]。所以R/[B]信號與[CE]信號個數(shù)上是對應(yīng)的,需要自己定義的也就是這兩組引腳。既然重新定義,那就意味著引腳的復(fù)用功能無法使用,在硬件設(shè)計時應(yīng)該將[CE][4:1]和R/[B][4:1]連接至ARM的空閑引腳(該引腳的復(fù)用功能不使用),其余引腳對應(yīng)復(fù)用功能正常連接。硬件連接框圖如圖1所示。
在軟件設(shè)計時,把[CE][4:1]和R/[B][4:1]相連的引腳分別配置成GPIO的輸出功能和輸入功能。由于片選低電平有效,初始化時將[CE][4:1]置高。在使用時,ARM輸出低電平至需要操作的片選,使能該片NAND FLASH后,再判斷R/[B]反饋的狀態(tài)信號,如果高電平表示NAND FLASH處于空閑狀態(tài)可以進(jìn)行接下來的操作,低電平則表示NAND FLASH處于忙碌狀態(tài),ARM等待至信號變高[7]。
圖1 連接框圖
當(dāng)一個片選的容量存滿之后,需要自動切換到下一個片選,進(jìn)而可以繼續(xù)工作。對NAND FLASH的每次操作都涉及到對應(yīng)的操作地址,即頁地址、塊地址和片選號(從頁首開始操作,頁內(nèi)地址為0)。一次操作完成后,應(yīng)該更新操作地址并進(jìn)行相應(yīng)的判斷。前面介紹過K9MDG08U5M內(nèi)部包含4片,每片包含8 192塊,每塊由128頁構(gòu)成,因此最大頁地址為128,最大塊地址為8192,最大片選號為4,初始地址都是從0開始。地址更新流程圖如圖2所示。
圖2 地址更新流程圖
2.2 解決數(shù)據(jù)不夠1頁
編程操作以頁為單位,這是所有NAND FLASH共同的操作特點(diǎn)。由于內(nèi)部物理結(jié)構(gòu),K9MDG08U5M寫入數(shù)據(jù)過程分為兩步:第一步,接收到第一周期編程命令(80H),將收集好的數(shù)據(jù)傳輸至NAND FLASH內(nèi)部的緩存區(qū),其大小與頁的大小相等;第二步,接收到第二周期編程命令(10H),該命令確認(rèn)寫入,數(shù)據(jù)由緩存區(qū)真正存入至存儲區(qū)一頁中[8]。通過對數(shù)據(jù)寫入過程的分析,可以看出每一次編程操作都是針對1頁大小的數(shù)據(jù)進(jìn)行的。這種操作方式可以提高寫入的速度,因?yàn)槊看螌懭霐?shù)據(jù)都需要向NAND FLASH發(fā)送命令和操作地址,與單字節(jié)操作相比,減少了程序多次執(zhí)行發(fā)送命令和地址的時間[9]。但當(dāng)數(shù)據(jù)不夠1頁時,按頁操作就成為一種束縛。這是所有NAND FLASH都會存在的問題,對于大容量NAND FLASH,頁的大小也相應(yīng)增加,這種問題所造成的影響就變得更加明顯。
對于這個問題,首先想到的方法就是對數(shù)據(jù)進(jìn)行填充,將不足1頁的數(shù)據(jù)填充滿1頁,再完成接下來的存儲操作。本文用到的也就是這種方法,填充數(shù)據(jù)需要考慮兩個問題:一是什么時候填充;二是填充什么數(shù)據(jù)。
什么時候填充主要根據(jù)外圍設(shè)備的數(shù)據(jù)傳輸間隔來判斷,可以定義一個最大容忍時間。最大容忍時間可以根據(jù)實(shí)際情況適當(dāng)?shù)拇笮驗(yàn)檫^小會造成沒有必要的填充,從而浪費(fèi)存儲資源,而容忍時間適當(dāng)大些不會帶來任何負(fù)面影響,定義的標(biāo)準(zhǔn)就是大于外圍設(shè)備的最大傳輸間隔。
關(guān)于填充什么數(shù)據(jù)并沒有特殊的限制,只需要不會對有效數(shù)據(jù)產(chǎn)生干擾即可。本文主要根據(jù)NAND FLASH內(nèi)部特點(diǎn)來選擇填充數(shù)據(jù)。由于NAND FLASH存儲單元的物理特性,編程操作時存儲單元的數(shù)據(jù)只能從1變成0,無法從0變成1,擦除的目的就是將所有存儲位變?yōu)?。因此存儲數(shù)據(jù)時,沒有存入有效數(shù)據(jù)的空間內(nèi)數(shù)據(jù)[10]應(yīng)該都是0xFF。根據(jù)這一點(diǎn),本文選擇的填充數(shù)據(jù)就是0xFF,同時也滿足不會對有效數(shù)據(jù)產(chǎn)生干擾的要求。
在實(shí)際設(shè)計中,可以使用計時器進(jìn)行判斷,當(dāng)時間達(dá)到了最大容忍時間,即認(rèn)為不再有數(shù)據(jù)進(jìn)入,將緩存填充0xFF至1頁。計時器的初值并不等于零,而是定義為大于最大容忍時間的值。因?yàn)榭紤]到程序啟動之后外圍設(shè)備不一定立刻就產(chǎn)生數(shù)據(jù),為了避免剛開始沒有數(shù)據(jù)進(jìn)入時也進(jìn)行填充,所以計時器選擇從較大的值開始計時。串口采用中斷方式接收數(shù)據(jù),當(dāng)有數(shù)據(jù)進(jìn)入時,串口產(chǎn)生中斷,程序執(zhí)行中斷服務(wù)函數(shù),同時計時器歸零。當(dāng)下一幀數(shù)據(jù)進(jìn)入,串口再次產(chǎn)生中斷,計時器再次歸零。如果一定時間內(nèi)沒有數(shù)據(jù)進(jìn)入,計時器的值達(dá)到最大容忍時間,即認(rèn)為數(shù)據(jù)接受完畢,若緩存不夠1頁大小則填充數(shù)據(jù)至1頁。具體流程圖如圖3所示。
圖3 填充流程圖
3 實(shí)驗(yàn)驗(yàn)證
通過串口調(diào)試助手循環(huán)發(fā)送abcdefg至下位機(jī),隨機(jī)發(fā)送若干個字節(jié)后停止發(fā)送,將接收到的數(shù)據(jù)存入NAND FLASH第3片第2塊第1頁,最終再讀出并通過串口助手顯示。由圖4和圖5可知,循環(huán)發(fā)送出273 B,接收緩存最小編號為0,停止發(fā)送后,緩存中數(shù)據(jù)從第274個字節(jié)處開始填充為0xFF,顯示出的4 096 B(1頁大小)中,abcdefg后全為0xFF。實(shí)驗(yàn)結(jié)果達(dá)到預(yù)期效果,上述解決方法具有可行性。
圖4 串口助手收發(fā)界面
4 結(jié) 語
本文主要分析解決了大容量NAND FLASH應(yīng)用于ARM的兩個主要問題。首先對于片選不足的問題,可以通過ARM自身引腳的復(fù)用功能進(jìn)行解決,只需對片選及相應(yīng)的狀態(tài)信號重新定義,并注意操作地址的更新以保證NAND FLASH可以連續(xù)正常工作。其次解決了數(shù)據(jù)不夠1頁無法滿足按頁存儲的問題,通過定義最大容忍時間來判斷是否還有數(shù)據(jù)進(jìn)入,當(dāng)達(dá)到最大容忍時間即認(rèn)為數(shù)據(jù)采集完成,如果數(shù)據(jù)不足1頁則進(jìn)行填充,從而保證有效數(shù)據(jù)完全存入NAND FLASH。這兩個問題的解決,保證了基于ARM的大容量NAND FLASH可以充分有效的應(yīng)用。尤其對于第二個問題,解決方法適用于所有由NAND FLASH構(gòu)成的存儲系統(tǒng)。
圖5 Keil調(diào)試界面
參考文獻(xiàn)
[1] 陳國,高楊.NAND FLASH在大容量存儲技術(shù)中的應(yīng)用[J].航空計算技術(shù),2009,39(2):113?116.
[2] Samsung Corp. K9MDG08U5M?PCB0M datasheet [EB/OL]. [2011?02?28]. http://www.samsung.com.
[3] 邢亮,黃暉,田丹.機(jī)載系統(tǒng)NAND FLASH存儲技術(shù)[J].航空計算技術(shù),2014,44(1):123?125.
[4] 廖義奎.ARM Cortex?M4嵌入式實(shí)戰(zhàn)開發(fā)精解:基于STM32F4[M].北京:北京航空航天大學(xué)出版社,2013.
[5] ST Corp. STM32F407xx datasheet[ EB/OL]. [2013?10?22].http://www.st.com.
[6] 舒文麗,吳云峰,孫長勝,等.基于NAND FLASH的海量存儲器的設(shè)計[J].電子器件,2012,35(1):107?110.
[7] 朱知博.基于NAND FLASH的高速大容量存儲系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2011,34(8):170?173.
[8] 雷磊,謝民,李先楚.基于NAND 型FLASH的海量存儲板的設(shè)計與實(shí)現(xiàn)[J].測控技術(shù),2007(z1):196?202.
[9] 鄭文靜,李明強(qiáng),舒繼武.FLASH存儲技術(shù)[J].計算機(jī)研究與發(fā)展,2010,47(4):716?726.
[10] 晏敏,龍小奇,章兢,等.開放式大容量NAND FLASH數(shù)據(jù)存儲系統(tǒng)設(shè)計與實(shí)現(xiàn)[J].微電子學(xué)與計算機(jī),2009,26(11):13?16.