該芯片是一款典型的大容量NAND Flash存儲顆粒,支持Open NAND Flash Interface (ONFI) 2.1的接口標準,採用ONFI NANDFlash的操做協議。該芯片採用Multiple-level Cell (MLC)技術,根據不一樣的容量,一個芯片內部封裝了多個DIE(LUN),每一個DIE由兩個Plane構成,一個Plane能夠分紅2048個Block,每一個Block由256頁組成,一個頁的大小爲8KB+448B的組織結構方式。編程
在性能方面,一個Page頁的讀延遲在50us左右,頁編程時間爲900us,塊擦除時間長達3ms。每一個塊的標稱擦除壽命達到5000次。緩存
鎂光的芯片支持同步和異步兩種接口模式。在異步接口模式下,採用5個控制信號,分別爲#CE,CLE,ALE,#WE和#RE,另外#WP用於控制芯片的寫保護,R/#B用於檢測芯片的當前狀態。在同步操做模式下,#WR引腳爲時鐘輸入信號,#RE信號爲讀寫方向指示信號。架構
NAND Flash的接口信號具體定義以下:併發
一個NAND Flash物理芯片能夠由多個DIE(或者稱之爲LUN)的單元構成,每一個DIE會有一套獨立的上述說起的控制信號線。一個DIE中會存在若干個Plane,每一個Plane有許多Block單元組成,一個Block單元是一個最小的擦除單位,而且有數量較多的Page頁構成,每次寫的最小單元就是一個Page頁。對於容量較小的芯片,芯片廠商只會封裝一個DIE,每一個DIE的內部結構以下圖所示:異步
對於鎂光512Gb芯片,一個DIE內部集成了兩個Plane,經過一套控制信號線和寄存器控制內部的兩個Plane同時併發工做。值得一提的是,多個DIE(LUN)可能會共享一套控制信號線,所以,在物理上多個DIE會被封裝成一個Target。須要注意的是,同一個Target內部的DIE雖然共享了物理信號線,可是寄存器都是相互獨立的。所以,從結構上來看,一個NAND Flash的內部架構能夠只由一個DIE(LUN)構成,以下圖所示:ide
也能夠在一個芯片中集成多個DIE(LUN),每一個DIE擁有一套獨立的物理信號線,以下圖所示:性能
在高密的封裝中,沒有那麼多的物理信號線,那麼同一個Target中會集成多個DIE(LUN),若是下圖所示:spa
不管如何去封裝,每一個DIE(LUN)中的基本結構是相同的。3d
NAND Flash中一個DIE(LUN)中的存儲單元一般由多個Plane構成,其結構以下:blog
上圖所示的一個Page頁大小爲8KB,考慮到spare area的448字節空間,所以須要14位地址訪問一個page頁,即地址信號的最低14位爲頁內地址。一個block塊內部有256個page頁,須要8位地址(Page address,PA)信息去訪問一個block塊內部的不一樣page頁。一個Plane內部存在2048個block塊,須要11位(Block address,BA)去訪問一個Plane中的不一樣block塊。一個DIE(LUN)中存在2個Plane,須要一位地址位去訪問一個DIE中的不一樣Plane。所以,40位地址信息的定義以下表所示:
CA0~CA13爲頁內偏移訪問地址信息,PA0~PA7爲頁地址信息,BA8爲DIE中的Plane選擇地址位,BA9~BA19爲DIE中的塊地址信息,另外,LA0爲一個Target中的DIE(LUN)選擇地址位,在該NANDFlash芯片中,一個Target中能夠集成2個DIE。
在每一個Plane單元中都存在兩個寄存器:一個爲cache寄存器;另外一個爲data寄存器。Cache寄存器的做用是緩存NAND Flash控制器輸入的數據,而data寄存器的做用是提高數據讀取和寫入的性能,數據傳輸和數據加載之間的操做。在數據讀取和數據寫入的過程當中,都提供了流水併發操做模式,這類模式都充分利用了這個data寄存器。
鎂光的NAND Flash芯片提供了兩種操做模式,一種爲異步操做模式;另外一種爲同步操做模式。異步操做是一種比較傳統的接口模式,NAND Flash和控制器處於兩個時鐘域,全部的信號在數據傳輸過程當中都須要進行同步操做,所以性能比較差。同步操做由外部提供參考時鐘,NAND Flash和控制器處於同一個時鐘域,能夠獲取較高的讀寫性能。
異步操做模式很是適合單片機之類的控制器對其進行操做,不須要特殊的NAND Flash控制器,普通的總線操做就能夠對NAND Flash進行控制操做。異步數據寫操做的時序以下圖所示:
在#WE信號的驅動下,DQ總線上輸入對應的數據,而且在#WE信號上升沿以後須要保持tDH時間。在#WE信號上升沿驅動下,DQ總線上的數據被鎖存到NAND Flash的數據寄存器中。
在RDY信號爲高電平時,說明能夠從NAND Flash指定位置中讀取數據,讀操做的時序以下圖所示:
在讀信號#RE的降低沿驅動下,數據從NAND Flash中輸出到數據總線DQ上。NAND Flash控制器能夠在#RE信號的上升沿採樣數據總線DQ上的數據。當NAND Flash控制器給定的讀信號頻率較快時,經過#RE上升沿信號沒法正確採樣數據總線上的數據時,能夠經過下一個#RE信號的降低沿採樣總線上的輸出數據。以下圖所示:
所以,在異步總線操做時,須要考慮#RE讀信號頻率和tRC之間的時間關係。經過這個時間關係來肯定具體的讀數據採樣方式。
同步操做是一種高速接口,和DDR內存接口相似,能夠經過上下沿同時採樣的方式提高數據傳輸效率。在同步模式下,時鐘信號須要外部持續不斷的輸入,NAND Flash經過控制ALE、CLE、#CE、W/#R、DQS信號來控制數據的輸入和輸出。在同步模式下的數據輸入時序以下圖所示:
DQS信號由NAND Flash控制器驅動,而且和時鐘信號同頻同相。在CLK時鐘信號的上升沿和降低沿將總線上的數據鎖存到NAND Flash內部的寄存中。爲了可以讓NAND Flash在DQS的上升沿和降低沿採樣到總線上的數據,在沿變化以前,NAND Flash控制器須要在總線DQ上準備好寫入的數據。
當RDY信號爲高電平時,代表能夠從NAND Flash中輸出數據。在讀操做的時候,數據總線DQ、總線指示信號DQS須要由NAND Flash控制,控制器須要釋放對這些信號線的控制。數據讀總線操做時序以下圖所示:
能夠發現總線數據鎖存信號DQS和時鐘信號CLK同頻,可是會存在必定的相差,這樣NAND Flash控制器能夠經過CLK時鐘信號的雙沿變化對總線上的數據進行採樣,從而能夠正確的讀取NAND Flash中的數據。
NAND Flash的操做經過一系列的命令來完成。鎂光芯片的操做命令定義以下:
命令一共分紅9大類,包括復位操做、識別操做、配置操做、狀態操做、地址操做、讀操做、寫(編程)操做、擦除操做以及寫回操做。在NAND Flash控制器的軟件中須要將這些最底層的命令封裝成NAND Flash操做庫。
對於讀操做,NAND Flash提供了多種模式。普通的頁讀操做效率比較低,在發起頁讀取的時候須要輸入具體的命令和地址信息,而後再輸出數據,具體的操做時序以下圖所示:
輸入命令和地址信息以後,RDY信號變低,NAND Flash須要等待一段時間以後才能輸出數據,當數據準備完畢,能夠輸出時,RDY信號變高。NAND Flash在這個過程當中須要不斷檢測RDY信號,當該信號由低變高以後,能夠經過同步或者異步的方式輸出數據。
在NAND Flash的內部,有一個data cache寄存器,經過該寄存器能夠將數據讀取操做分紅兩個階段:一個是從page cache寄存器向NAND Flash控制器傳輸數據;另外一個是從NAND Flash中向data寄存器加載數據。這兩個操做能夠進行流水併發,命令0x31就是用來實現這個流水併發操做的。爲了提升數據輸出的效率,在普通頁讀取的基礎上,經過0x31命令能夠在數據從page cache輸出的同時從NAND Flash中向data cache加載新的數據。這種併發模式分紅兩類:一類爲順序讀,另外一類爲隨機讀,在操做時序上存在差異。下圖爲併發順序讀的操做時序:
在指定地址的數據從page cache中輸出的同時,NAND Flash會將下一頁數據加載到data寄存器中,這樣當NAND Flash控制器讀取完指定page中的數據以後,下一頁數據也已經被加載成功了。經過這種流水機制,提高讀性能。
除了能夠流水併發順序page頁以外,也能夠將隨機的page頁進行併發流水讀取,以下圖所示:
在頁讀取命令發送完畢以後,當該數據被加載到page cache以後,RDY信號由低置高。緊接着輸入另外一個頁地址,以及流水加載命令0x31。在page cache中數據往外輸出的同時,NAND Flash中的數據併發輸出到data寄存器中。經過這種方式能夠流水併發讀取兩個離散page頁中的數據。
對於併發讀取兩個plane中的數據,NAND Flash也提供了0x00-0x32控制命令,經過該命令能夠實現多個plane數據的併發加載,從NAND Flash中加載到各自對應的page cache中。
普通的寫命令容許NAND Flash控制器將數據寫入NAND Flash中的page cache寄存器,而且將數據從page cache寄存器中寫入到NAND Flash介質中。一個普通的頁編程時序以下圖所示:
該過程能夠分紅三大步驟:第一步輸入控制命令、操做地址信息;第二步輸入須要寫入的數據至page cache;第三步啓動編程,將page cache寄存器中的數據寫入NAND Flash介質。
若是每次寫入操做都經歷上述過程,那麼寫延遲將會變得很長。爲了提升頁寫入性能,NAND Flash提供了流水併發模式,該模式充分利用了data寄存器。採用的命令是0x80-0x15,時序以下圖所示:
在該模式下,在地址和命令的控制下,數據被首先寫入到page cache寄存器中。當0x15控制命令發送完畢以後,page cache寄存器中的數據會被拷貝到data寄存器中。拷貝進行時RDY信號置低,當拷貝完成以後,RDY信號變高電平。NAND Flash控制器在這種狀況下能夠輸入下一個頁的數據,在下一個頁數據輸入的過程當中,NAND Flash會併發將data寄存器中的數據寫入指定的介質中去。從而達到控制器輸入和具體的編程操做之間的流水併發,提升了page頁寫操做的吞吐量。
須要結束流水編程時,在最後一頁數據寫入以後,寫入0x10命令便可。具體的時序操做以下圖所示:
對於併發編程兩個Plane中的數據頁,NAND Flash提供了0x80-0x11命令。經過該命令能夠直接將數據寫入到多個Plane中的page cache寄存器中,從而實現多個Plane中的數據頁併發寫入。
擦除操做是一個很是費時的操做,對於NAND Flash而言,一個最小的擦除單元是block塊。當須要對一個塊進行擦除操做時,須要輸入塊的地址以及對應的控制命令,具體時序以下圖所示:
在擦除的過程當中,RDY信號會置低,此時該DIE將沒法進行正常的讀寫操做。因此,雖然不一樣的Plane之間擁有不一樣的寄存器組,可是因爲物理信號線是共用的,因此,一旦一個Plane中的block進入了擦除狀態,那麼整個DIE的讀寫操做將會受到影響。
在wear-leveling操做,或者garbage collecting的時候,一般須要將一個page頁中的數據拷貝到另外一個page頁,這就用到了COPYBACK的功能。該命令能夠將一個page頁中的數據加載到寄存器中,而後直接寫入到指定的另外一個page頁中。
在實際操做過程當中,考慮到NAND Flash中的數據可能已經遭到破壞,NAND Flash一般建議控制器在數據回拷的過程當中,對遷移的數據進行校驗。爲此NAND Flash提供了COPYBACK READ的控制操做過程,以下圖所示:
COPYBACK READ命令執行完畢以後,數據會輸入到NANDFlash控制器,控制器中的ECC×××對數據進行校驗,若是數據發生錯誤,那麼在COPYBACK WRITE的過程當中能夠將正確的數據寫入到NAND Flash中,在這個過程當中可使用CHANGE WRITE COLUME實現對page頁的隨機寫操做。該時序以下圖所示:
當更新的數據被寫入到Page cache寄存器以後,啓動頁編程,完成COPYBACK操做。
(吳忠傑,存儲之道)