專利名稱:區(qū)塊為基礎(chǔ)閃存的字節(jié)存取的方法與裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明是關(guān)于閃存技術(shù),特別是關(guān)于快閃存儲裝置的高速、隨機存取的數(shù)據(jù)管理技術(shù)。
背景技術(shù):
電性可編程可擦除只讀存儲器(EEPROM)及閃存包括將電荷儲存在通道與場效晶體管柵極之間的存儲單元。所儲存的電荷會影響晶體管的閾值電壓,且閾值電壓會根據(jù)所儲存電荷改變而可以用來感測指示數(shù)據(jù)。其中一種非常慣用的電荷儲存存儲單元被稱為一浮動柵極存儲單元。在一浮動柵極存儲單元中,其會儲存電荷于通道與柵極之間的一導(dǎo)電材料層中。另一種電荷儲存存儲單元型態(tài)被稱為一電荷捕捉存儲單元,其會使用一介電層來取代浮動柵極。此處所使用的名詞”寫入”是指改變晶體管閾值電壓的操作,且是用來包括增加及減少晶體管閾值電壓的操作。在電性可編程可擦除只讀存儲器(EEPROM)及快閃裝置中, 寫入操作首先牽涉到一擦除步驟,將一存儲區(qū)段中的所有存儲單元設(shè)置為擦除狀態(tài),之后再進行一編程步驟,將此存儲區(qū)段中所選取的存儲單元設(shè)置為編程狀態(tài)。此處所使用的名詞”編程”則是指在一閃存中利用一字節(jié)接著一字節(jié)的方式所進行的操作,而此處所使用的名詞”擦除”則是指由于快閃存儲單元組態(tài)的關(guān)系,通常是以區(qū)段或是區(qū)塊的方式進行的操作。因此,在閃存中,為了編程一單一字節(jié),寫入操作必須先擦除此存儲陣列中一個較大的區(qū)段,且再為整個區(qū)段重新儲存數(shù)據(jù)。在一電性可編程可擦除只讀存儲器(EEPROM)裝置中的存儲單元可以利用一字節(jié)接著一字節(jié)的方式進行擦除而與其它的數(shù)據(jù)字節(jié)無關(guān)。然而,為了要致能一字節(jié)接著一字節(jié)的擦除方式,此電性可編程可擦除只讀存儲器(EEPROM)的存儲密度相對較低。電性可編程可擦除只讀存儲器(EEPROM)及快閃存儲裝置通常是作為不同的應(yīng)用。一般而言,因為其較高的密度,閃存在大量數(shù)據(jù)儲存應(yīng)用方面是較電性可編程可擦除只讀存儲器(EEPROM)更為經(jīng)濟的。而電性可編程可擦除只讀存儲器(EEPROM)是在需要對小量數(shù)據(jù)進行一字節(jié)接著一字節(jié)的數(shù)據(jù)讀寫更為合適,例如是儲存狀態(tài)數(shù)據(jù)或組態(tài)數(shù)據(jù)等需要不時改變或是類似的數(shù)據(jù)等。許多電子裝置中同時包含有電性可編程可擦除只讀存儲器(EEPROM)及閃存,以滿足此裝置中不同功能的不同存儲表現(xiàn)需求。然而,同時使用這兩種型態(tài)的存儲器增加了此裝置的成本及復(fù)雜程度。閃存會產(chǎn)生一個特定的問題就是其具有有限的耐久性,此裝置中的存儲單元可維持其操作性及可靠性的擦除及/或編程循環(huán)的數(shù)目是有限的。因此,重復(fù)及持續(xù)地寫入單一區(qū)段,或是少數(shù)的區(qū)段,會導(dǎo)致某些區(qū)段在相對短的時間之后變得老化并有缺陷了。不同的”平均消耗”技術(shù)被提出以延長閃存的壽命。一種平均消耗方案是使用記錄每一個區(qū)段被擦除的次數(shù)。此計數(shù)器然后被用來調(diào)整數(shù)據(jù)被映像至個別的區(qū)段中,以平衡其消耗??蓞㈤喢绹鴮@?,000,006,5, 485,595和5,341,339號專利。
雖然使用計數(shù)器可以延長快閃存儲裝置的壽命,然而有限的讀取/寫入耐久性問題仍會限制閃存在需要較多次數(shù)編程及擦除操作的應(yīng)用。另一種平均消耗方案是將更新數(shù)據(jù)寫入快閃存儲裝置中的沒有使用的實體位置, 而不是重新覆蓋原本的數(shù)據(jù)位置。如此會減少快閃存儲裝置中的一給定寫入操作時的區(qū)段擦除操作數(shù)目。可參閱美國專利第5,845,313和6,115,785號專利。為了追蹤數(shù)據(jù)的實際位置改變,可以使用可編程的映像表或是地址轉(zhuǎn)譯表??删幊痰挠诚癖韮Υ嬗梢煌獠肯到y(tǒng)所指示的邏輯地址與包含有效數(shù)據(jù)的快閃存儲裝置實體地址之間的映像信息。為了正確地追蹤有效數(shù)據(jù)的實際位置,此可編程的映像表在操作時必須被更新。為了確保有效數(shù)據(jù)被保持,此映像信息必須在中斷電源時被保持。然而,因為此可編程的映像地址轉(zhuǎn)譯表被持續(xù)地更新,儲存此映像信息于閃存中會減少此裝置的壽命。因為閃存相對慢的擦除速度,如此會嚴重地影響使用閃存的裝置的表現(xiàn)。此可編程的映像地址轉(zhuǎn)譯表或許可以替代地儲存在此裝置中的另一個非易失存儲器電路內(nèi)。然而,也會增加了此裝置的成本及復(fù)雜程度。因此需要提供一種快閃存儲裝置其可以適用于需要如同電性可編程可擦除只讀存儲器(EEPROM)的高速字節(jié)存取的性能特性,而同時也可以利用較低的成本及復(fù)雜程度并解決耐久性問題。
發(fā)明內(nèi)容
本發(fā)明是揭露一種操作一快閃存儲陣列的方法,其適用于高速字節(jié)存儲。此方法包含安排該快閃存儲陣列中具有區(qū)段地址的數(shù)據(jù)存儲單元的多個區(qū)段以儲存各自的數(shù)據(jù)結(jié)構(gòu),其中一數(shù)據(jù)結(jié)構(gòu)安排為儲存數(shù)據(jù)的字節(jié)(或是其它N位寬的數(shù)據(jù)組),其由一邏輯地址所辨識,且包括一索引字段及一數(shù)據(jù)域位。通過擦除該索引字段及該數(shù)據(jù)域位來初始化該數(shù)據(jù)結(jié)構(gòu)。此數(shù)據(jù)的字節(jié)的邏輯地址映像至與該數(shù)據(jù)的儲存一數(shù)據(jù)結(jié)構(gòu)的區(qū)段的區(qū)段地址。寫入該數(shù)據(jù)的字節(jié)具有一邏輯地址與特定區(qū)段地址匹配,該程序編程該數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中一特定區(qū)段地址,其中該數(shù)據(jù)存儲單元與該數(shù)據(jù)域位中的一特定字節(jié)寬的線段對應(yīng),且編程該數(shù)據(jù)結(jié)構(gòu)中對應(yīng)的字節(jié)寬線段以儲存該數(shù)據(jù)的字節(jié)。為了響應(yīng)一邏輯地址以讀取該數(shù)據(jù)的字節(jié),該數(shù)據(jù)結(jié)構(gòu)中的索引字段用來辨別儲存現(xiàn)有數(shù)據(jù)的該特定字節(jié)寬的線段。該現(xiàn)有數(shù)據(jù)被提供已響應(yīng)一讀取操作。在一實施例中,該數(shù)據(jù)結(jié)構(gòu)包括一索引字段包含一指向器字段具有一存儲單元儲存M位(例如觀位),在區(qū)段中具有地址順序,且包含一數(shù)據(jù)域位,其包含依序排列的M字節(jié)寬(例如觀字節(jié))的線段。此地址順序M位的每一個可以與相同地址順序中M字節(jié)寬線段的一個對應(yīng)。該指向器字段中M位的最后一個已被編程對應(yīng)至數(shù)據(jù)域位中最近使用的該M字節(jié)寬線段的一個。在此處所描述的一實施例中,提供一索引字段包含一指向器字段依地址順序儲存 M位,且該數(shù)據(jù)域位包含依地址順序排列的M字節(jié)寬線段。當每一數(shù)據(jù)存儲單元儲存一單一位,則指向器字段包含M個數(shù)據(jù)存儲單元。當指向器字段中儲存一第一位的一數(shù)據(jù)存儲單元被編程且其余的數(shù)據(jù)存儲單元在該指向器字段中仍保持擦除時,該指向器字段指向該字節(jié)寬線段的地址順序的第一者,當該儲存該第一位及一第二位的存儲單元被編程且其余的數(shù)據(jù)存儲單元在該指向器字段中仍保持擦除時,該指向器字段指向該字節(jié)寬線段的地址順序的第二者,且當該指向器字段中的所有該M位皆被編程時,該指向器字段指向該字節(jié)寬線段的地址順序的最后一者。在此處所描述的一實施例中,該數(shù)據(jù)結(jié)構(gòu)提供一索引字段,其包含該數(shù)據(jù)結(jié)構(gòu)的一狀態(tài)區(qū)位,且于初始化之后索引字段中的所有存儲單元是在擦除狀態(tài)。該狀態(tài)區(qū)位包含至少K-I個位依地址順序排列,且于初始化該數(shù)據(jù)結(jié)構(gòu)時指示K個進行狀態(tài)的目前一者。根據(jù)此處所描述的一范例,一初始狀態(tài)其中該狀態(tài)區(qū)位中所有K-I個位皆被擦除。在一第一狀態(tài)為當儲存該狀態(tài)區(qū)位的一第一位的一數(shù)據(jù)存儲單元被編程且該狀態(tài)區(qū)位的其余的數(shù)據(jù)存儲單元被擦除時,在一第二狀態(tài)為當儲存該狀態(tài)區(qū)位的該第一及一第二位的一或多個數(shù)據(jù)存儲單元被編程且該狀態(tài)區(qū)位的其余的數(shù)據(jù)存儲單元被擦除時,且在一最后狀態(tài)為該狀態(tài)區(qū)位的所有該K-I個位皆被編程。對一數(shù)據(jù)處理系統(tǒng)中的使用,地址轉(zhuǎn)譯表可以儲存此閃存中區(qū)段的存儲單元的數(shù)據(jù)字節(jié)所映像的邏輯地址。此處所描述的多個數(shù)據(jù)結(jié)構(gòu)可以在存儲單元各自區(qū)段中被初始化,且根據(jù)地址轉(zhuǎn)譯表將其映像至對應(yīng)的邏輯地址。索引字段中的狀態(tài)區(qū)位用來管理數(shù)據(jù)結(jié)構(gòu)的狀態(tài)以維持地址轉(zhuǎn)譯表的正確。在一特定數(shù)據(jù)結(jié)構(gòu)中的所有字節(jié)寬線段皆被使用的情況下,數(shù)據(jù)結(jié)構(gòu)中的目前字節(jié)可以被復(fù)制到一個新的數(shù)據(jù)結(jié)構(gòu),且此地址轉(zhuǎn)譯表可以用來更新以將舊的數(shù)據(jù)結(jié)構(gòu)映像至新的數(shù)據(jù)結(jié)構(gòu)。管理將目前字節(jié)被復(fù)制到一個新的數(shù)據(jù)結(jié)構(gòu)中的程序包括更新此狀態(tài)區(qū)位。舉例而言,狀態(tài)區(qū)位可以包括4個位,且可以用來表示5個狀態(tài)。由狀態(tài)區(qū)位指示的初始狀態(tài)是代表此數(shù)據(jù)結(jié)構(gòu)被初始化且沒有邏輯地址被映像至此數(shù)據(jù)結(jié)構(gòu)。由狀態(tài)區(qū)位指示的第一狀態(tài)是代表邏輯地址所映像的新的數(shù)據(jù)結(jié)構(gòu)被選取且適合用來取代舊的數(shù)據(jù)結(jié)構(gòu)。 由狀態(tài)區(qū)位指示的第二狀態(tài)是代表自源數(shù)據(jù)結(jié)構(gòu)(或其它數(shù)據(jù)結(jié)構(gòu))寫入目前數(shù)據(jù)字節(jié)至新的數(shù)據(jù)結(jié)構(gòu)已完成。由狀態(tài)區(qū)位指示的第三狀態(tài)是代表一擦除程序已開始重新初始化舊的數(shù)據(jù)結(jié)構(gòu)。由狀態(tài)區(qū)位指示的第四狀態(tài)是代表一擦除舊的數(shù)據(jù)結(jié)構(gòu)的程序已完成,且映像至新的數(shù)據(jù)結(jié)構(gòu)已有效。一快閃存儲陣列可以在區(qū)塊邊界擦除的程序包含分配第一及第二區(qū)塊,每一區(qū)塊包含L個區(qū)段,于該快閃存儲陣列的L個邏輯地址。在此程序中,于一特定區(qū)段初始化該數(shù)據(jù)結(jié)構(gòu)包括擦除包含該特定區(qū)段的該L個區(qū)段的該第一及第二區(qū)塊的一個,且當該第一區(qū)塊中的該數(shù)據(jù)結(jié)構(gòu)中M個N位數(shù)據(jù)域位經(jīng)歷寫入操作時(例如此數(shù)據(jù)結(jié)構(gòu)是滿的),將該第一區(qū)塊的區(qū)段的數(shù)據(jù)結(jié)構(gòu)中所儲存的數(shù)據(jù)移至該第二區(qū)塊中的數(shù)據(jù)結(jié)構(gòu)。此外,本發(fā)明亦揭露一種快閃存儲陣列,包含具有區(qū)段地址的數(shù)據(jù)存儲單元的多個區(qū)段,具有邏輯以根據(jù)上述方法儲存數(shù)據(jù)結(jié)構(gòu)以在該閃存中進行字節(jié)模式的讀取及寫入操作。此裝置也包含一數(shù)據(jù)處理器,其與該快閃存儲陣列集成在相同的芯片上,或是在一計算機系統(tǒng)中可以存取該快閃存儲陣列,且包含可以由該數(shù)據(jù)處理器執(zhí)行的指令,包括此處所描述的可以在一快閃存儲陣列上執(zhí)行的上述方法的指令。這些可以由該數(shù)據(jù)處理器所執(zhí)行的指令,可以儲存在該快閃存儲陣列中或是其它可以由該數(shù)據(jù)處理器所存取之處。本發(fā)明還揭露一種機器可讀數(shù)據(jù)儲存裝置,包含一機器可讀數(shù)據(jù)儲存媒介,儲存可由處理器執(zhí)行的指令,該處理器具有存取一存儲陣列的功能,該存儲陣列包含具有區(qū)段地址的數(shù)據(jù)存儲單元的多個區(qū)段。該指令包含執(zhí)行上述方法的邏輯。
此處所描述的技術(shù)對字節(jié)寬的操作加上參考值以幫助理解。此程序可以自有時寫入一字節(jié)(例如8位),有時寫入任何N位寬數(shù)據(jù)組(例如16或32位)而產(chǎn)生,具有在了解先前技術(shù)及適當?shù)卣{(diào)整此數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)域位的大小的情況。此外,此處所使用的名詞”區(qū)段”或”區(qū)塊”是指一組或陣列數(shù)據(jù)存儲單元。這些名詞并不是用來限制一組或陣列數(shù)據(jù)存儲單元必須與快閃存儲陣列實際區(qū)段嚴格地對應(yīng), 雖然可以在此處所描述的程序中將”區(qū)段”或”區(qū)塊”與快閃存儲陣列實際區(qū)段對應(yīng)會具有其優(yōu)點。此處所描述的技術(shù)使用擦除一次編程多次的漸進索引結(jié)構(gòu)來管理快閃存儲裝置中的數(shù)據(jù),可以避免在每次將儲存在快閃存儲裝置中的數(shù)據(jù)字節(jié)進行區(qū)段擦除操作之后就必須更新的需求。儲存在此陣列的可尋址區(qū)段中的數(shù)據(jù)結(jié)構(gòu)包括索引數(shù)據(jù)、狀態(tài)數(shù)據(jù)及此數(shù)據(jù)的字節(jié)以供邏輯地址映像至此區(qū)段,其可以使用擦除一次編程多次的程序管理。其結(jié)果是,可以在一給定區(qū)段需要進行一區(qū)段擦除操作之前進行較大數(shù)量的寫入操作。所以,閃存可以用來作為高速字節(jié)存取之用。本發(fā)明的目的,特征,和實施例,會在下列實施方式的章節(jié)中搭配圖式被描述。
本發(fā)明是由權(quán)利要求范圍所界定。這些和其它目的,特征,和實施例,會在下列實施方式的章節(jié)中搭配圖式被描述,其中圖IA顯示一計算機系統(tǒng)的簡要方塊示意圖,其適用于使用此處所描述技術(shù)的快閃存儲裝置的數(shù)據(jù)安排之用。圖IB顯示高速字節(jié)存取所用的快閃存儲陣列所儲存數(shù)據(jù)結(jié)構(gòu)的區(qū)塊或區(qū)段的數(shù)據(jù)安排。圖2顯示于一范例區(qū)塊內(nèi)的數(shù)據(jù)排列方式,其包括多個區(qū)段。圖3顯示一邏輯地址的映像范例,其是介于1 字節(jié)的邏輯地址與快閃存儲裝置實體地址空間中具有1 個區(qū)段的一區(qū)塊的映射。圖4顯示于一范例數(shù)據(jù)存儲單元的一區(qū)段的數(shù)據(jù)結(jié)構(gòu)內(nèi)的數(shù)據(jù)排列方式。圖5顯示實體地址空間與邏輯地址空間之間的轉(zhuǎn)譯的示意圖。圖6為根據(jù)本發(fā)明一實施例的一個寫入操作的流程圖,其是儲存一更新數(shù)據(jù)字節(jié)至一特定邏輯地址。圖7顯示于操作時編程此索引字段中一被擦除數(shù)據(jù)存儲單元的范例。圖8為根據(jù)本發(fā)明一實施例的一個讀取操作的流程圖,其是讀取特定邏輯地址的數(shù)據(jù)。圖9為根據(jù)本發(fā)明一實施例的一個編排操作的流程圖。圖10為根據(jù)本發(fā)明一實施例的一個轉(zhuǎn)換操作1000的流程圖,其是于圖9的編排操作時改變儲存在狀態(tài)標識字段中的數(shù)據(jù)。圖11顯示根據(jù)本發(fā)明一實施例快閃存儲裝置中不同軟件階級之間的關(guān)系圖。圖12顯示根據(jù)本發(fā)明一第二實施例快閃存儲裝置中不同軟件階級之間的關(guān)系圖。主要元件符號說明
9
100 計算機系統(tǒng)
112 總線子系統(tǒng)
114 處理器
116 網(wǎng)絡(luò)接口
118 通信網(wǎng)路
120 快閃存儲裝置
122 使用者接口輸入裝置
125 區(qū)塊
128 區(qū)段
130 使用者接口輸出裝置
200 初始數(shù)據(jù)區(qū)域
210 寫入紀錄區(qū)域
230 寫入紀錄數(shù)據(jù)
300 邏輯地址空間
310 實體地址空間
520 地址轉(zhuǎn)譯表
1110低階快閃應(yīng)用程序接口
1120智能快閃應(yīng)用程序接口
1130使用者程序代碼
1200字節(jié)讀寫模式區(qū)域
1210快閃存儲裝置存取模式
具體實施例方式本發(fā)明實施例搭配以下圖1到圖12進行詳細描述。圖IA顯示一計算機系統(tǒng)100的簡要方塊示意圖,其適用于使用此處所描述技術(shù)的包括區(qū)塊為基礎(chǔ)快閃存儲裝置的存儲子系統(tǒng)120數(shù)據(jù)安排之用,此快閃存儲裝置可為例如是串行外圍接口(SPI)兼容的快閃存儲裝置數(shù)據(jù)安排之用。計算機系統(tǒng)100通常包含至少一個處理器114其透過總線子系統(tǒng)112與許多外圍裝置進行溝通。這些外圍裝置可以包括額外的快閃存儲裝置(未示)、使用者接口輸入裝置122、使用者接口輸出裝置130及一個網(wǎng)絡(luò)接口子系統(tǒng)116。這些輸入與輸出裝置可以允許使用者與計算機系統(tǒng)100互動。網(wǎng)絡(luò)接口子系統(tǒng)116是作為提供給與外部網(wǎng)絡(luò)的接口,包含一個與通信網(wǎng)路118的接口,且透過通信網(wǎng)路118與其它計算機系統(tǒng)中的對應(yīng)接口裝置耦接。通信網(wǎng)路118可以包含許多互連的計算機系統(tǒng)及通信連接。這些通信連接可以是有線連接、光纖連接、無線連接、或是其它信息傳輸?shù)臋C制。其中一個實施例的通信網(wǎng)路118是因特網(wǎng),但是在其它的實施例中通信網(wǎng)路118可以是任何適用的計算機網(wǎng)絡(luò)。使用者接口輸入裝置122可以包括鍵盤,指向裝置例如是鼠標,軌跡追蹤器、觸控板、或是圖形平板、掃瞄器、觸控屏幕、聲控輸入裝置例如是聲音辨識系統(tǒng)、麥克風或是其它型態(tài)的輸入裝置等等。一般而言,使用此名詞”輸入裝置”是代表希望包含所有可能用來輸入信息進入計算機系統(tǒng)100或是通信網(wǎng)路118的裝置型態(tài)或是方式。
使用者接口輸出裝置130可以包括顯示次系統(tǒng)、打印機、傳真機、或是非視覺顯示例如一聲音輸出裝置等等。此顯示次系統(tǒng)可以包括映像管(CRT)、平面顯示裝置例如液晶顯示器,一投影裝置,以及其它產(chǎn)生視覺影像的機制等。此顯示次系統(tǒng)也可以包括提供非視覺顯示例如聲音輸出裝置。一般而言,使用此名詞”輸出裝置”是代表希望包含所有可能用來自計算機系統(tǒng)100或是其它機器輸出信息的裝置型態(tài)或是方式。存儲子系統(tǒng)120快閃存儲裝置120儲存基本的編程及數(shù)據(jù)結(jié)構(gòu),其提供此處某些實施例中所描述的功能,包括邏輯至實體的地址映像及轉(zhuǎn)譯的指令,以及用來將數(shù)據(jù)安排于此存儲子系統(tǒng)120快閃存儲裝置120內(nèi)的指令(會在以下描述)。這些軟件模塊通常是由處理器114執(zhí)行,基本的編程及數(shù)據(jù)結(jié)構(gòu)可以儲存在閃存或是其它的存儲裝置中。此外, 此存儲子系統(tǒng)120可以包含其它的儲存裝置,包括隨機存取存儲器(RAM)以于程序執(zhí)行時儲存指令或數(shù)據(jù),可攜存儲裝置、磁盤驅(qū)動系統(tǒng)等。此存儲子系統(tǒng)120可以包含機器可讀數(shù)據(jù)儲存裝置,包括儲存可以處理器執(zhí)行的機器可讀數(shù)據(jù)儲存媒介所儲存的指令,此處理器具有存取包括多個數(shù)據(jù)區(qū)段存儲單元的存儲陣列的能力,其中這些指令包含可以進行此處所描述的程序的邏輯。在例示的實施例中,處理器114執(zhí)行指令以進行此處所描述包括快閃存儲裝置外的許多操作。替代地,此快閃存儲裝置包括一處理器或是其它型態(tài)的控制器以控制數(shù)據(jù)管理及執(zhí)行此處所描述的許多操作。舉例而言,此控制器可以是使用業(yè)界所熟知的特殊功能邏輯電路構(gòu)成的狀態(tài)機構(gòu)。在替代的實施例中,此控制器包含通用目的處理器,其可以應(yīng)用于同一集成電路上,以執(zhí)行一控制此快閃存儲裝置120的計算機程序。而在另一實施例中, 通用目的處理器與特殊功能邏輯電路的組合可以用來實施此控制器??偩€子系統(tǒng)112提供一機制使計算機系統(tǒng)100中不同的元件及子系統(tǒng)可以如所需要的彼此互相溝通。雖然圖式中所顯示的總線子系統(tǒng)112是單一總線,總線子系統(tǒng)112的替代實施例可以使用多重總線。在某些實施例中,于快閃存儲裝置120與總線子系統(tǒng)112 之間的數(shù)據(jù)、地址及命令信號可以利用串行方式施加在共享的線上,例如可以使用業(yè)界所熟知的串行外圍接口。如圖IB中所示,一快閃存儲陣列可以具有多個實體區(qū)塊,其包含區(qū)塊0125-0至區(qū)塊K 125-K,以儲存利用上述技術(shù)安排的數(shù)據(jù)。區(qū)塊0125-0至區(qū)塊K 125-K中的每一個區(qū)塊可以自其它區(qū)塊中單獨的擦除。此區(qū)塊的大小和數(shù)目可以視實施例的不同而改變。舉例而言,在某些實施例中,每一個區(qū)塊的大小可以是2KB、4KB、8KB或16KB。替代地也可以使用其它的區(qū)塊大小。如同以上所描述的,此快閃存儲陣列也可以包括額外的區(qū)塊以儲存將邏輯與實體地址映像及轉(zhuǎn)譯的指令,及如同上述將數(shù)據(jù)分配于區(qū)塊0125-0至區(qū)塊K 125-K的指令。指令包括自計算機系統(tǒng)100所指定的快閃存儲裝置120的邏輯地址與快閃存儲裝置120區(qū)塊0125-0至區(qū)塊K 125-K的實體地址之間的映像。區(qū)塊0125-0至區(qū)塊K 125-K每一個包括一個或多個區(qū)段。舉例而言,一個4KB的區(qū)塊可以包括1 個32字節(jié)的區(qū)段。此1 個區(qū)段中的每一個可以包含儲存一字節(jié)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。1 個邏輯地址可以映像至此區(qū)塊中的1 個區(qū)段。如同以下所描述的,區(qū)段地址映像至數(shù)據(jù)字節(jié)的特定邏輯地址,且適用于儲存作為字節(jié)存取的數(shù)據(jù)結(jié)構(gòu)。在此處所描述范例中的一數(shù)據(jù)存儲單元的一給定區(qū)段中的數(shù)據(jù)結(jié)構(gòu)包括一索引字段及一數(shù)據(jù)域位。此索引字段包括一指向器至此數(shù)據(jù)域位中一特定字節(jié)寬的線段,此數(shù)據(jù)域位是用來儲存此數(shù)據(jù)字節(jié)所映像的邏輯地址。在實施例中,區(qū)段的一的索引字段也包括儲存數(shù)據(jù)的狀態(tài)標識字段以指示此區(qū)段的狀態(tài)。在此處所描述的范例中,區(qū)段狀態(tài)維持在區(qū)塊的邊界內(nèi),且指示區(qū)塊中區(qū)段的狀態(tài),例如在一給定區(qū)塊中的區(qū)段是否目前是工作 (正在工作)、非工作(被擦除)、污染或是暫時的數(shù)據(jù)。因此,此區(qū)塊中的所有數(shù)據(jù)結(jié)構(gòu)必須具有相同的狀態(tài)。替代地,區(qū)段狀態(tài)可以維持在區(qū)段邊界內(nèi)。此外,在某些實施例中,每一個區(qū)塊可以使用一單獨的狀態(tài)標識,且并不包含于每一區(qū)段的數(shù)據(jù)結(jié)構(gòu)的索引字段內(nèi)。在寫入操作時,在索引字段中的一擦除存儲單元被編程以更新此指向器至此數(shù)據(jù)域位中字節(jié)寬的線段的被擦除的那一個,且此字節(jié)寬的線段的被擦除的那一個中的特定擦除的數(shù)據(jù)存儲單元被編程以儲存此數(shù)據(jù)字節(jié)的映像邏輯地址。為了明了起見,以下的范例中,此名詞”編程”是指將存儲單元中的數(shù)據(jù)值改變至邏輯”0”的操作,而”擦除”是指將存儲單元中的數(shù)據(jù)值改變至邏輯” 1”的操作。與編程和擦除狀態(tài)所對應(yīng)的數(shù)據(jù)也可以分別是1和0。此外,在多階存儲單元中,編程可以被假設(shè)為多個值。然而,如同之前所描述的,此名詞”編程”通常是指在閃存中一個存儲單元接著一個存儲單元為基礎(chǔ)進行的操作,而因為快閃存儲單元組態(tài)的緣故,”擦除”是指閃存中較大范圍為基礎(chǔ)所進行的操作,可以在一給定陣列結(jié)構(gòu)中有效執(zhí)行的范圍內(nèi)。因此,根據(jù)快閃存儲單元的組態(tài),在某些實施例中編程和擦除分別包含減少和增加閾值電壓。此數(shù)據(jù)域位的大小必須在一區(qū)塊或區(qū)段進行擦除操作的頻率與可以映像至此快閃存儲裝置的一給定區(qū)塊的邏輯地址數(shù)目之間作取舍(以下將會討論),且因此可以視實施例的不同而改變。此快閃存儲裝置也可以包括多個非工作區(qū)塊或區(qū)段,其可以在當一目前數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)域位滿的時候,作為一預(yù)備單元以不時地儲存更新數(shù)據(jù)。圖2顯示一區(qū)塊內(nèi)的數(shù)據(jù)排列方式,其包括多個自區(qū)段0到區(qū)段M的區(qū)段。在實施例中,區(qū)段0到區(qū)段M的每一個區(qū)段或許可以獨立地擦除。而在此處所描述的范例中,區(qū)段不可以獨立地擦除,而是擦除操作是在區(qū)塊邊界內(nèi)進行以作為此陣列區(qū)段中的高速字節(jié)存取之用。如圖IB中所示,數(shù)據(jù)結(jié)構(gòu)被安置于可尋址的區(qū)段,且包括一索引區(qū)域來儲存索弓I字段及一數(shù)據(jù)區(qū)域來儲存數(shù)據(jù)域位。在區(qū)段0中的數(shù)據(jù)結(jié)構(gòu)包括一索引字段200-0,其包括一指向器至此數(shù)據(jù)域位 202-0中一特定字節(jié)寬的線段,其儲存對應(yīng)邏輯地址的數(shù)據(jù)字節(jié)。此指向器代表此索引字段 200-0中一系列的編程及擦除存儲單元。當正在進行具有映像至區(qū)段0數(shù)據(jù)存儲單元的邏輯地址的一字節(jié)的寫入操作時, 此索引字段中的一擦除數(shù)據(jù)存儲單元被編程以更新索引字段200-0的指向器指向至此數(shù)據(jù)域位202-0中一特定字節(jié)寬的線段,其儲存對應(yīng)邏輯地址的數(shù)據(jù)字節(jié),且此字節(jié)寬的線段的被擦除的那一個中的特定擦除的數(shù)據(jù)存儲單元被編程以儲存此數(shù)據(jù)字節(jié)的映像邏輯地址。在此例示的范例中,在索引字段中的數(shù)據(jù)存儲單元為了響應(yīng)各自的寫入命令而以地址順序被編程,自第一寫入操作的索引字段中的數(shù)據(jù)存儲單元的第一位開始,然后是第二寫入操作的第二位,一直到最近被編程存儲單元之后的數(shù)據(jù)存儲單元仍保持擦除。類似地,數(shù)據(jù)域位中的字節(jié)寬的線段按照一例如是地址順序的方式寫入,自第一寫入操作的第一字節(jié)寬線段開始,然后是第二寫入操作的第二字節(jié)寬線段,一直到最近被編程之后的字節(jié)寬線段仍保持擦除(或是空的)。在替代實施例中,為了響應(yīng)各自的寫入命令在索引字段中的數(shù)據(jù)存儲單元依序被編程,且數(shù)據(jù)域位中的字節(jié)寬線段也依序?qū)懭耄瑑烧叩捻樞蚩梢允桥c圖2中所示不同的。舉例而言,在索引區(qū)域中的數(shù)據(jù)存儲單元可以自第一寫入操作的索引字段中的最后數(shù)據(jù)存儲單元開始編程,以此類推。通過寫入更新數(shù)據(jù)至數(shù)據(jù)域位202-0中被擦除的字節(jié)寬線段,而不是利用一擦除操作直接將其蓋掉,用來更新指向器及數(shù)據(jù)存儲單元以儲存將被編程的數(shù)據(jù)的更新字節(jié)的至索引字段中的數(shù)據(jù)存儲單元并不需要經(jīng)歷擦除程序。如此會在一編程操作中與寫入操作的數(shù)目相較,僅需要一小數(shù)的區(qū)塊或區(qū)段的擦除操作,而可以有效地增加快閃存儲陣列的耐力。因為更新數(shù)據(jù)是寫入數(shù)據(jù)域位中的空節(jié)段,此數(shù)據(jù)域位最終會變滿。因此,區(qū)塊1 中區(qū)段0到區(qū)段M的區(qū)段所儲存的數(shù)據(jù)結(jié)構(gòu)要不時使用一個區(qū)段接著一個區(qū)段或是一個區(qū)塊接著一個區(qū)塊的方式,重新映像至與區(qū)塊0中區(qū)段0到區(qū)段M的區(qū)段所對映的數(shù)據(jù)結(jié)構(gòu)中。此名詞”不時”是指偶爾,且不需要規(guī)律或是定期或是以相等的時間間隔進行。除了使用儲存在索引字段200-0狀態(tài)標識字段的數(shù)據(jù)來辨別此區(qū)塊1中區(qū)段工作或非工作的狀態(tài)外,在狀態(tài)標識字段中的數(shù)據(jù)也被用來確認此更新數(shù)據(jù)區(qū)段被編排及正確地儲存在新的區(qū)塊中。這些會搭配以下的圖9更詳細地描述。圖3顯示一介于邏輯地址空間300中的邏輯地址群組302-0至302-127映像至快閃存儲裝置120實體地址空間320中的具有區(qū)段-0至區(qū)段-127的區(qū)塊的映像范例。在此例示中,邏輯地址空間300中的每一個邏輯地址被映像至對應(yīng)的實體地址空間320中數(shù)據(jù)存儲單元的32字節(jié)的區(qū)段。因此,邏輯地址0000000(參考標號302-0)被映射至區(qū)段 0304-0,邏輯地址0000001 (參考標號302-1)被映射至區(qū)段1304-1,以此類推。在此范例中,數(shù)據(jù)存儲單元的每一個區(qū)段包含一 4字節(jié)的索引字段及一 32字節(jié)的數(shù)據(jù)域位,且用來儲存所對應(yīng)邏輯地址的8位(1字節(jié))的數(shù)據(jù)。因此,在此范例中,在數(shù)據(jù)存儲單元的一給定區(qū)段的數(shù)據(jù)域位中可以在數(shù)據(jù)域位變滿之前支持32個單一字節(jié)寫入操作至所對應(yīng)邏輯地址。圖4更顯示區(qū)段0304-0中的數(shù)據(jù)安排。如圖4中所示,數(shù)據(jù)存儲單元的區(qū)段 0304-0儲存包含索引字段400和數(shù)據(jù)域位410的數(shù)據(jù)結(jié)構(gòu)。在此例示中,索引字段400中位0 27的數(shù)據(jù)構(gòu)成一指向器420至數(shù)據(jù)域位410中用來儲存邏輯地址0000000 (參考標號302-0)所映像8位數(shù)據(jù)的一特定字節(jié)寬線段。索引字段中的位觀 31的數(shù)據(jù)構(gòu)成一狀態(tài)標識字段430,其指示此區(qū)段的一狀態(tài),在此范例中以一區(qū)塊為基礎(chǔ)的方式保持,指示所有的區(qū)段區(qū)段-0至區(qū)段-127的共同狀態(tài)(以下會更詳細地描述)。如圖4所示,位0 27的數(shù)據(jù)構(gòu)成一指向器420來識別數(shù)據(jù)域位410中用來儲存邏輯地址0000000(參考標號302-0)所映像8位數(shù)據(jù)的一特定區(qū)段。舉例而言,對一每位一存儲單元的應(yīng)用而言,假如索引字段中位0的數(shù)據(jù)被編程,且其余所有的位1 27的存儲單元被擦除,此指向器420會指向區(qū)段d0,其是數(shù)據(jù)域位410中的地址順序的第一個區(qū)段。假如索引字段中位0 1的數(shù)據(jù)被編程,且其余所有的位2 27的存儲單元被擦除, 此指向器420會指向區(qū)段dl,其是數(shù)據(jù)域位410中的地址順序的第二個區(qū)段。也可以使用
13替代地技術(shù)來安排數(shù)據(jù)以為指向器420辨識哪一個特定區(qū)段可以使用。此外,在多重位存儲單元的實施例中,一數(shù)據(jù)存儲單元可以儲存兩個位或以上的指向器。圖5顯示實體地址空間與邏輯地址空間之間的轉(zhuǎn)譯的示意圖。邏輯地址是使用一地址轉(zhuǎn)譯表520將其映射至對應(yīng)的區(qū)塊。對一特定的邏輯地址而言,此地址轉(zhuǎn)譯表520辨識與此邏輯地址對應(yīng)的數(shù)據(jù)存儲單元的區(qū)塊與區(qū)段提供對應(yīng)至邏輯地址的區(qū)塊。儲存在對應(yīng)數(shù)據(jù)存儲單元的數(shù)據(jù)結(jié)構(gòu)的索引字段的指向器然后被讀取以辨識儲存此邏輯地址數(shù)據(jù)的數(shù)據(jù)域位中的區(qū)段。指向器的使用排除了在快閃存儲裝置120每次更新數(shù)據(jù)或是當此區(qū)塊中的工作區(qū)段被改變之后就必須更新地址轉(zhuǎn)譯表520的需求,而且也可以致能有效數(shù)據(jù)的正確追蹤。因為地址轉(zhuǎn)譯表520并不需要持續(xù)地更新,其可以儲存于快閃存儲裝置120中。于操作時,地址轉(zhuǎn)譯表520可以被提取至較高存取速度的存儲器中,例如圖1處理器的DRAM或是 SRAM。圖6為根據(jù)本發(fā)明一實施例的一個由處理器114所執(zhí)行寫入操作600的流程圖, 其是儲存數(shù)據(jù)字節(jié)或是其它N位數(shù)據(jù)區(qū)段至一特定邏輯地址。如此處所示的流程圖,必須明白的是許多步驟可以被結(jié)合,平行地執(zhí)行或是以不同的順序執(zhí)行而不會影響所欲達成的功效,在某些情況下,不同步驟的重新安排僅會在一并調(diào)整某些步驟才會達成相同的功效, 且在某些情況下,不同步驟的重新安排僅會在某些條件被滿足才會達成相同的功效。如此的重新安排對本領(lǐng)域技術(shù)人員而言是顯而易見的。為了響應(yīng)儲存數(shù)據(jù)字節(jié)至一特定邏輯地址的寫入命令,在步驟610,使用之前討論過的地址轉(zhuǎn)譯表來決定對應(yīng)至此特定邏輯地址的數(shù)據(jù)存儲單元的區(qū)塊或區(qū)段。在步驟615,儲存在對應(yīng)數(shù)據(jù)存儲單元的數(shù)據(jù)結(jié)構(gòu)的索引字段的指向器然后被讀取以決定儲存此數(shù)據(jù)域位中的擦除區(qū)段以儲存此數(shù)據(jù)字節(jié)。在步驟620,假如此數(shù)據(jù)域位并不包含一擦除區(qū)段,則此數(shù)據(jù)域位是滿的。在如此情況下,此操作600繼續(xù)至方塊630,其中為此區(qū)段儲存此數(shù)據(jù)結(jié)構(gòu)的更新數(shù)據(jù)結(jié)構(gòu)被編排。此編排操作會在以下搭配圖9來說明。假如此數(shù)據(jù)域位包含一擦除區(qū)段,則此操作600繼續(xù)至方塊640。在步驟640,在索引字段中的一擦除數(shù)據(jù)存儲單元被編程以更新此指向器至此被擦除區(qū)段,且此更新數(shù)據(jù)被寫入此被擦除區(qū)段。此操作600然后停止在步驟650。圖7顯示于操作時編程此索引字段中擦除數(shù)據(jù)存儲單元的范例。如圖7所示,位 0 27用來儲存指向器,而位觀 31用來儲存一狀態(tài)標識字段,其指示此區(qū)段或區(qū)塊的一狀態(tài)(以下會更詳細地描述)。在此范例中,此區(qū)塊中每一個區(qū)段的狀態(tài)標識被設(shè)置以指示區(qū)段是工作的,其所有位被編程至,,00000 ”。如圖7所示,為了響應(yīng)一第一寫入操作,此指向器通過編程位1的存儲單元至邏輯 0而更新,在第二寫入操作時,編程位2的存儲單元至邏輯0,以此類推直到此指向器字段中的所有觀個位皆被編程至邏輯0為止。于此編程過程中并不需要進行擦除操作。雖然此指向器字段中的一給定字節(jié)在編程過程中被存取多次,但是因為在此字節(jié)中若沒有存儲單元需要自編程改變至擦除狀態(tài)的話,一編程過程是執(zhí)行字節(jié)讀取或其它類似的步驟以防止預(yù)擦除,所以并不需要進行擦除操作。在替代實施例中,可以使用與圖7中所示的不同順序來編程索引字段中的數(shù)據(jù)存儲單元。舉例而言,為了響應(yīng)第一寫入操作,在索引區(qū)域中的數(shù)據(jù)存儲單元可以自指向器的數(shù)據(jù)存儲單元中的最后位27的順序開始編程,以此類推。圖8為根據(jù)本發(fā)明一實施例的一個由處理器114所執(zhí)行讀取操作800的流程圖, 其是讀取特定邏輯地址的數(shù)據(jù)。為了響應(yīng)讀取此特定邏輯地址數(shù)據(jù)的一讀取命令,在步驟810,使用之前討論過的地址轉(zhuǎn)譯表來決定對應(yīng)至此特定邏輯地址的數(shù)據(jù)存儲單元的區(qū)塊或區(qū)段。在步驟820,儲存在對應(yīng)數(shù)據(jù)存儲單元的數(shù)據(jù)結(jié)構(gòu)的索引字段的指向器被讀取以決定儲存此邏輯地址數(shù)據(jù)的數(shù)據(jù)域位中的(最后)工作區(qū)段。儲存在此工作區(qū)段中的數(shù)據(jù)然后在步驟830被讀取且輸出。如同之前所討論過的,不時編排此區(qū)塊的一更新數(shù)據(jù)組,且寫入至一先前為非工作的區(qū)塊。圖9為根據(jù)本發(fā)明一實施例的一個由處理器114所執(zhí)行編排操作900的流程圖。 此操作900可以在一給定區(qū)塊的數(shù)據(jù)存儲單元一區(qū)段中的數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)域位變滿時或是其它任何時間被啟動。為了更清楚地在以下的討論說明起見,在操作900開始之前的工作區(qū)塊稱為”區(qū)塊 A”,而在操作900開始之前的非工作區(qū)塊稱為”區(qū)塊B”。在此程序中所使用的區(qū)塊可以是對所用的閃存的擦除操作時最少被擦除的存儲單元組。每一個區(qū)塊中所分配的區(qū)段及數(shù)據(jù)結(jié)構(gòu)的數(shù)目可以是自1到任何適用于一預(yù)設(shè)使用模式的數(shù)目。在步驟910,儲存在區(qū)塊A數(shù)據(jù)域位中主動區(qū)段內(nèi)的數(shù)據(jù)被讀取以為映像至區(qū)塊A 的邏輯地址群組編排一更新數(shù)據(jù)組。此更新數(shù)據(jù)組包括映像至區(qū)塊A的邏輯地址群的有效數(shù)據(jù)。在步驟920,此更新數(shù)據(jù)組寫入?yún)^(qū)塊B區(qū)段的數(shù)據(jù)域位中。在步驟930,地址轉(zhuǎn)譯表被更新以將邏輯地址群組重新映像至區(qū)塊B。在步驟940,區(qū)塊A被擦除。在某些實施例中,在步驟940中的區(qū)塊A擦除操作并不會在步驟930的重新映像之后馬上進行,而是在例如是處理器114的資源沒有進行其它操作時才進行。如同上面所描述的,狀態(tài)標識字段中的數(shù)據(jù)被用來確保此更新數(shù)據(jù)組被編排且正確地存在先前是非工作的區(qū)塊中。圖10為根據(jù)本發(fā)明一實施例的一個由處理器114所執(zhí)行轉(zhuǎn)換操作1000的流程圖。其是于圖9的編排操作900時改變儲存在區(qū)塊A和區(qū)塊B所有數(shù)據(jù)結(jié)構(gòu)的狀態(tài)標識字段中的數(shù)據(jù)。如圖10中所示,于編排操作900開始時用來儲存工作區(qū)塊A狀態(tài)標識字段中的數(shù)據(jù)存儲單元的位是在一編程狀態(tài)(0000),且用來儲存非工作區(qū)塊B狀態(tài)標識字段中的數(shù)據(jù)存儲單元的位是在一擦除狀態(tài)(1111)。當區(qū)塊B被選取,且在更新數(shù)據(jù)組被寫入?yún)^(qū)塊B的數(shù)據(jù)域位之前,在步驟1010區(qū)塊B區(qū)段中所有觀個位的數(shù)據(jù)存儲單元被編程以將區(qū)塊B狀態(tài)標識字段中的數(shù)據(jù)自” 1111” 改變至“0111”。通過如此方式將將區(qū)塊B狀態(tài)標識字段中的數(shù)據(jù)改變,在更新數(shù)據(jù)組被寫入?yún)^(qū)塊B之前,此狀態(tài)標識字段中的數(shù)據(jù)可以用來決定是否發(fā)生例如是電源消失的中斷事件。之后,在步驟1020區(qū)塊A數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)被寫入?yún)^(qū)塊B的初始化數(shù)據(jù)結(jié)構(gòu)中。之后在步驟1030,此程序決定此寫入是否完成。于將更新數(shù)據(jù)組寫入?yún)^(qū)塊B的數(shù)據(jù)域位中之后(步驟1020和1030),在步驟1040區(qū)塊B狀態(tài)標識字段中位四的數(shù)據(jù)存儲單元被編程以將區(qū)塊B狀態(tài)標識字段中的數(shù)據(jù)自”0111 ”改變至“0011 ”。狀態(tài)標識字段中的數(shù)據(jù)被用來確保區(qū)塊B中包含邏輯地址群組的更新數(shù)據(jù)組。之后,可以安全地進行區(qū)塊A的數(shù)據(jù)結(jié)構(gòu)擦除操作,且重新映像此邏輯地址。于此擦除程序開始時,可以是馬上進行或是在處理器具有可用的資源時進行,在步驟1041區(qū)塊B區(qū)段的狀態(tài)標識字段中的數(shù)據(jù)被更新至“0001”。 之后,區(qū)塊A的擦除操作可以在步驟1050開始,且此程序等候直到步驟1060完成擦除。因為區(qū)塊A的狀態(tài)標識字段是在區(qū)塊之內(nèi),此區(qū)塊A的擦除操作(步驟1050 到1060)也會擦除狀態(tài)標識字段中的數(shù)據(jù),其會將區(qū)塊A狀態(tài)標識字段中的數(shù)據(jù)改變至 “1111”(非工作)。于此區(qū)塊A的擦除操作之后,在步驟1070區(qū)塊B狀態(tài)標識字段中位31的數(shù)據(jù)存儲單元被編程以將區(qū)塊B區(qū)段的狀態(tài)標識字段中的數(shù)據(jù)自”0001”改變至“0000”(工作)。在此轉(zhuǎn)換操作1000的流程圖中,將區(qū)塊B狀態(tài)標識字段自” 1111”(非工作)至 “0000”(工作)的轉(zhuǎn)換牽涉到此狀態(tài)標識字段中已被擦除存儲單元的編程。此技術(shù)消除了在每次需要改變狀態(tài)標識字段時就必須擦除數(shù)據(jù)存儲單元的需求。其結(jié)果是,狀態(tài)標識字段的數(shù)據(jù)可以儲存在區(qū)塊B,而不需要分開地儲存。在替代實施例中,改變狀態(tài)標識字段的數(shù)據(jù)時必須被編程的位可以與圖10中所示的不同。如同以上所觀察到的,在某些實施例中,在步驟1050中的區(qū)塊A擦除操作并不需要馬上進行,而是在例如是處理器114的資源沒有進行其它操作時才進行。圖11顯示根據(jù)本發(fā)明一實施例快閃存儲裝置120中不同軟件階級之間的關(guān)系圖。 使用者程序代碼1130包括邏輯以提供邏輯地址及命令以讀取和寫入數(shù)據(jù)至此快閃存儲裝置 120。此智能快閃應(yīng)用程序接口(API) 1120是一個軟件模塊包括邏輯以進行邏輯-實體地址映像及轉(zhuǎn)譯,及邏輯以管理讀取和寫入至此快閃存儲裝置120的數(shù)據(jù)以進行此處所描述的不同操作。此智能快閃應(yīng)用程序接口(API)1120自使用者程序代碼1130轉(zhuǎn)譯命令并提供指令給低階快閃應(yīng)用程序接口(API) 1110。此智能快閃應(yīng)用程序接口(API) 1120也使用地址轉(zhuǎn)譯表將使用者程序代碼1130的邏輯地址轉(zhuǎn)譯成對應(yīng)的實體地址,其然后提供給低階快閃應(yīng)用程序接口(API) 1110軟件模塊。此低階快閃應(yīng)用程序接口(API) 1110是一個軟件驅(qū)動器特別適用于與快閃存儲裝置120搭配工作。此低階快閃應(yīng)用程序接口(API) 1110包括邏輯以進行實際的讀取和編程數(shù)據(jù)以及區(qū)段抹除至此快閃存儲裝置120以響應(yīng)由智能快閃應(yīng)用程序接口(API) 1120所提供的指令及實體地址。此快閃存儲裝置120、低階快閃應(yīng)用程序接口(API) 1110及智能快閃應(yīng)用程序接口(API) 1120以此處所描述的一字節(jié)接著一字節(jié)的方式共同仿真快閃存儲裝置120的讀寫。此快閃存儲裝置120可以使用商業(yè)上常用的快閃存儲裝置來施行,例如旺宏公司的MX25L512CM0S串行快閃。其結(jié)果是,此智能快閃應(yīng)用程序接口(API) 1120提供模擬此處所描述的一字節(jié)接著一字節(jié)的方式進行快閃存儲裝置120的讀寫的能力,而不需要重新寫入這些裝置前必須先執(zhí)行抹除區(qū)塊動作。在圖11中,此智能快閃應(yīng)用程序接口(API) 1120是安排在介于使用者程序代碼 1130與低階快閃應(yīng)用程序接口(API) 1110之間。圖12顯示根據(jù)本發(fā)明一第二實施例快閃存儲裝置120中不同軟件階級之間的關(guān)系圖,其中快閃存儲裝置120包括一字節(jié)讀寫模式區(qū)域1200及一快閃存儲裝置存取區(qū)域 1210。在圖12中,此智能快閃應(yīng)用程序接口(API) 1120操作快閃存儲裝置120中的字節(jié)讀寫模式區(qū)域1200以仿真此處所描述的一字節(jié)接著一字節(jié)的方式的數(shù)據(jù)讀寫。此外,此低階快閃應(yīng)用程序接口(API) 1110操作快閃存儲裝置存取模式區(qū)域1210以一字節(jié)接著一字節(jié)或一頁面接著一頁面的方式對快閃存儲裝置120進行數(shù)據(jù)讀取或編程,并以一區(qū)塊接著一區(qū)塊的方式對快閃存儲裝置120進行擦除。在如此的實施例中,快閃存儲裝置120可以同時作為一電性可編程可擦除只讀存儲器(EEPROM)及一閃存。其結(jié)果是,快閃存儲裝置120可以取代分別的電性可編程可擦除只讀存儲器(EEPROM)與閃存,其降低了系統(tǒng)成本及復(fù)雜性。此處所描述的技術(shù)可以致能使用區(qū)塊為基礎(chǔ)的閃存于較大數(shù)目信息的處理系統(tǒng)之中。作為一個范例,此處所描述的技術(shù)可以仿真單一字節(jié)數(shù)據(jù)的讀寫。更一般而言,此處所描述的技術(shù)可以用來讀寫使用區(qū)塊為基礎(chǔ)的閃存中的其它大小數(shù)據(jù),其中讀寫的數(shù)據(jù)大小是小于區(qū)塊的大小。此處所描述的技術(shù)的優(yōu)點包含通過以區(qū)塊為基礎(chǔ)的閃存取代高成本低密度的電性可編程可擦除只讀存儲器(EEPROM),可以節(jié)省系統(tǒng)的成本。通過施行此處所描述的技術(shù), 此閃存的讀取/寫入壽命可以被增加為超過傳統(tǒng)區(qū)塊存取算法的1000倍。雖然本發(fā)明已參照實施例來加以描述,然本發(fā)明創(chuàng)作并未受限于其詳細描述內(nèi)容。替換方式及修改樣式已于先前描述中所建議,且其它替換方式及修改樣式將為本領(lǐng)域技術(shù)人員所思及。特別是,所有具有實質(zhì)上相同于本發(fā)明的構(gòu)件結(jié)合而達成與本發(fā)明實質(zhì)上相同結(jié)果者,皆不脫離本發(fā)明的精神范疇。因此,所有此等替換方式及修改樣式系意欲落在本發(fā)明于隨附權(quán)利要求范圍及其均等物所界定的范疇之中。
權(quán)利要求
1.一種操作一快閃存儲陣列的方法,包含安排該快閃存儲陣列中具有區(qū)段地址的數(shù)據(jù)存儲單元的多個區(qū)段以儲存各自的數(shù)據(jù)結(jié)構(gòu),安排該多個區(qū)段之一的一數(shù)據(jù)結(jié)構(gòu)以儲存數(shù)據(jù)的N位,且包括一索引字段及一數(shù)據(jù)域位;通過擦除該索引字段及該數(shù)據(jù)域位來初始化該數(shù)據(jù)結(jié)構(gòu);通過編程該索引字段中儲存有與該數(shù)據(jù)域位中一特定N位線段對應(yīng)的一位的一數(shù)據(jù)存儲單元,寫入具有一邏輯地址的該數(shù)據(jù)的N位,且編程該數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中一特定N位線段以儲存該數(shù)據(jù)的N位;以及通過編程該數(shù)據(jù)結(jié)構(gòu)的該索引字段中有與該數(shù)據(jù)域位中另一不同N位線段對應(yīng)的另一位,再次寫入具有該相同邏輯地址的數(shù)據(jù)的N位于該數(shù)據(jù)結(jié)構(gòu)中,且編程該不同的N位線段。
2.根據(jù)權(quán)利要求1所述的方法,更包含映像該數(shù)據(jù)的N位的該邏輯地址至數(shù)據(jù)存儲單元的該多個區(qū)段的區(qū)段地址。
3.根據(jù)權(quán)利要求1所述的方法,其中通過讀取由該索引字段所辨別的該數(shù)據(jù)域位中的一 N位線段來讀取該數(shù)據(jù)結(jié)構(gòu)中的該數(shù)據(jù)的N位。
4.根據(jù)權(quán)利要求1所述的方法,其中該索引字段包含一指向器字段依序儲存M位,且該數(shù)據(jù)域位包含依序排列的M個N位線段,其中該指向器字段中M位的最后一個已被編程對應(yīng)至該數(shù)據(jù)域位中的該M個N位線段最近使用之一者。
5.根據(jù)權(quán)利要求1所述的方法,其中該索引字段包含一指向器字段依序儲存M位,且該數(shù)據(jù)域位包含依序排列的M個N位線段,其中當該儲存一第一位的一數(shù)據(jù)存儲單元被編程且其余的數(shù)據(jù)存儲單元在該指向器字段中仍保持擦除時,該指向器字段指向該N位線段的地址順序的第一者,當該儲存該第一位及一第二位的一或多個數(shù)據(jù)存儲單元被編程且其余的數(shù)據(jù)存儲單元在該指向器字段中仍保持擦除時,該指向器字段指向該N位線段的地址順序的第二者,且當該指向器字段中的所有該M位皆被編程時,該指向器字段指向該N位線段的地址順序的最后一者。
6.根據(jù)權(quán)利要求1所述的方法,其中該數(shù)據(jù)域位包含M個N位線段,包括通過擦除一索引字段及一數(shù)據(jù)域位,來初始化數(shù)據(jù)存儲單元的該多個區(qū)段中的另一數(shù)據(jù)結(jié)構(gòu),該另一數(shù)據(jù)結(jié)構(gòu)包含該索引字段及該數(shù)據(jù)域位;當該數(shù)據(jù)結(jié)構(gòu)中的M個N位數(shù)據(jù)域位即將經(jīng)歷寫入操作時,通過編程與其它數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中一特定N位線段對應(yīng)的該其它數(shù)據(jù)結(jié)構(gòu)的該索引字段中的一數(shù)據(jù)存儲單元,寫入具有該相同邏輯地址的該數(shù)據(jù)的N位于該其它數(shù)據(jù)結(jié)構(gòu)中,且編程該其它數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中該特定N位線段以儲存該數(shù)據(jù)的N位。
7.根據(jù)權(quán)利要求1所述的方法,其中該數(shù)據(jù)結(jié)構(gòu)包含一狀態(tài)區(qū)位,且該初始化包含擦除該狀態(tài)區(qū)位,其中該狀態(tài)區(qū)位包含至少K-I個位,且于初始化該數(shù)據(jù)結(jié)構(gòu)時指示K個進行狀態(tài)的目前一者。
8.根據(jù)權(quán)利要求1所述的方法,其中該數(shù)據(jù)結(jié)構(gòu)包含一狀態(tài)區(qū)位,且該初始化包含擦除該狀態(tài)區(qū)位,其中該狀態(tài)區(qū)位包含至少K-I個位,且于初始化該數(shù)據(jù)結(jié)構(gòu)時指示K個進行狀態(tài)的目前一者,包括一初始狀態(tài)其中該狀態(tài)區(qū)位中所有的數(shù)據(jù)存儲單元皆被擦除,其中該K個進行狀態(tài)的一第一狀態(tài)為當儲存該狀態(tài)區(qū)位的一第一位的一數(shù)據(jù)存儲單元被編程且該狀態(tài)區(qū)位的其余的數(shù)據(jù)存儲單元被擦除時,且該K個進行狀態(tài)的一第二狀態(tài)為當儲存該狀態(tài)區(qū)位的該第一及一第二位的一或多個數(shù)據(jù)存儲單元被編程且該狀態(tài)區(qū)位的其余的數(shù)據(jù)存儲單元被擦除時,且該K個進行狀態(tài)的一最后狀態(tài)為該狀態(tài)區(qū)位的所有該K-I個位皆被編程時。
9.根據(jù)權(quán)利要求8所述的方法,其中該初始狀態(tài)被初始化且沒有邏輯地址映像至該數(shù)據(jù)結(jié)構(gòu),該第二狀態(tài)為該數(shù)據(jù)結(jié)構(gòu)被選取進行映像,一第三狀態(tài)為自源數(shù)據(jù)結(jié)構(gòu)或是其它來源寫入N位數(shù)據(jù)完成時,一第四狀態(tài)為開始(假如有的話)擦除該源數(shù)據(jù)結(jié)構(gòu),而該最后狀態(tài)為在當任何完成且邏輯地址映像至數(shù)據(jù)結(jié)構(gòu)時擦除該源數(shù)據(jù)結(jié)構(gòu)。
10.根據(jù)權(quán)利要求1所述的方法,包含分配第一及第二區(qū)塊,每一區(qū)塊包含L個區(qū)段,于該快閃存儲陣列的L個邏輯地址,且其中于一特定區(qū)段初始化該數(shù)據(jù)結(jié)構(gòu)包括擦除包含該特定區(qū)段的該L個區(qū)段的該第一及第二區(qū)塊之一者。
11.根據(jù)權(quán)利要求1所述的方法,包含分配第一及第二區(qū)塊,每一區(qū)塊包含L個區(qū)段, 于該快閃存儲陣列的L個邏輯地址,且其中該區(qū)段的該數(shù)據(jù)結(jié)構(gòu)中的該數(shù)據(jù)域位包括M個 N位區(qū)段,包括通過擦除該第二區(qū)塊,初始化該第二區(qū)塊中的數(shù)據(jù)結(jié)構(gòu),且包括當該第一區(qū)塊中的該數(shù)據(jù)結(jié)構(gòu)中的M個N位數(shù)據(jù)域位即將經(jīng)歷寫入操作時,將該第一區(qū)塊中所儲存的數(shù)據(jù)移至該第二區(qū)塊中的數(shù)據(jù)結(jié)構(gòu)。
12.一種裝置,包含一存儲陣列,包含具有區(qū)段地址的數(shù)據(jù)存儲單元的多個區(qū)段;儲存數(shù)據(jù)結(jié)構(gòu)于以儲存該數(shù)據(jù)存儲單元的多個區(qū)段中的邏輯,該數(shù)據(jù)結(jié)構(gòu)安排儲存數(shù)據(jù)的N位,在該多個區(qū)段之一的一數(shù)據(jù)結(jié)構(gòu)包括一索引字段及一數(shù)據(jù)域位;通過擦除該索引字段及該數(shù)據(jù)域位來初始化該數(shù)據(jù)結(jié)構(gòu)的邏輯;通過編程該索引字段中儲存有與該數(shù)據(jù)域位中一特定N位線段對應(yīng)的一位的一數(shù)據(jù)存儲單元,寫入具有一邏輯地址的該數(shù)據(jù)的N位,且編程該數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中一特定N位線段以儲存該數(shù)據(jù)的N位,以及通過編程該數(shù)據(jù)結(jié)構(gòu)的該索引字段中有與該數(shù)據(jù)域位中另一不同N位線段對應(yīng)的另一位,再次寫入具有該相同邏輯地址的數(shù)據(jù)的N位于該數(shù)據(jù)結(jié)構(gòu)中,且編程該不同的N位線段的邏輯。
13.根據(jù)權(quán)利要求12所述的裝置,其中該儲存的邏輯、該初始化的邏輯及該寫入的邏輯的至少一部分包括一處理器及儲存于該存儲陣列中可由該處理器執(zhí)行的指令。
14.根據(jù)權(quán)利要求12所述的裝置,更包含存儲器,儲存一邏輯地址映像表以映像該數(shù)據(jù)的N位的該邏輯地址至該數(shù)據(jù)存儲單元的該多個區(qū)段的一組地址。
15.根據(jù)權(quán)利要求12所述的裝置,包括通過讀取由該索引字段所辨別的該數(shù)據(jù)域位中的一 N位線段來讀取該數(shù)據(jù)結(jié)構(gòu)中的該數(shù)據(jù)的N位的邏輯。
16.根據(jù)權(quán)利要求12所述的裝置,其中該索引字段包含一指向器字段依序儲存M位,且該數(shù)據(jù)域位包含依序排列的M個N位線段,其中該指向器字段中M位的最后一個已被編程對應(yīng)至該數(shù)據(jù)域位中的該M個N位線段最近使用之一者。
17.根據(jù)權(quán)利要求12所述的裝置,其中該索引字段包含一指向器字段依序儲存M位,且該數(shù)據(jù)域位包含依序排列的M個N位線段,其中當該儲存一第一位的一數(shù)據(jù)存儲單元被編程且其余的數(shù)據(jù)存儲單元在該指向器字段中仍保持擦除時,該指向器字段指向該N位線段的地址順序的第一者,當該儲存該第一位及一第二位的一或多個數(shù)據(jù)存儲單元被編程且其余的數(shù)據(jù)存儲單元在該指向器字段中仍保持擦除時,該指向器字段指向該N位線段的地址順序的第二者,且當該指向器字段中的所有該M位皆被編程時,該指向器字段指向該N位線段的地址順序的最后一者。
18.根據(jù)權(quán)利要求12所述的裝置,其中該數(shù)據(jù)域位包含M個N位線段,包括通過擦除一該索引字段及一數(shù)據(jù)域位,來初始化數(shù)據(jù)存儲單元的該多個區(qū)段的另一數(shù)據(jù)結(jié)構(gòu)的邏輯,該另一數(shù)據(jù)結(jié)構(gòu)包含該索引字段及該數(shù)據(jù)域位,且包括當該數(shù)據(jù)結(jié)構(gòu)中M個N位數(shù)據(jù)域位即將經(jīng)歷寫入操作時,通過編程與其它數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中一特定N位線段對應(yīng)的該其它數(shù)據(jù)結(jié)構(gòu)的該索引字段中的一數(shù)據(jù)存儲單元, 寫入具有該相同邏輯地址的該數(shù)據(jù)的N位于該其它數(shù)據(jù)結(jié)構(gòu)中,且編程該其它數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中該特定N位線段以儲存該數(shù)據(jù)的N位的邏輯。
19.根據(jù)權(quán)利要求12所述的裝置,其中該數(shù)據(jù)結(jié)構(gòu)包含一狀態(tài)區(qū)位,且該初始化包含擦除該狀態(tài)區(qū)位,其中該狀態(tài)區(qū)位包含至少K-I個位,且于初始化該數(shù)據(jù)結(jié)構(gòu)時指示K個進行狀態(tài)的目前一者。
20.根據(jù)權(quán)利要求12所述的裝置,其中該數(shù)據(jù)結(jié)構(gòu)包含一狀態(tài)區(qū)位,且該初始化包含擦除該狀態(tài)區(qū)位,其中該狀態(tài)區(qū)位包含至少K-I個位,且于初始化該數(shù)據(jù)結(jié)構(gòu)時指示K個進行狀態(tài)的目前一者,包括一初始狀態(tài)其中該狀態(tài)區(qū)位中所有的數(shù)據(jù)存儲單元皆被擦除,其中該K個進行狀態(tài)的一第一狀態(tài)為當儲存該狀態(tài)區(qū)位的一第一位的一數(shù)據(jù)存儲單元被編程且該狀態(tài)區(qū)位的其余的數(shù)據(jù)存儲單元被擦除時,且該K個進行狀態(tài)的一第二狀態(tài)為當儲存該狀態(tài)區(qū)位的該第一及一第二位的一或多個數(shù)據(jù)存儲單元被編程且該狀態(tài)區(qū)位的其余的數(shù)據(jù)存儲單元被擦除時,且該K個進行狀態(tài)的一最后狀態(tài)為該狀態(tài)區(qū)位的所有該K-I個位皆被編程時。
21.根據(jù)權(quán)利要求20所述的裝置,其中該初始狀態(tài)被初始化且沒有邏輯地址映像至該數(shù)據(jù)結(jié)構(gòu),該第二狀態(tài)為該數(shù)據(jù)結(jié)構(gòu)被選取進行映像,一第三狀態(tài)為自源數(shù)據(jù)結(jié)構(gòu)或是其它來源寫入N位數(shù)據(jù)完成時,一第四狀態(tài)為開始(假如有的話)擦除該源數(shù)據(jù)結(jié)構(gòu),而該最后狀態(tài)為在當任何完成且邏輯地址映像至數(shù)據(jù)結(jié)構(gòu)時擦除該源數(shù)據(jù)結(jié)構(gòu)。
22.根據(jù)權(quán)利要求12所述的裝置,包含分配第一及第二區(qū)塊的邏輯,每一區(qū)塊包含L個區(qū)段,于該存儲陣列的L個邏輯地址,且其中于一特定區(qū)段初始化該數(shù)據(jù)結(jié)構(gòu)包括擦除包含該特定區(qū)段的該L個區(qū)段的該第一及第二區(qū)塊之一者。
23.根據(jù)權(quán)利要求12所述的裝置,包含分配第一及第二區(qū)塊的邏輯,每一區(qū)塊包含L個區(qū)段,于該存儲陣列的L個邏輯地址,且其中該區(qū)段的該數(shù)據(jù)結(jié)構(gòu)中的該數(shù)據(jù)域位包括M個 N位區(qū)段,包括通過擦除該第二區(qū)塊,初始化該第二區(qū)塊中的數(shù)據(jù)結(jié)構(gòu)的邏輯,且包括當該第一區(qū)塊中的該數(shù)據(jù)結(jié)構(gòu)中M個N位數(shù)據(jù)域位即將經(jīng)歷寫入操作時,將該第一區(qū)塊中所儲存的數(shù)據(jù)移至該第二區(qū)塊中的數(shù)據(jù)結(jié)構(gòu)的邏輯。
24.一種機器可讀數(shù)據(jù)儲存裝置,包含一機器可讀數(shù)據(jù)儲存媒介,儲存可由處理器執(zhí)行的指令,該處理器具有存取一存儲陣列的功能,該存儲陣列包含具有區(qū)段地址的數(shù)據(jù)存儲單元的多個區(qū)段,該指令包含儲存數(shù)據(jù)結(jié)構(gòu)于以儲存該數(shù)據(jù)存儲單元的多個區(qū)段中的邏輯,該數(shù)據(jù)結(jié)構(gòu)安排儲存數(shù)據(jù)的N位,在該多個區(qū)段之一的一數(shù)據(jù)結(jié)構(gòu)包括一索引字段及一數(shù)據(jù)域位; 通過擦除該索引字段及該數(shù)據(jù)域位來初始化該數(shù)據(jù)結(jié)構(gòu)的邏輯; 通過編程該索引字段中儲存有與該數(shù)據(jù)域位中一特定N位區(qū)段對應(yīng)的一位的一數(shù)據(jù)存儲單元,寫入具有一邏輯地址的該數(shù)據(jù)的N位,且編程該數(shù)據(jù)結(jié)構(gòu)的該數(shù)據(jù)域位中一特定N位區(qū)段以儲存該數(shù)據(jù)的N位,以及通過編程該數(shù)據(jù)結(jié)構(gòu)的該索引字段中有與該數(shù)據(jù)域位中另一不同N位線段對應(yīng)的另一位,再次寫入具有該相同邏輯地址的數(shù)據(jù)的N位于該數(shù)據(jù)結(jié)構(gòu)中,且編程該不同的N位線段。
全文摘要
本發(fā)明公開了區(qū)塊為基礎(chǔ)閃存的字節(jié)存取的方法與裝置。此處所描述的技術(shù)使用擦除一次編程多次的漸進索引結(jié)構(gòu)來管理快閃存儲裝置中的數(shù)據(jù),可以避免在每次將儲存在快閃存儲裝置中的數(shù)據(jù)字節(jié)進行區(qū)段擦除操作之后就必須更新的需求。儲存在此陣列的可尋址區(qū)段中的數(shù)據(jù)結(jié)構(gòu)包括索引數(shù)據(jù)、狀態(tài)數(shù)據(jù)及此數(shù)據(jù)的字節(jié)以供邏輯地址映像至此區(qū)段,其可以使用擦除一次編程多次的程序管理。其結(jié)果是,可以在一給定區(qū)段需要進行一區(qū)段擦除操作之前進行較大數(shù)量的寫入操作。所以,閃存可以用來作為高速字節(jié)存取之用。
文檔編號G06F12/06GK102314396SQ20101022444
公開日2012年1月11日 申請日期2010年7月6日 優(yōu)先權(quán)日2010年7月6日
發(fā)明者何信義, 李祥邦, 洪俊雄 申請人:旺宏電子股份有限公司