摘 要: 針對(duì)基于ARM的大容量NAND FLASH應(yīng)用中的問題進(jìn)行研究,發(fā)現(xiàn)ARM的可變靜態(tài)存儲(chǔ)控制器模塊只有2個(gè)NAND FLASH片選引腳,無法直接提供大容量NAND FLASH所需的4個(gè)片選信號(hào);NAND FLASH存儲(chǔ)以頁為單位,對(duì)于不足1頁的數(shù)據(jù)無法進(jìn)行存儲(chǔ)。通過對(duì)ARM的引腳復(fù)用功能和NAND FLASH的工作特點(diǎn)進(jìn)行研究,提出了自定義NAND FLASH片選信號(hào)解決片選不足,通過對(duì)數(shù)據(jù)進(jìn)行填充解決不足1頁的數(shù)據(jù)無法存儲(chǔ)的問題。最終通過實(shí)驗(yàn)進(jìn)行驗(yàn)證,保證了基于ARM的大容量NAND FLASH可以充分有效的應(yīng)用。
關(guān)鍵詞: ARM處理器; 片選; 大容量存儲(chǔ); NAND閃存
中圖分類號(hào): TN710?34; TP333 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 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
作為主流的存儲(chǔ)器之一,NAND FLASH以其存儲(chǔ)速度快、可靠性高、體積小、質(zhì)量輕、功耗低、適應(yīng)各種工作環(huán)境等特點(diǎn),廣泛應(yīng)用于各類存儲(chǔ)設(shè)備[1]。在處理器中,ARM具有高性能、低功耗、低價(jià)格等特點(diǎn),占有很大的市場(chǎng)份額。隨著信息行業(yè)的發(fā)展,各類信息的數(shù)據(jù)量越來越大,為了滿足信息應(yīng)用和處理的更高需求,增大相關(guān)設(shè)備的存儲(chǔ)容量也就尤為重要。因此,本文主要針對(duì)基于ARM的大容量NAND FLASH在應(yīng)用方面的主要問題進(jìn)行分析。
1 大容量NAND FLASH應(yīng)用中的問題
目前市面上的NAND FLASH型號(hào)眾多,相應(yīng)的容量、結(jié)構(gòu)特點(diǎn)和操作方式上也各有差異,但每個(gè)廠商的不同型號(hào)除了容量上的差異,其余基本相同。本文以容量較大的K9MDG08U5M為例,這款NAND FLASH是三星公司的8位存儲(chǔ)芯片,容量高達(dá)16 GB。K9MDG08U5M內(nèi)部包含4片,每片有8 192塊,每塊有128頁[2]。
1.1 NAND FLASH片選問題
在存儲(chǔ)系統(tǒng)中,通過NAND FLASH完成存儲(chǔ)功能,但其內(nèi)部沒有獨(dú)立的控制結(jié)構(gòu),所以要實(shí)現(xiàn)整個(gè)存儲(chǔ)系統(tǒng),就必須依賴其他控制芯片。類似于K9MDG08U5M這種大容量NAND FLASH,片選信號(hào)有4個(gè),也是目前片選信號(hào)最多的。對(duì)于不同型號(hào)的ARM或者是包含ARM內(nèi)核的SoC來說,其涉及NAND FLASH的FSMC(可變靜態(tài)存儲(chǔ)控制器)模塊只有2個(gè)片選引腳,因此無法直接提供大容量NAND FLASH所需的4個(gè)片選信號(hào)。
1.2 NAND FLASH編程操作問題
NAND FLASH的操作主要包含擦除、編程和讀取,最為關(guān)鍵的是編程操作,保證數(shù)據(jù)的可靠性和完整性是實(shí)現(xiàn)存儲(chǔ)功能的最基本要求。由于內(nèi)部物理結(jié)構(gòu)的特點(diǎn),NAND FLASH的讀/寫以頁為單位,而擦除則以塊為單位[3]。編程操作時(shí),一般在控制器中開辟1頁大小的緩存,待緩存中的數(shù)據(jù)收集滿后再傳輸給NAND FLASH進(jìn)行存儲(chǔ)。在實(shí)際應(yīng)用中,所采集的數(shù)據(jù)很難準(zhǔn)確預(yù)測(cè),更難以保證數(shù)據(jù)量正好等于頁容量的整數(shù)倍,這樣就不可避免地造成最后不夠1頁的數(shù)據(jù)無法存入NAND FLASH中,這種數(shù)據(jù)丟失對(duì)于存儲(chǔ)系統(tǒng)來說是不允許出現(xiàn)的。
2 應(yīng)用中問題解決方法
前面敘述了大容量NAND FLASH在實(shí)際應(yīng)用中的兩個(gè)典型問題:一是大容量帶來的多片選,造成ARM處理器片選不足的問題;二是容量越大,最后數(shù)據(jù)不滿1頁的可能性越高,造成數(shù)據(jù)丟失的問題也越嚴(yán)重。為了使這種大容量NAND FLASH能有更廣泛的應(yīng)用,就必須解決這兩個(gè)問題。
2.1 解決片選
本文ARM以意法半導(dǎo)體的STM32F407為例,這款微處理器具有NAND FLASH所需的FSMC。FSMC能夠連接同步、異步存儲(chǔ)器和 16 位 PC 存儲(chǔ)卡,數(shù)據(jù)總線位寬可根據(jù)需要配置成8位或16位,具有兩個(gè)支持 ECC 硬件的 NAND FLASH存儲(chǔ)區(qū)域,可檢查多達(dá) 8 KB 的數(shù)據(jù)[4]。FSMC定義了兩個(gè)NAND FLASH片選[5]FSMC_NCE[3:2],從FSMC的角度,外部存儲(chǔ)器被劃分為4個(gè)固定大小的存儲(chǔ)區(qū)域,其中存儲(chǔ)區(qū)域2和存儲(chǔ)區(qū)域3用于連接NAND FLASH,每個(gè)存儲(chǔ)區(qū)域只能連接一個(gè)器件。默認(rèn)的情況下,F(xiàn)SMC可連接2個(gè)單片選NAND FLASH。4片選的K9MDG08U5M就需要另外定義其余片選。ARM的大多數(shù)引腳都具有復(fù)用功能,可以按照定義配置成不同的功能,但是一個(gè)引腳在同一時(shí)間只能配置成一種功能。每一個(gè)片選[CE]有效時(shí),該片都有一個(gè)R/[B]狀態(tài)輸出,用于判斷當(dāng)前NAND FLASH的狀態(tài)[6]。所以R/[B]信號(hào)與[CE]信號(hào)個(gè)數(shù)上是對(duì)應(yīng)的,需要自己定義的也就是這兩組引腳。既然重新定義,那就意味著引腳的復(fù)用功能無法使用,在硬件設(shè)計(jì)時(shí)應(yīng)該將[CE][4:1]和R/[B][4:1]連接至ARM的空閑引腳(該引腳的復(fù)用功能不使用),其余引腳對(duì)應(yīng)復(fù)用功能正常連接。硬件連接框圖如圖1所示。
在軟件設(shè)計(jì)時(shí),把[CE][4:1]和R/[B][4:1]相連的引腳分別配置成GPIO的輸出功能和輸入功能。由于片選低電平有效,初始化時(shí)將[CE][4:1]置高。在使用時(shí),ARM輸出低電平至需要操作的片選,使能該片NAND FLASH后,再判斷R/[B]反饋的狀態(tài)信號(hào),如果高電平表示NAND FLASH處于空閑狀態(tài)可以進(jìn)行接下來的操作,低電平則表示NAND FLASH處于忙碌狀態(tài),ARM等待至信號(hào)變高[7]。
圖1 連接框圖
當(dāng)一個(gè)片選的容量存滿之后,需要自動(dòng)切換到下一個(gè)片選,進(jìn)而可以繼續(xù)工作。對(duì)NAND FLASH的每次操作都涉及到對(duì)應(yīng)的操作地址,即頁地址、塊地址和片選號(hào)(從頁首開始操作,頁內(nèi)地址為0)。一次操作完成后,應(yīng)該更新操作地址并進(jìn)行相應(yīng)的判斷。前面介紹過K9MDG08U5M內(nèi)部包含4片,每片包含8 192塊,每塊由128頁構(gòu)成,因此最大頁地址為128,最大塊地址為8192,最大片選號(hào)為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ū)真正存入至存儲(chǔ)區(qū)一頁中[8]。通過對(duì)數(shù)據(jù)寫入過程的分析,可以看出每一次編程操作都是針對(duì)1頁大小的數(shù)據(jù)進(jìn)行的。這種操作方式可以提高寫入的速度,因?yàn)槊看螌懭霐?shù)據(jù)都需要向NAND FLASH發(fā)送命令和操作地址,與單字節(jié)操作相比,減少了程序多次執(zhí)行發(fā)送命令和地址的時(shí)間[9]。但當(dāng)數(shù)據(jù)不夠1頁時(shí),按頁操作就成為一種束縛。這是所有NAND FLASH都會(huì)存在的問題,對(duì)于大容量NAND FLASH,頁的大小也相應(yīng)增加,這種問題所造成的影響就變得更加明顯。
對(duì)于這個(gè)問題,首先想到的方法就是對(duì)數(shù)據(jù)進(jìn)行填充,將不足1頁的數(shù)據(jù)填充滿1頁,再完成接下來的存儲(chǔ)操作。本文用到的也就是這種方法,填充數(shù)據(jù)需要考慮兩個(gè)問題:一是什么時(shí)候填充;二是填充什么數(shù)據(jù)。
什么時(shí)候填充主要根據(jù)外圍設(shè)備的數(shù)據(jù)傳輸間隔來判斷,可以定義一個(gè)最大容忍時(shí)間。最大容忍時(shí)間可以根據(jù)實(shí)際情況適當(dāng)?shù)拇笮?,因?yàn)檫^小會(huì)造成沒有必要的填充,從而浪費(fèi)存儲(chǔ)資源,而容忍時(shí)間適當(dāng)大些不會(huì)帶來任何負(fù)面影響,定義的標(biāo)準(zhǔn)就是大于外圍設(shè)備的最大傳輸間隔。
關(guān)于填充什么數(shù)據(jù)并沒有特殊的限制,只需要不會(huì)對(duì)有效數(shù)據(jù)產(chǎn)生干擾即可。本文主要根據(jù)NAND FLASH內(nèi)部特點(diǎn)來選擇填充數(shù)據(jù)。由于NAND FLASH存儲(chǔ)單元的物理特性,編程操作時(shí)存儲(chǔ)單元的數(shù)據(jù)只能從1變成0,無法從0變成1,擦除的目的就是將所有存儲(chǔ)位變?yōu)?。因此存儲(chǔ)數(shù)據(jù)時(shí),沒有存入有效數(shù)據(jù)的空間內(nèi)數(shù)據(jù)[10]應(yīng)該都是0xFF。根據(jù)這一點(diǎn),本文選擇的填充數(shù)據(jù)就是0xFF,同時(shí)也滿足不會(huì)對(duì)有效數(shù)據(jù)產(chǎn)生干擾的要求。
在實(shí)際設(shè)計(jì)中,可以使用計(jì)時(shí)器進(jìn)行判斷,當(dāng)時(shí)間達(dá)到了最大容忍時(shí)間,即認(rèn)為不再有數(shù)據(jù)進(jìn)入,將緩存填充0xFF至1頁。計(jì)時(shí)器的初值并不等于零,而是定義為大于最大容忍時(shí)間的值。因?yàn)榭紤]到程序啟動(dòng)之后外圍設(shè)備不一定立刻就產(chǎn)生數(shù)據(jù),為了避免剛開始沒有數(shù)據(jù)進(jìn)入時(shí)也進(jìn)行填充,所以計(jì)時(shí)器選擇從較大的值開始計(jì)時(shí)。串口采用中斷方式接收數(shù)據(jù),當(dāng)有數(shù)據(jù)進(jìn)入時(shí),串口產(chǎn)生中斷,程序執(zhí)行中斷服務(wù)函數(shù),同時(shí)計(jì)時(shí)器歸零。當(dāng)下一幀數(shù)據(jù)進(jìn)入,串口再次產(chǎn)生中斷,計(jì)時(shí)器再次歸零。如果一定時(shí)間內(nèi)沒有數(shù)據(jù)進(jìn)入,計(jì)時(shí)器的值達(dá)到最大容忍時(shí)間,即認(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ā)送若干個(gè)字節(jié)后停止發(fā)送,將接收到的數(shù)據(jù)存入NAND FLASH第3片第2塊第1頁,最終再讀出并通過串口助手顯示。由圖4和圖5可知,循環(huán)發(fā)送出273 B,接收緩存最小編號(hào)為0,停止發(fā)送后,緩存中數(shù)據(jù)從第274個(gè)字節(jié)處開始填充為0xFF,顯示出的4 096 B(1頁大?。┲?,abcdefg后全為0xFF。實(shí)驗(yàn)結(jié)果達(dá)到預(yù)期效果,上述解決方法具有可行性。
圖4 串口助手收發(fā)界面
4 結(jié) 語
本文主要分析解決了大容量NAND FLASH應(yīng)用于ARM的兩個(gè)主要問題。首先對(duì)于片選不足的問題,可以通過ARM自身引腳的復(fù)用功能進(jìn)行解決,只需對(duì)片選及相應(yīng)的狀態(tài)信號(hào)重新定義,并注意操作地址的更新以保證NAND FLASH可以連續(xù)正常工作。其次解決了數(shù)據(jù)不夠1頁無法滿足按頁存儲(chǔ)的問題,通過定義最大容忍時(shí)間來判斷是否還有數(shù)據(jù)進(jìn)入,當(dāng)達(dá)到最大容忍時(shí)間即認(rèn)為數(shù)據(jù)采集完成,如果數(shù)據(jù)不足1頁則進(jìn)行填充,從而保證有效數(shù)據(jù)完全存入NAND FLASH。這兩個(gè)問題的解決,保證了基于ARM的大容量NAND FLASH可以充分有效的應(yīng)用。尤其對(duì)于第二個(gè)問題,解決方法適用于所有由NAND FLASH構(gòu)成的存儲(chǔ)系統(tǒng)。
圖5 Keil調(diào)試界面
參考文獻(xiàn)
[1] 陳國(guó),高楊.NAND FLASH在大容量存儲(chǔ)技術(shù)中的應(yīng)用[J].航空計(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存儲(chǔ)技術(shù)[J].航空計(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] 舒文麗,吳云峰,孫長(zhǎng)勝,等.基于NAND FLASH的海量存儲(chǔ)器的設(shè)計(jì)[J].電子器件,2012,35(1):107?110.
[7] 朱知博.基于NAND FLASH的高速大容量存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(8):170?173.
[8] 雷磊,謝民,李先楚.基于NAND 型FLASH的海量存儲(chǔ)板的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)控技術(shù),2007(z1):196?202.
[9] 鄭文靜,李明強(qiáng),舒繼武.FLASH存儲(chǔ)技術(shù)[J].計(jì)算機(jī)研究與發(fā)展,2010,47(4):716?726.
[10] 晏敏,龍小奇,章兢,等.開放式大容量NAND FLASH數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2009,26(11):13?16.