TWI877093B - 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 - Google Patents
控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 Download PDFInfo
- Publication number
- TWI877093B TWI877093B TW113141805A TW113141805A TWI877093B TW I877093 B TWI877093 B TW I877093B TW 113141805 A TW113141805 A TW 113141805A TW 113141805 A TW113141805 A TW 113141805A TW I877093 B TWI877093 B TW I877093B
- Authority
- TW
- Taiwan
- Prior art keywords
- data page
- block
- flash memory
- data
- super block
- Prior art date
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Read Only Memory (AREA)
Abstract
本發明揭露了一種控制一快閃記憶體模組的方法,其中該快閃記憶體模組包含多個晶粒,以及該方法包含有:若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個區塊;決定出該超級區塊之最後一個寫入的資料頁;根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍;讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個區塊之最後一個可以成功讀取資料頁。
Description
本發明係有關於快閃記憶體。
在快閃記憶體控制器將資料寫入至快閃記憶體模組的一超級區塊的過程中,若是發生不正常斷電,例如,斷電後回復(power off recovery,POR)或是突發斷電後回復(sudden power off recovery,SPOR),則在快閃記憶體控制器重新上電之後,快閃記憶體控制器會判斷是否遭遇到不正常斷電,並在判斷有遭遇到不正常斷電的情形下,判斷該超級區塊中有哪些資料仍然是有效的,並對該超級區塊進行垃圾收集(garbage collection)操作以將其中的有效資料搬移到另一個區塊中。然而,由於該超級區塊包含了多個區塊,且每一個區塊的資料寫入進度都不相同,故如何有效率地判斷該超級區塊中的有效資料是一個重要的課題。
因此,本發明的目的之一在於提出一種記憶裝置的控制方法,其可以在記憶裝置發生不正常斷電並重新上電後,有效率且準確地判斷出超級區塊中有哪些資料可以繼續使用,並對超級區塊進行處理以供繼續寫入資料,以解決先前技術中所述的問題。
在本發明的一個實施例中,揭露了一種控制一快閃記憶體模組的方法,其中該快閃記憶體模組包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁,以及該方法包含有:於該快閃記憶體模組上電後,判斷該快閃記憶體模組上電前是否遭遇到不正常斷電;若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊;決定出該超級區塊之最後一個寫入的資料頁;根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍;讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁;根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的一資料弱區;以及將該資料弱區中的資料搬移至該超級區塊的其他區域或是另一超級區塊中。
在本發明的一個實施例中,揭露了一種快閃記憶體控制器,其中該快閃記憶體控制器係用來存取一快閃記憶體模組,該快閃記憶體模組包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁,且該快閃記憶體控制器包含有一唯讀記憶體及一微處理器,且該微處理器用以執行以下操作:於該快閃記憶體模組上電後,判斷該快閃記憶體模組上電前是否遭遇到不正常斷電;若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊;決定出該超級區塊之最後一個寫入的資料頁;根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍;讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁;根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的一資料弱區;以及將該資料弱區中的資料搬移至該超級區塊的其他區域或是另一超級區塊中。
在本發明的一個實施例中,揭露了一種記憶裝置,其包含有一快閃記憶體模組及一快閃記憶體控制器。該快閃記憶體模組其包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁。該快閃記憶體控制器用以存取該快閃記憶體模組,且該快閃記憶體控制器執行以下操作:於該快閃記憶體模組上電後,判斷該快閃記憶體模組上電前是否遭遇到不正常斷電;若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊;決定出該超級區塊之最後一個寫入的資料頁;根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍;讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁;根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的一資料弱區;以及將該資料弱區中的資料搬移至該超級區塊的其他區域或是另一超級區塊中。
在本發明的一個實施例中,揭露了一種控制一快閃記憶體模組的方法,其中該快閃記憶體模組包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁,以及該方法包含有:選擇一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊;配置一控制器緩衝區,其中該控制器緩衝區包含多個緩衝區,且每一個緩衝區係用來儲存預備寫入至單一個資料頁的資料;自一主裝置接收多個讀取請求,並將該多個讀取請求依序儲存在一緩衝區請求池中;自該緩衝區請求池中選擇一最早寫入請求;判斷該最早寫入請求的對應資料所要寫入之該晶粒的該第一區塊在該控制器緩衝區所佔用的緩衝區數量是否高於一臨界值;若是該最早寫入請求的對應資料所要寫入之該晶粒的該第一區塊在該控制器緩衝區所佔用的緩衝區數量高於該臨界值,停止將該最早寫入請求所對應的資料寫入至該控制器緩衝區中。
在本發明的一個實施例中,揭露了一種快閃記憶體控制器,其中該快閃記憶體控制器係用來存取一快閃記憶體模組,該快閃記憶體模組包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁,且該快閃記憶體控制器包含有一唯讀記憶體及一微處理器,且該微處理器用以執行以下操作:選擇一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊;配置一控制器緩衝區,其中該控制器緩衝區包含多個緩衝區,且每一個緩衝區係用來儲存預備寫入至單一個資料頁的資料;自一主裝置接收多個讀取請求,並將該多個讀取請求依序儲存在一緩衝區請求池中;自該緩衝區請求池中選擇一最早寫入請求;判斷該最早寫入請求的對應資料所要寫入之該晶粒的該第一區塊在該控制器緩衝區所佔用的緩衝區數量是否高於一臨界值;若是該最早寫入請求的對應資料所要寫入之該晶粒的該第一區塊在該控制器緩衝區所佔用的緩衝區數量高於該臨界值,停止將該最早寫入請求所對應的資料寫入至該控制器緩衝區中。
第1圖為依據本發明一實施例之一種記憶裝置100的示意圖。記憶裝置100包含有一快閃記憶體(Flash Memory)模組120以及一快閃記憶體控制器110,且快閃記憶體控制器110用來存取快閃記憶體模組120。依據本實施例,快閃記憶體控制器110包含一微處理器112、一唯讀記憶體(Read Only Memory, ROM)112M、一控制邏輯114、一緩衝記憶體116、與一介面邏輯118。唯讀記憶體112M係用來儲存一程式碼112C,而微處理器112則用來執行程式碼112C以控制對快閃記憶體模組120之存取(Access)。控制邏輯114包含了一編碼器132、一解碼器134、一隨機化器(Randomizer)136及一解隨機化器(De-randomizer)138,其中編碼器132用來對寫入到快閃記憶體模組120中的資料進行編碼以產生對應的校驗碼(或稱,錯誤更正碼(Error Correction Code),ECC),解碼器134用來將從快閃記憶體模組120所讀出的資料進行解碼,隨機化器136係用來將寫入至快閃記憶體模組120的資料進行隨機化操作,且解隨機化器138係用來對從快閃記憶體模組120中所讀取的資料進行解隨機化操作。
於典型狀況下,快閃記憶體模組120包含了多個快閃記憶體晶片,而每一個快閃記憶體晶片包含複數個區塊(Block),而快閃記憶體控制器110對快閃記憶體模組120進行複製、抹除、合併資料等運作係以區塊為單位來進行複製、抹除、合併資料。另外,一區塊可記錄特定數量的資料頁(Page),其中快閃記憶體控制器110對快閃記憶體模組120進行寫入資料之運作係以資料頁為單位來進行寫入。換句話說,區塊是快閃記憶體模組120中一個最小的抹除單位,而資料頁是快閃記憶體模組120中一個最小的寫入單位。
實作上,透過微處理器112執行程式碼112C之快閃記憶體控制器110可利用其本身內部之元件來進行諸多控制運作,例如:利用控制邏輯114來控制快閃記憶體模組120之存取運作(尤其是對至少一區塊或至少一資料頁之存取運作)、利用緩衝記憶體116及/或一動態隨機存取記憶體(Dynamic Random Access Memory,DRAM) 140進行所需之緩衝處理、以及利用介面邏輯118來與一主裝置(Host Device)130溝通。
在一實施例中,記憶裝置100可以是可攜式記憶裝置(例如:符合SD/MMC、CF、MS、XD標準之記憶卡),且主裝置130為一可與記憶裝置連接的電子裝置,例如手機、筆記型電腦、桌上型電腦…等等。而在另一實施例中,記憶裝置100可以是固態硬碟或符合通用快閃記憶體儲存(Universal Flash Storage,UFS)或嵌入式多媒體記憶卡(Embedded Multi Media Card,EMMC)規格之嵌入式儲存裝置,以設置在一電子裝置中,例如設置在手機、手錶、攜帶型醫療檢測裝置(例如,醫療手環)、筆記型電腦、桌上型電腦之中,而此時主裝置130可以是該電子裝置的一處理器。
在本實施例中,快閃記憶體模組120係具一立體NAND型快閃記憶體(3D NAND-type flash)模組,其中每一個區塊係由多個字元線(word line)、多個位元線(bit line)以及多個記憶單元(memory cell)所構成。由於立體NAND型快閃記憶體架構係為本領域具有通常知識者所熟知,故在說明書中不多做說明。
第2圖為根據本發明一實施例之超級區塊的示意圖。如第2圖所示,假設快閃記憶體模組120包含了四個晶粒(晶粒1~晶粒4),且每一個晶粒包含了多個區塊B1 ~ BK,而此時微處理器112可以將快閃記憶體模組120內部之屬於不同資料面(plane)或是不同晶粒的區塊配置為一個超級區塊,以方便在資料存取上的管理。在本實施例中,係以一個晶粒內僅具有一個資料面來做為說明,但本發明並不以此為限。如第2圖所示,晶粒1~晶粒4分別包含了區塊B1~BK,而微處理器112可以將每一個晶粒的區塊B1配置為一超級區塊202、將每一個晶粒的區塊B2配置為一超級區塊204、…以此類推,而快閃記憶體控制器110在存取超級區塊202、204時則類似於一般區塊。舉例來說,超級區塊202本身即是一個抹除單位,亦即超級區塊202所包含的四個區塊B1雖然可以分開進行抹除操作,但是快閃記憶體控制器110卻一定會將四個區塊B1一起進行抹除。
此外,參考第3圖所示之區塊300的示意圖,其中區塊300可以是第2圖所示之區塊B1~BK中的任一,且區塊300包含了多個資料頁,例如圖示的448個資料頁。超級區塊202在進行資料寫入時可依序由晶粒1之區塊B1的第一個資料頁P1、晶粒2之區塊B1的第一個資料頁P1、晶粒3之區塊B1的第一個資料頁P1及晶粒4之區塊B1的第一個資料頁P1進行資料寫入,之後再將資料依序寫入至晶粒1之區塊B1的第二個資料頁P2、晶粒2之區塊B1的第二個資料頁P2、…、以此類推。換言之,快閃記憶體控制器110會安排將資料寫入至超級區塊202中每個區塊B1的第一個資料頁P1後,才接著安排將資料寫入至超級區塊202中每個區塊B1的第二個資料頁P2。超級區塊係快閃記憶體控制器110為了方便管理快閃記憶體模組120而在邏輯上設定之一集合區塊,並非物理上之集合區塊。此外,在進行垃圾收集、計算區塊有效頁、計算區塊寫入時間長短時,也都可以超級區塊為單位來進行計算。
在一實施例,關於主裝置130將資料寫入至快閃記憶體模組120的操作,參考第4圖,緩衝器記憶體116內包含一控制器緩衝器410,其包含用來暫存來自主裝置130之資料的多個緩衝區;介面邏輯118包含一緩衝區請求池(buffer request pool)420以及一空閒緩衝區池(free buffer pool)130,其中緩衝區請求池420用來指出主裝置130所請求寫入的資料,而空閒緩衝區池130則用來指出控制器緩衝器410中處於閒置狀態的緩衝區。在本實施例中,為了方便說明,控制器緩衝器410包含了八個緩衝區,其分別具有編號#1~#8,但本發明並不以此為限。在其他實施例中,控制器緩衝器410所包含之緩衝區的數量可以根據設計者的考量而有所變化。此外,緩衝區請求池420可以使用多個先進先出(first-in-first-out,FIFO)緩衝器來實作。
具體來說,參考第4圖,一開始主裝置130傳送一或多個寫入請求至緩衝區請求池420以要求將資料D1_1~D1_4、D2_1~D2_4寫入至快閃記憶體模組120,而由於此時控制器緩衝器410的八個緩衝區都處於閒置狀態,故快閃記憶體控制器110便可以根據這些寫入請求自主裝置130取得資料D1_1~D1_4、D2_1~D2_4,並將資料D1_1~D1_4、D2_1~D2_4分別寫入至緩衝區#1~緩衝區#8。在本實施例中,係假設資料D1_1~D1_4、D2_1~D2_4中的每一筆資料係寫入快閃記憶體模組120的一個資料頁,亦即資料D1_1~D1_4是分別預備寫入至晶粒1~晶粒4之區塊B1的資料頁P1,且資料D2_1~D2_4是分別預備寫入至晶粒1~晶粒4之區塊B1的資料頁P2。接著,快閃記憶體控制器110中的微處理器112透過直接記憶體存取(Direct Memory Access,DMA)操作,以將緩衝區#1~緩衝區#4的資料D1_1~D1_4平行地傳送至快閃記憶體模組120。
接著,參考第5圖,假設快閃記憶體模組120優先成功接收到資料D1_2,則快閃記憶體模組120內部的硬體元件便會開始將資料D1_2寫入至晶粒2之區塊B1的資料頁P1。此時,緩衝區#2的空間被釋放出來,而空閒緩衝區池430則會記錄緩衝區#2目前處於閒置狀態。
接著,參考第6圖,由於緩衝區#2的空間被釋放出來,故緩衝區請求池420的第一個寫入請求所對應到的資料D3_1會被寫入至緩衝區#2,且此時空閒緩衝區池430則不會記錄有任何緩衝區目前處於閒置狀態。
如上所述,當控制器緩衝區410內有緩衝區處於閒置狀態時,便會根據緩衝區請求池420的第一個寫入請求(亦即,最早寫入請求)以自主裝置130取得對應的資料,並將所取得的資料寫入至處於閒置狀態的緩衝區中。然而,由於快閃記憶體模組120中的每一個晶粒都有自己的後端硬體以使得快閃記憶體模組120可以平行地處理寫入至多個晶粒中的資料,而每一個晶粒及對應之後端硬體的處理速度會因為半導體製程而有些微的差異,因此,隨著寫入資料量的增加,每一個晶粒在寫入速度上的微小差異會不斷地累積,因而導致每一個晶粒在資料寫入上可能會出現較大的差異。舉例來說,參考第7圖,假設晶粒3在資料寫入的速度上會比其他的晶粒慢,則在最差的情形下(worst case),晶粒3之正在寫入的資料頁與晶粒2之已完成寫入的資料頁的差距會等於控制器緩衝區410之緩衝區的數量(亦即,八個資料頁),例如第7圖所示之當晶粒2已將資料D19_2寫入至資料頁P19時,晶粒3卻正在將資料D11_3寫入資料頁P11。而在此最差的情形下,控制器緩衝區410內的所有緩衝區#1~#3所儲存的資料都會是預備寫入至晶粒3之區塊B1的資料,例如圖示之D12_3~D19_3,進而造成整體的寫入速度被晶粒3所限制。
然而,若是在第7圖所示之資料寫入至超級區塊202的時候發生不正常斷電,例如突發斷電後回復(SPOR)的情形,則在記憶裝置100重新上電後,快閃記憶體控制器110會重新讀取超級區塊202的內容以判斷出超級區塊202的狀況,以供決定出適合的處理方式。本實施例提出了一種在記憶裝置100重新上電後的控制方法,其可以有效率且準確地判斷出超級區塊202中有哪些資料可以繼續使用,並對超級區塊202進行處理以供繼續寫入資料,以最佳化超級區塊202的使用。
第8圖為根據本發明一實施例之記憶裝置100的控制方法的流程圖。於步驟800,流程開始,記憶裝置100剛剛上電並進行初始化操作。於步驟802,快閃記憶體控制器110判斷記憶裝置100在上電前是否發生不正常斷電,若是,流程進入步驟806;若否,流程進入步驟804。在一實施例中,當記憶裝置100在正常關機/斷電的情形下,快閃記憶體控制器110會將儲存在緩衝記憶體116中的多個暫存表格及資料儲存到快閃記憶體模組120中,且其中包含了一個用來標示記憶裝置100是否正常關機的標籤(flag),因此,快閃記憶體控制器110在上電後可以透過讀取儲存在快閃記憶體模組120中一特定位址的上述標籤來判斷記憶裝置100之前是否有遭遇到不正常斷電的情形,例如,當上述標籤並未被正確設定時便判斷先前有遭遇到不正常斷電。
於步驟804,由於記憶裝置100在上電前並未遭遇到不正常斷電,故快閃記憶體控制器110開始正常地進行操作,例如將來自主裝置130的資料寫入至快閃記憶體模組120,或是對快閃記憶體模組120進行垃圾收集操作…等等,亦即快閃記憶體控制器110不會執行第8圖的步驟806~814。
於步驟806,快閃記憶體控制器110決定出快閃記憶體模組120在上電前最後一個寫入的資料頁。具體來說,步驟806可以進一步包含以下操作:首先,快閃記憶體控制器110決定出快閃記憶體模組120在上電前最後一個寫入的超級區塊,接著,決定出該超級區塊所包含之第一個晶粒之區塊的最後一個寫入的資料頁,最後再根據第一個晶粒之區塊的最後一個寫入的資料頁來尋找到快閃記憶體模組120在上電前最後一個寫入的資料頁。舉例來說,快閃記憶體控制器110可以搜尋快閃記憶體模組120中所記錄之處於活性(active)狀態的超級區塊來做為上電前最後一個寫入的超級區塊,而在以下的實施例中,係以第7圖所示的超級區塊202來做為說明。接著,針對超級區塊中的第一個區塊,例如超級區塊202中晶粒1之區塊B1,快閃記憶體控制器110使用二分搜尋法或是其他任意適合的搜尋法,以搜尋第一個區塊之最後一個有資料寫入的資料頁。以第7圖為例,快閃記憶體控制器110搜尋出晶粒1之區塊B1的資料頁P19來做為最後一個有資料寫入的資料頁。最後,快閃記憶體控制器110由晶粒1之區塊B1的資料頁P19向右尋找,亦即讀取資料頁的內容並判斷是否有資料寫入,以決定出晶粒2之區塊B1的資料頁P19為快閃記憶體模組120在上電前最後一個寫入的資料頁。
舉例來說,參考第9圖所示之使用二分搜尋法搜尋晶粒1之區塊B1之最後一個有資料寫入的資料頁的流程圖,流程如下所述。
步驟900:流程開始。
步驟902:根據區塊B1的資料頁總數(N)來決定出搜尋範圍(R)以及第一次要查找的資料頁序號(P=(N/2)),且此時搜尋方向為向前(D=2,即資料頁序號遞增之方向)。
步驟904:讀取資料頁(P)的備用區域(spare region)。
步驟906:根據備用區域中的內容來判斷資料頁(P)是否是空白資料頁,舉例來說,可以根據備用區域是否記載相關的元資料(metadata)來判斷資料頁(P)是否是空白資料頁。若判斷資料頁(P)是空白資料頁,則流程進入步驟908;若判斷資料頁(P)是並非空白資料頁,則流程進入步驟910。
步驟908:設定下一次要查找的資料頁序號為(P=P-(R/2)),且此時搜尋方向為向後(D=1,即資料頁序號遞減之方向)。
步驟910:設定下一次要查找的資料頁序號為(P=P+(R/2)),且此時搜尋方向為向前(D=2)。
步驟912:判斷搜尋範圍(R)是否為1,若否,流程進入步驟914;若是,則流程進入步驟916。
步驟914:將搜尋範圍減半(R=(R/2)),且流程回到步驟904。
步驟916:判斷搜尋方向是否為向後(D=1?),若否,流程進入步驟918;若是,則流程進入步驟920。
步驟918:判斷資料頁(P)為區塊B1之最後一個有資料寫入的資料頁。
步驟920:判斷資料頁(P-1)為區塊B1之最後一個有資料寫入的資料頁。
需注意的是,第9圖所示之詳細步驟只是作為範例說明,而非是本發明的限制。
此外,以上針對步驟806的詳細操作僅是作為範例說明,而非是本發明的限制。在其他實施例中,快閃記憶體控制器110可以對超級區塊202中的兩個或以上區塊都進行二分搜尋法以搜尋出這些區塊之最後一個有資料寫入的資料頁,之後再比對這些區塊之最後一個有資料寫入的資料頁的編號以得到快閃記憶體模組120在上電前最後一個寫入的資料頁。
於步驟808,在決定出快閃記憶體模組120在上電前最後一個寫入的資料頁之後,快閃記憶體控制器110決定出超級區塊202的一檢查範圍。在一實施例中,參考第7圖及相關的內容,由於在最差的情形下,晶粒3之正在寫入的資料頁與晶粒2之已完成寫入的資料頁的差距會等於控制器緩衝區410之緩衝區的數量,因此,假設控制器緩衝區410之緩衝區的數量為“N”,快閃記憶體控制器110可以根據快閃記憶體模組120在上電前最後一個寫入的資料頁的編號,回推“N+1”的資料頁,亦即將最後一個寫入的資料頁的編號減去“N”,以得到該檢查範圍。以第10圖為例來進行說明,假設快閃記憶體模組120在上電前最後一個寫入的資料頁為晶粒2之區塊B1的資料頁P19,則快閃記憶體控制器110可以先決定出該檢查範圍的下緣是超級區塊202所包含之四個區塊的資料頁P19、P19、P18、P18(亦即,將寫入順序早於晶粒2的晶粒1的區塊B1設為相同的資料頁編號P19,並將寫入順序晚於晶粒2的晶粒3、4的區塊B1設為資料頁編號減去“1”),之後再將這些編號減去“N”以得到該檢查範圍的上緣是超級區塊202所包含之四個區塊的資料頁P11、P11、P10、P10。
需注意的是,由於第7圖所描述的是最差的情形,因此,在步驟808的另一個實施例中,該檢查範圍的上緣可以根據快閃記憶體模組120的品質或是操作而在計算上有所變化,以使得該檢查範圍具有較少的資料頁。舉例來說,假設控制器緩衝區410之緩衝區的數量為“N”,快閃記憶體控制器110可以根據快閃記憶體模組120可以將最後一個寫入的資料頁的編號減去“P”,以得到該檢查範圍的上緣,其中“P”可以是小於“N”的任意適合值。
於步驟810,快閃記憶體控制器110在該檢查範圍內,由該檢查範圍之下緣依序往上緣方向讀取、或是由該檢查範圍之上緣依序往下緣方向讀取,直到所讀取到的資料可以成功地被解碼器134完成解碼操作為止,亦即解碼器134可以成功地使用所讀取資料的錯誤更正碼來完成解碼操作,以決定出超級區塊202中每一個區塊之最後一個可以成功讀取(亦即,成功完成解碼)的資料頁。以第10圖為例,解碼器134無法成功地對晶粒1之區塊B1的資料頁P19的資料進行解碼,但可以成功地對晶粒1之區塊B1的資料頁P18的資料進行解碼,故快閃記憶體控制器110決定晶粒1之區塊B1中最後一個可以成功讀取的資料頁為P18。類似地,快閃記憶體控制器110決定晶粒2之區塊B1中最後一個可以成功讀取的資料頁為P18、晶粒3之區塊B1中最後一個可以成功讀取的資料頁為P10、且晶粒4之區塊B1中最後一個可以成功讀取的資料頁為P17。
於步驟812,根據超級區塊202中每一個之最後一個可以成功讀取的資料頁,快閃記憶體控制器110決定出具有最小資料頁編號的資料頁及對應的一特定區塊或一特定晶粒,並據以決定出超級區塊202中最後一個有效寫入的區塊與資料頁。在一實施例中,若是該特定區塊的編號、或是該特定區塊所屬之晶粒的編號為N,其中N大於1,具有最小資料頁編號的資料頁的編號為M,則最後一個有效寫入的區塊所屬之晶粒的編號為“N-1”,且最後一個有效寫入之區塊的資料頁為“M+1”。以第10圖為例,所決定之該特定晶粒為晶粒3,且具有最小資料頁編號的資料頁為P10,則超級區塊202中最後一個有效寫入的資料頁是晶粒2之區塊B1的資料頁P11。此外,若是該特定區塊屬於晶粒1,則最後一個有效寫入的區塊所屬之晶粒為具有最大編號的晶粒(例如第10圖的晶粒4),且最後一個有效寫入之區塊的資料頁為“M”。
於步驟814,快閃記憶體控制器110根據步驟812所決定出之超級區塊202中最後一個有效寫入的區塊與資料頁,決定出超級區塊202的一資料弱區(weak region)以及一無效區域,並將該資料弱區內的資料搬移至超級區塊202內的其他區域、或是搬移至其他超級區塊。參考第11圖,快閃記憶體控制器110可以將超級區塊202中最後一個有效寫入的區塊與資料頁往前回推數個資料頁(例如,對應至一或二個字元線的資料頁數量),以決定出該資料弱區。舉例來說,該資料弱區可以包含晶粒1至晶粒4之區塊B1的資料頁P5~P10、以及晶粒1至晶粒2之區塊B11的資料頁P5~P11。此外,快閃記憶體控制器110可以根據步驟808所決定出之該檢查範圍的下緣,往後數個資料頁(例如,對應至一或二個字元線的資料頁數量),以決定出該無效區。舉例來說,該無效區可以包含晶粒3至晶粒4之區塊B1的資料頁P11、以及晶粒1至晶粒2之區塊的資料頁P12~P20。
在一實施例中,由於超級區塊202的該資料弱區可以視為資料不穩定的區域,故若是超級區塊202中位於無效區之後的空間足夠,則快閃記憶體控制器110將該資料弱區的資料複製至超級區塊202中位於無效區之後的空間,例如晶粒3至晶粒4之區塊B1的資料頁P21及之後的資料頁;而若是超級區塊202中位於無效區之後的空間不足夠,則快閃記憶體控制器110將該資料弱區的資料複製至其他超級區塊。
在一實施例中,由於超級區塊202的該無效區內的資料是被視為無法使用的資料,故快閃記憶體控制器110可以對超級區塊202的該無效區進行重複寫入(double programming),亦即將無效資料或是冗餘資料寫入至該無效區中,以穩定超級區塊。
如以上實施例所述,本實施例可以有效率且準確地判斷出超級區塊202中有哪些資料可以繼續使用,並對超級區塊202的資料弱區進行資料搬移以確保資料的可靠性。
在以上關於第7~10圖的實施例中,在記憶裝置100重新上電後,快閃記憶體控制器110會需要決定一個檢查範圍以供決定出超級區塊202中每一個區塊之最後一個可以成功讀取的資料頁,而該檢查範圍的上緣是根據控制器緩衝區410之緩衝區的數量來決定的。然而,在某些設計中,控制器緩衝區410之緩衝區的數量會很高,因此若是根據控制器緩衝區410之緩衝區的數量來決定該檢查範圍的上緣,則會使得該檢查範圍包含大量的資料頁,進而造成快閃記憶體控制器110可能需要讀取大量的資料頁才能決定出超級區塊202中每一個區塊之最後一個可以成功讀取的資料頁,而影響到記憶裝置100在上電後的執行效率。因此,為了解決上述問題,本實施例另外提出了一種可以限制每一個晶粒的資料所能占用控制器緩衝區410之緩衝區的數量的方法,以避免出現如第7圖所示之超級區塊202之不同區塊的寫入資料頁差異過大的問題。
具體來說,第12圖為根據本發明一實施例之記憶裝置100的控制方法的流程圖。於步驟1200,流程開始。於步驟1202,快閃記憶體控制器110自主裝置130接收多個寫入請求,並將這些寫入請求儲存在緩衝區請求池420中。於步驟1204,快閃記憶體控制器110根據空閒緩衝區池430的內容以判斷目前控制器緩衝區410內是否有處於閒置狀態的緩衝區,若是,流程進入步驟1206;若否,流程停留在步驟1204以持續進行判斷。
於步驟1206,快閃記憶體控制器110選擇緩衝區請求池420中的一最早寫入請求。於步驟1208,快閃記憶體控制器110判斷該最早寫入請求的對應資料所要寫入之晶粒/區塊在控制器緩衝區410所佔用的緩衝區數量是否高於一臨界值,若是,流程進入步驟1212;若否,流程進入步驟1210。在本實施例中,該臨界值為低於控制器緩衝區410內之緩衝區總數的任意適合值,舉例來說,假設如第4~7圖所示之控制器緩衝區410包含了八個緩衝區,則該臨界值可以是低於“8”的任意適合值,例如2、3、4、5…等等。
於步驟1210,快閃記憶體控制器110將該最早寫入請求的對應資料寫入至控制器緩衝區410的一緩衝區,以供後續寫入至快閃記憶體模組120。
於步驟1210,快閃記憶體控制器110暫停將該最早寫入請求的對應資料寫入至控制器緩衝區410,即使控制器緩衝區410包含了處於空閒狀態的一緩衝區,且流程回到步驟1208。
如第12圖的流程所述,透過使用該臨界值來限制每一個晶粒/區塊在控制器緩衝區410所佔用的緩衝區數量,故可以避免出現如第7圖所示之超級區塊202之不同區塊的寫入資料頁差異過大的問題。舉例來說,假設該臨界值為“2”,亦即控制器緩衝區410最多可以儲存兩筆要寫入至相同晶粒/區塊的資料,則參考第7、13圖,當控制器緩衝區410已經儲存了要寫入至晶粒3之區塊B1資料D12_3、D13_3之後,在資料D12_3完成傳送並釋放出緩衝區空間之前資料D12_4都無法被寫入至控制器緩衝區410中。因此,若此時發生不正常斷電,則在記憶裝置100重新上電後,於步驟808所決定的檢查範圍的上緣便可以將最後一個寫入的資料頁的編號減去“T”,其中“T”可以是該臨界值(亦即,控制器緩衝區410最多可以儲存T筆要寫入至相同晶粒/區塊的資料)。
以上所述僅為本發明之較佳實施例,凡依本發明申請專利範圍所做之均等變化與修飾,皆應屬本發明之涵蓋範圍。
100:記憶裝置
110:快閃記憶體控制器
112:微處理器
112M:唯讀記憶體
112C:程式碼
114:控制邏輯
116:緩衝記憶體
118:介面邏輯
120:快閃記憶體模組
130:主裝置
132:編碼器
134:解碼器
136:隨機化器
138:解隨機化器
140:DRAM
202,204:超級區塊
300:區塊
410:控制器緩衝器
420:緩衝區請求池
430:空閒緩衝區池
800~814:步驟
900~920:步驟
1200~1212:步驟
B1~BK:區塊
D1_1~D1_4, D2_1~D2_4, D3_1~D3_4, D4_1~D4_4:資料
D11_1~D19_2:資料
P1~P448:資料頁
第1圖為依據本發明一實施例之一種記憶裝置的示意圖。
第2圖為根據本發明一實施例之超級區塊的示意圖。
第3圖區塊所包含之多個資料頁的示意圖。
第4圖為根據本發明一實施例之將來自主裝置的資料寫入至超級區塊的示一圖。
第5圖為根據本發明一實施例之將來自主裝置的資料寫入至超級區塊的示一圖。
第6圖為根據本發明一實施例之將來自主裝置的資料寫入至超級區塊的示一圖。
第7圖為在最差的情形下兩個晶粒/區塊之寫入資料頁的差距會等於控制器緩衝區之緩衝區的數量的示意圖。
第8圖為根據本發明一實施例之記憶裝置的控制方法的流程圖。
第9圖為使用二分搜尋法搜尋區塊之最後一個有資料寫入的資料頁的流程圖。
第10圖為決定出超級區塊中每一個區塊之最後一個可以成功讀取的資料頁、並據以決定出一檢查範圍的示意圖。
第11圖為決定出超級區塊之資料弱區與無效區的示意圖。
第12圖為根據本發明一實施例之記憶裝置的控制方法的流程圖。
第13圖為根據本發明一實施例之縮小超級區塊之檢查範圍的示意圖。
800~814:步驟
Claims (15)
- 一種控制一快閃記憶體模組的方法,其中該快閃記憶體模組包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁,以及該方法包含有: 於該快閃記憶體模組上電後,判斷該快閃記憶體模組上電前是否遭遇到不正常斷電; 若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊; 決定出該超級區塊之最後一個寫入的資料頁; 根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍; 讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁; 根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的一資料弱區;以及 將該資料弱區中的資料搬移至該超級區塊的其他區域或是另一超級區塊中。
- 如申請專利範圍第1項所述之方法,其中根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的該檢查範圍的步驟包含有: 根據一控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣,其中每一個緩衝區係用來儲存預備寫入至單一個資料頁的資料;以及 根據該超級區塊之最後一個寫入的資料頁以決定出該檢查範圍的下緣。
- 如申請專利範圍第2項所述之方法,其中根據該控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣的步驟包含有: 將該超級區塊之最後一個寫入的資料頁的編號減去該多個緩衝區的數量以得到該檢查範圍的上緣。
- 如申請專利範圍第2項所述之方法,其中根據該控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣的步驟包含有: 將該超級區塊之最後一個寫入的資料頁的編號減去一臨界值以得到該檢查範圍的上緣,其中該臨界值小於該多個緩衝區的數量。
- 如申請專利範圍第1項所述之方法,其中根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的該資料弱區的步驟包含有: 根據該超級區塊中每一個第一區塊之最後一個可以成功讀取的資料頁,以決定出具有最小資料頁編號的一資料頁及對應的一特定第一區塊; 根據該具有最小資料頁編號的該資料頁及對應的該特定第一區塊,以決定出該超級區塊中最後一個有效寫入的第一區塊與資料頁;以及 根據該超級區塊中最後一個有效寫入的第一區塊與資料頁,以決定出該資料弱區。
- 一種快閃記憶體控制器,其中該快閃記憶體控制器係用來存取一快閃記憶體模組,該快閃記憶體模組包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁,且該快閃記憶體控制器包含有: 一唯讀記憶體,用來儲存一程式碼; 一微處理器,用來執行該程式碼以控制對該快閃記憶體模組之存取; 其中該微處理器用以執行以下操作: 於該快閃記憶體模組上電後,判斷該快閃記憶體模組上電前是否遭遇到不正常斷電; 若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊; 決定出該超級區塊之最後一個寫入的資料頁; 根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍; 讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁; 根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的一資料弱區;以及 將該資料弱區中的資料搬移至該超級區塊的其他區域或是另一超級區塊中。
- 如申請專利範圍第6項所述之快閃記憶體控制器,其中根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的該檢查範圍的步驟包含有: 根據一控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣,其中每一個緩衝區係用來儲存預備寫入至單一個資料頁的資料;以及 根據該超級區塊之最後一個寫入的資料頁以決定出該檢查範圍的下緣。
- 如申請專利範圍第7項所述之快閃記憶體控制器,其中根據該控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣的步驟包含有: 將該超級區塊之最後一個寫入的資料頁的編號減去該多個緩衝區的數量以得到該檢查範圍的上緣。
- 如申請專利範圍第7項所述之快閃記憶體控制器,其中根據該控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣的步驟包含有: 將該超級區塊之最後一個寫入的資料頁的編號減去一臨界值以得到該檢查範圍的上緣,其中該臨界值小於該多個緩衝區的數量。
- 如申請專利範圍第6項所述之快閃記憶體控制器,其中根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的該資料弱區的步驟包含有: 根據該超級區塊中每一個第一區塊之最後一個可以成功讀取的資料頁,以決定出具有最小資料頁編號的一資料頁及對應的一特定第一區塊; 根據該具有最小資料頁編號的該資料頁及對應的該特定第一區塊,以決定出該超級區塊中最後一個有效寫入的第一區塊與資料頁;以及 根據該超級區塊中最後一個有效寫入的第一區塊與資料頁,以決定出該資料弱區。
- 一種記憶裝置,包含有: 一快閃記憶體模組,其包含多個晶粒,每一個晶粒包含多個區塊,每一個區塊包含多個資料頁;以及 一快閃記憶體控制器,用以存取該快閃記憶體模組; 其中該快閃記憶體控制器執行以下操作: 於該快閃記憶體模組上電後,判斷該快閃記憶體模組上電前是否遭遇到不正常斷電; 若是該快閃記憶體模組上電前遭遇到不正常斷電,決定該快閃記憶體模組在上電前最後一個寫入的一超級區塊,其中該超級區塊包含了分別位於該多個晶粒的多個第一區塊; 決定出該超級區塊之最後一個寫入的資料頁; 根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的一檢查範圍; 讀取該檢查範圍內的至少一部份資料頁以判斷出該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁; 根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的一資料弱區;以及 將該資料弱區中的資料搬移至該超級區塊的其他區域或是另一超級區塊中。
- 如申請專利範圍第11項所述之記憶裝置,其中根據該超級區塊之最後一個寫入的資料頁以決定出該超級區塊的該檢查範圍的步驟包含有: 根據一控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣,其中每一個緩衝區係用來儲存預備寫入至單一個資料頁的資料;以及 根據該超級區塊之最後一個寫入的資料頁以決定出該檢查範圍的下緣。
- 如申請專利範圍第12項所述之記憶裝置,其中根據該控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣的步驟包含有: 將該超級區塊之最後一個寫入的資料頁的編號減去該多個緩衝區的數量以得到該檢查範圍的上緣。
- 如申請專利範圍第12項所述之記憶裝置,其中根據該控制器緩衝區所包含之多個緩衝區的數量以決定出該檢查範圍的上緣的步驟包含有: 將該超級區塊之最後一個寫入的資料頁的編號減去一臨界值以得到該檢查範圍的上緣,其中該臨界值小於該多個緩衝區的數量。
- 如申請專利範圍第11項所述之記憶裝置,其中根據該超級區塊中每一個第一區塊之最後一個可以成功讀取資料頁以決定出該超級區塊的該資料弱區的步驟包含有: 根據該超級區塊中每一個第一區塊之最後一個可以成功讀取的資料頁,以決定出具有最小資料頁編號的一資料頁及對應的一特定第一區塊; 根據該具有最小資料頁編號的該資料頁及對應的該特定第一區塊,以決定出該超級區塊中最後一個有效寫入的第一區塊與資料頁;以及 根據該超級區塊中最後一個有效寫入的第一區塊與資料頁,以決定出該資料弱區。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW113141805A TWI877093B (zh) | 2023-08-30 | 2023-08-30 | 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW113141805A TWI877093B (zh) | 2023-08-30 | 2023-08-30 | 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TWI877093B true TWI877093B (zh) | 2025-03-11 |
| TW202512198A TW202512198A (zh) | 2025-03-16 |
Family
ID=95828517
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW113141805A TWI877093B (zh) | 2023-08-30 | 2023-08-30 | 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 |
Country Status (1)
| Country | Link |
|---|---|
| TW (1) | TWI877093B (zh) |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9478271B2 (en) * | 2013-03-14 | 2016-10-25 | Seagate Technology Llc | Nonvolatile memory data recovery after power failure |
| TWI596480B (zh) * | 2011-12-05 | 2017-08-21 | 財團法人工業技術研究院 | 記憶體儲存系統及其中控裝置、管理方法與斷電復原方法 |
| TWI606388B (zh) * | 2016-12-14 | 2017-11-21 | 慧榮科技股份有限公司 | 資料儲存裝置及其資料維護方法 |
| TWI640868B (zh) * | 2016-10-07 | 2018-11-11 | 慧榮科技股份有限公司 | 資料儲存裝置及其資料寫入方法 |
| TWI734063B (zh) * | 2019-01-02 | 2021-07-21 | 慧榮科技股份有限公司 | 快閃記憶體控制器、管理快閃記憶體模組的方法及相關的電子裝置 |
| US20220066687A1 (en) * | 2020-08-27 | 2022-03-03 | Silicon Motion, Inc. | Control method for flash memory controller and associated flash memory controller and memory device |
-
2023
- 2023-08-30 TW TW113141805A patent/TWI877093B/zh active
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TWI596480B (zh) * | 2011-12-05 | 2017-08-21 | 財團法人工業技術研究院 | 記憶體儲存系統及其中控裝置、管理方法與斷電復原方法 |
| US9478271B2 (en) * | 2013-03-14 | 2016-10-25 | Seagate Technology Llc | Nonvolatile memory data recovery after power failure |
| TWI640868B (zh) * | 2016-10-07 | 2018-11-11 | 慧榮科技股份有限公司 | 資料儲存裝置及其資料寫入方法 |
| TWI606388B (zh) * | 2016-12-14 | 2017-11-21 | 慧榮科技股份有限公司 | 資料儲存裝置及其資料維護方法 |
| TWI734063B (zh) * | 2019-01-02 | 2021-07-21 | 慧榮科技股份有限公司 | 快閃記憶體控制器、管理快閃記憶體模組的方法及相關的電子裝置 |
| US20220066687A1 (en) * | 2020-08-27 | 2022-03-03 | Silicon Motion, Inc. | Control method for flash memory controller and associated flash memory controller and memory device |
Also Published As
| Publication number | Publication date |
|---|---|
| TW202512198A (zh) | 2025-03-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US9874918B2 (en) | Power interrupt management | |
| US20230342055A1 (en) | Control method of flash memory controller and associated flash memory controller and storage device | |
| CN111399751B (zh) | 闪存控制器、管理闪存模块的方法及相关的电子装置 | |
| US20220317878A1 (en) | Control method of flash memory controller and associated flash memory controller and storage device | |
| US20190227738A1 (en) | Integrated circuit memory devices with enhanced buffer memory utilization during read and write operations and methods of operating same | |
| TWI421870B (zh) | 用於快閃記憶體的資料寫入方法及其控制器與儲存系統 | |
| TWI802324B (zh) | 異常斷電恢復方法、記憶體控制電路單元以及記憶體儲存裝置 | |
| CN110837340A (zh) | 闪存控制器、管理闪存模块的方法及相关的电子装置 | |
| TWI459198B (zh) | 記憶體儲存裝置、其記憶體控制器與有效資料識別方法 | |
| CN101625897A (zh) | 用于快闪存储器的数据写入方法、储存系统与控制器 | |
| US11194502B1 (en) | Electronic device, flash memory controller and method for performing garbage collection operation on flash memory module | |
| TWI814501B (zh) | 映射表重建方法、記憶體儲存裝置及記憶體控制電路單元 | |
| TW202145243A (zh) | 資料儲存裝置與資料處理方法 | |
| US12436882B1 (en) | Control method of flash memory controller | |
| CN102737716B (zh) | 存储器储存装置、存储器控制器与数据写入方法 | |
| TWI877093B (zh) | 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 | |
| TW202601387A (zh) | 快閃記憶體控制器的控制方法、快閃記憶體控制器以及記憶體裝置 | |
| TWI877755B (zh) | 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 | |
| CN110069362A (zh) | 数据储存装置与数据处理方法 | |
| TWI670598B (zh) | 管理快閃記憶體模組的方法及相關的快閃記憶體控制器及電子裝置 | |
| TWI863495B (zh) | 控制快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 | |
| US12386524B2 (en) | Method for controlling flash memory module and associated flash memory controller and memory device | |
| US12039171B2 (en) | Method for accessing flash memory module, flash memory controller, and memory device | |
| CN114637630B (zh) | 异常断电恢复方法、存储器控制器及存储器存储装置 | |
| US12079483B2 (en) | Method for accessing flash memory module, flash memory controller, and memory device |