劉桂英
(湛江師范學院信息科學與技術學院,廣東湛江 524048)
NAND Flash具有容量大、改寫速度快、價格低廉等優點,得到了廣泛應用,而且NAND Flash更新換代速度快。面對市面上不斷推出的各種新款NAND Flash,如何從一個未知參數的NAND Flash芯片中獲得相應的參數,以便一般實驗室和愛好者研究和使用。本文介紹了一種通用的識別NAND Flash未知參數方法。
對于 NAND Flash中,基本參數為 Page大小,Spare區大小,Block數目,每個 Block中 Page的數量[1]。
確定Page大小和Spare區大小。NAND Flash的參數識別可以分為6個步驟:
(1)調節NAND Flash控制器Timing,將速度調慢,使得所有NAND Flash的Timing都能滿足。
(2)識別NAND Flash的數據位寬。
(3)識別Page大小和Spare區大小。
(4)識別每個Block中包含多少個Page。
(5)識別NAND Flash包含的Block總數。
(6)不斷調整速度測試,查找該NAND Flash比較穩定的高速頻率。
每個NAND Flash都有其最小Timing間隔,如圖 1所示[2]。

圖1 NAND Flash的最小Timing間隔示意圖
NAND Flash一般只限定最小時間,沒有限定最大時間,所以當各部分Timing設置為一個較大值時,比如100 kbit·s-1的速率,基本能滿足所有 NAND Flash的要求,即一個通用的頻率。
當然這個速度相對于NAND Flash所能承受的最大速度而言較慢,只是為下一步探索所有NAND Flash的通用參數作準備,這里不要求效率,只要滿足兼容所有NAND Flash即可。
目前 NAND Flash數據位寬有:8 bit和16 bit兩種。
這兩個數據位寬的NAND Flash,都符合ONFI標準,惟一不用的是數據寬度,一個數據Clock分別接收或發送8 bit和16 bit,對于速度要求較高的應用可以選用 16 bit[3-6]。

圖2 識別流程圖
隨著NAND Flash容量不斷增大,NAND Flash的page大小規格也不斷變化。上一代產品page大小為512 Byte。現在市場主流NAND Flash的page大小為2048 Byte,4096 Byte,市場最新的產品已出現page大小為8192 Byte。最后可以看到NAND Flash page大小規格有:512 Byte,2048 Byte,4096 Byte,8192 Byte,…。從NAND Flash發展規律可以看出,由2048以后都是倍數地增長,可以利用這個規律,不斷地進行讀寫對比測試,獲得最終結果,所以識別page大小的方法如圖3所示。
相比之前,Spare區的大小規律性不強,收集到目前市場上NAND Flash的Spare區規格有16 Byte,64 Byte,128 Byte,218 Byte,224 Byte,…。雖然單從這些數字來看沒有規律,實際上是有規則的。發現這樣的搭配,當Page大小為512 Byte的NAND Flash,它的Spare區必定為16 Byte,Page大小為2048 Byte的芯片,Spare區的大小為64 Byte,但當Page大小為4 kB或者8 kB時,規律則不明顯,不同廠家不同型號Spare區大小都可能不同,最后得出如圖4所示的Spare區大小判斷方法。

圖3 識別Page大小的方法

圖4 Spare區大小判斷方法
NAND Flash是以Block為擦除單位,即擦除即擦除了一個Block中所示Page的信息。這也是Linux mtd,Wince和各種NAND Flash驅動的必須參數之一。這個參數比較有規律,一般為 32,64,128,256,512,…。采用讀寫對比方法最終確定大小,方法流程如圖5所示。
這個參數決定了NAND Flash的容量大小,判斷NAND Flash Block總數中,有一個技巧就是當讀寫時Block號大于NAND Flash本身的Block個數時,它會忽略超出的高位部分,只取偏移。所以可以利用這個特性,不斷累加Block,直到溢出為止,詳細的流程如圖6中所示。

圖5 方法流程圖

圖6 識別整個NAND Block總數流程圖
速度測試常用方法是從大到小不斷遞增地配置速度,然后讀寫對比,這樣即可獲得最大速度。
分別抽取了9個NAND Flash測試,表1為實驗的識別結果。

表1 實驗的識別結果
實驗結果表明,實驗準確率為100%,這個通用的識別方法不僅識別信息全,而且準確。
介紹了一個通用的NAND Flash參數識別方法,通過這種方法,可以獲取有用的NAND Flash信息,進而可以在沒有芯片資料的條件下不受約束,順利地操作各種NAND Flash。
[1] The Open NAND Flash Interface Warking Group.Open NAND flash interface specification v2.0[S].USA:The Open NAND Flash Interface Warking Group,2006.
[2] Intel Conpration.Intel MD332B NAND Flash Memory Specification[M].Norway:Intel Conpration,2009.
[3] KirK Zurell.嵌入式系統的C程序設計[M].艾克武,張劍波,艾克文,譯.北京:機械工業出版社,2002.
[4] 蔡浩.一種NAND Flash自啟動的新方法[J].現代電子技術,2007(8):184-151.
[5] 劉思平,陳利學.基于 FPGA的 NAND Flash控制器[J].現代電子技術,2007(9):141-142.
[6] 夏濤.基于ARM9內核Processor對外部NAND Flash的控制實現[J].現代電子技術,2007(11):193-195.