專利名稱:閃存的控制裝置與方法
技術領域:
本發(fā)明涉及儲存設備,特別涉及一種閃存的控制裝置與方法。
背景技術:
隨著消費性產(chǎn)品的普及,對于數(shù)據(jù)儲存的需求也日益增加。因閃存制造技術突飛猛進,儲存容量也日益加大,并且因其體積小,操作省電而廣受歡迎。然而,目前的半導體制造工藝尚不能保證閃存出廠時,每一個儲存區(qū)塊都是良好可用的。另外,每一個儲存區(qū)塊的寫入次數(shù)以及擦除次數(shù)也都有各自的上限,會在使用的過程中達到壽命而損壞。因此,在現(xiàn)有技術中要開發(fā)一個以閃存作為儲存媒介的消費性產(chǎn)品,此閃存的控制裝置必須要使用很大的內(nèi)存才能管理其儲存空間。
圖1所示為已知閃存的系統(tǒng)結構圖。閃存10本身便是由一個個區(qū)塊(Block)所組成,例如128Mb的閃存約由8千多個區(qū)塊101所組成。而每一個區(qū)塊內(nèi)部又分為多個頁(Page)102,一般來說是8~64頁。而每一頁又分為數(shù)據(jù)儲存區(qū)(data storage area)103以及空閑區(qū)(spare area)104,一般來說,頁分為兩種規(guī)格,若數(shù)據(jù)儲存區(qū)為512字節(jié)(byte),則空閑區(qū)便為16字節(jié),若數(shù)據(jù)儲存區(qū)為2048字節(jié),則空閑區(qū)便為64字節(jié)。其中,空閑區(qū)其中一個作用是用于作為數(shù)據(jù)儲存區(qū)的錯誤更正碼,另一個功能則是當區(qū)塊內(nèi)有損壞時,會在第一頁或是第二頁(若第一頁損壞時)標示非FF的值,以便表示此區(qū)塊為損壞的區(qū)塊。
一般來說,在寫入閃存之前,要先作擦除(erase)的操作,把所有的儲存單元(memory cell)通通編程為邏輯1狀態(tài)。閃存作擦除的操作是以區(qū)塊為單位,而寫入是以頁為單位。由于閃存的物理特性,從邏輯1狀態(tài)轉變?yōu)檫壿?狀態(tài)是可行的,但是從邏輯0狀態(tài)轉為邏輯1狀態(tài)是不可行的。若需要在某個區(qū)塊的某頁寫入數(shù)據(jù),且該頁已經(jīng)存有邏輯0狀態(tài)時,便必須擦除整個區(qū)塊再寫入。這就是閃存的特性。然而,長期作擦除的操作容易造成損壞的區(qū)塊產(chǎn)生。
使用閃存最大的問題即在損壞的區(qū)塊的產(chǎn)生。損壞的區(qū)塊可能在一出廠即出現(xiàn),也有可能是在使用過程中出現(xiàn)。一般來說,廠商會保證損壞的區(qū)塊的比例控制在2%。但是在使用者的角度上來看,使用者在儲存數(shù)據(jù)時不會希望數(shù)據(jù)不能連續(xù)儲存,一般的使用者,一定是希望數(shù)據(jù)可以連續(xù)放在閃存中。然而現(xiàn)在的半導體制造工藝并不能保證每一個區(qū)塊都是良好可用的。所以閃存的空間并非連續(xù),而是良好區(qū)塊與損壞的區(qū)塊交雜使用。然而使用者若不幸將數(shù)據(jù)(或數(shù)據(jù)的一部分)儲存至損壞的區(qū)塊中,便會造成數(shù)據(jù)的損毀,這種情形在一個產(chǎn)品上是不允許被接受的。
為了解決上述損壞的區(qū)塊所造成使用者在使用產(chǎn)品上的不便,已知MSystem公司曾在美國提出第5,404,485號專利,另外SSFDC組織也提出了SmartMedia Format規(guī)格。上述兩者解決方案都是建立一個映射表(VirtualMap)以及分配表(Allocation Map)。映射表主要是用于將出廠時已經(jīng)損毀的區(qū)塊或使用過程中損毀的區(qū)塊通過不列入映射范圍的方式,達到排除的目的。而分配表主要是用于紀錄每個區(qū)塊的狀態(tài),可加速區(qū)塊寫入時對新的區(qū)塊的尋找,以增加儲存速度。
以上兩種已知做法雖然可以有效的解決閃存中損壞的區(qū)塊被使用者所使用的問題。但是,以一個128Mb的閃存來說,就會有8192個區(qū)塊,每個區(qū)塊16Kb的閃存容量,此閃存以區(qū)塊(Block)為單位的映射表至少需要16Kb,也就是8192*2字節(jié)的內(nèi)存。若是以區(qū)塊加上頁(Page)的兩層式的映射方式則需要24Kb,也就是8192*3個字節(jié)的內(nèi)存。而分配表需要2Kb的存儲空間。因此若要使用上述的方式,總共的內(nèi)存需求至少要18Kb的內(nèi)存。在很多的嵌入式產(chǎn)品上無法提供如此大的內(nèi)存需求。因此需要一較低內(nèi)存需求的閃存控制裝置與控制方法。
發(fā)明內(nèi)容
本發(fā)明的目的就是提供一種閃存的控制裝置,用于降低成本。
本發(fā)明的再一目的是提供一種閃存的控制方法,用于避免使用者使用損壞的區(qū)塊。
本發(fā)明提出一種閃存的控制裝置。此閃存包括多個區(qū)塊,其中這些區(qū)塊分為多個儲存區(qū)塊以及多個備用區(qū)塊,此裝置包括壞塊映射表以及控制器。當要根據(jù)一存取區(qū)塊地址存取一數(shù)據(jù)時,控制器判斷存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊,當存取區(qū)塊地址所對應區(qū)塊為損壞區(qū)塊時,根據(jù)存取區(qū)塊地址尋找壞塊映射表以找出對應的備用區(qū)塊的地址來取代該存取區(qū)塊地址,重復上述操作直至存取區(qū)塊地址所對應的備用區(qū)塊為正常區(qū)塊,根據(jù)最后得到的存取區(qū)塊地址存取該數(shù)據(jù)。
依照本發(fā)明的較佳實施例所述的閃存的控制裝置,上述的壞塊映射表包括多個映射單元,每一映射單元包括一損壞區(qū)塊地址儲存區(qū)以及一備用區(qū)塊地址儲存區(qū),該控制器查找壞塊映射表以獲得備用區(qū)塊地址來取代原存取區(qū)塊地址時,掃描每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址,找出對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址取代該存取區(qū)塊地址。
本發(fā)明提出一種閃存的控制方法,用于控制一閃存。此閃存包括多個區(qū)塊,其中這些區(qū)塊分為多個儲存區(qū)塊以及多個備用區(qū)塊。此控制方法至少包括下列步驟首先,提供一壞塊映射表。當要根據(jù)存取區(qū)塊地址存取數(shù)據(jù)時,判斷存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊。當存取區(qū)塊地址所對應的區(qū)塊為損壞區(qū)塊時,根據(jù)存取區(qū)塊地址查找壞塊映射表以找出對應的備用區(qū)塊的地址來取代該存取區(qū)塊地址。之后重復上述操作直至存取區(qū)塊地址所對應的備用區(qū)塊為正常區(qū)塊后,根據(jù)最后得到的存取區(qū)塊地址存取該數(shù)據(jù)。
依照本發(fā)明的較佳實施例所述的閃存的控制方法,上述壞塊映射表包括多個映射單元,每一映射單元包括損壞區(qū)塊地址儲存區(qū)以及備用區(qū)塊地址儲存區(qū)。當存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊時,根據(jù)存取區(qū)塊地址掃描壞塊映射表內(nèi)每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址,找出對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址取代原本的存取區(qū)塊地址。
本發(fā)明因采用較簡單的壞塊映射表,當使用者存取時,控制器先偵測儲存區(qū)塊是否為損壞區(qū)塊,若是損壞區(qū)塊則查表找出備用區(qū)塊,因此可避免使用者使用損壞的區(qū)塊。另外,由于壞塊映射表只須儲存損壞的區(qū)塊的信息,也就是說其余未損壞的區(qū)塊不須儲存至表內(nèi),比起已知查找表必須儲存所有地址信息造成的內(nèi)存浪費,本發(fā)明的方法與裝置可使用更少的儲存空間,同樣可達到避免使用者使用損壞區(qū)塊的功能,從而達到減少硬件成本的目的。
圖1所示為已知閃存系統(tǒng)結構圖。
圖2所示為本發(fā)明實施例的一種閃存控制裝置的電路方框圖。
圖3所示為本發(fā)明實施例圖2中壞塊映射表202的一種實施方式。
圖4所示為本發(fā)明實施例圖2中壞塊映射表202的一種實施方式。
圖5所示為本發(fā)明實施例圖2中壞塊映射表202的一種實施方式。
圖6所示為本發(fā)明另一實施例的一種閃存控制裝置的電路方框圖;圖7所示為本發(fā)明實施例圖6中壞塊映射表602的一種實施方式。
圖8所示為本發(fā)明實施例的一種閃存控制方法的流程圖。
圖9所示為本發(fā)明另一實施例閃存控制方法的流程圖。
具體實施例方式
為讓本發(fā)明上述和其它目的、特點和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合附圖,作詳細說明如下。
由于先前為了防止損壞的區(qū)塊被使用者所使用的技術預先把所有儲存區(qū)塊的地址作映射表,以排除損壞的區(qū)塊,需要耗費許多的內(nèi)存來管理,增加了許多不必要的硬件成本。因此本發(fā)明提出一種閃存的控制裝置與方法,藉以少量的硬件成本,同樣可以做到“防止損壞的區(qū)塊被使用者所使用”。詳細的實施方式將會在下面實施例中說明。
圖2為本發(fā)明實施例的一種閃存控制裝置的電路方框圖。請參考圖2,此實施例的電路方框圖包括接口電路200、控制器201、壞塊映射表202以及被控制器所控制的閃存區(qū)塊21,其中閃存區(qū)塊21分為多個給使用者所使用的儲存區(qū)塊211以及多個為了當有損壞區(qū)塊時所提供的備用區(qū)塊212。另外,圖3為壞塊映射表202的實施例,在此實施例中包括多個映射單元I_01~I_10,每一映射單元包括損壞區(qū)塊地址(Address)儲存區(qū)BA以及備用區(qū)塊地址儲存區(qū)SA。
為了方便說明本發(fā)明,此圖2實施例以較少數(shù)目的儲存區(qū)塊(20個區(qū)塊)以及備用區(qū)塊(10個區(qū)塊)加以說明,其中儲存區(qū)塊211標示為B01~B20,備用區(qū)塊212標示為B21~B30。同樣的,圖3所示的映射單元也以較少數(shù)目(10個映射單元)I_01~I_10作為例子。然而,若以一般128Mb的閃存,會有八千多個使用者儲存區(qū)塊,因此本實施例僅為了說明方便而舉例,本發(fā)明不以此為限。
請參考圖2與圖3。首先,當啟動此裝置時,例如此裝置是一個通用串行總線(Universal Serial Bus,USB)隨身碟,接口電路即USB接口電路。當此裝置第一次通過USB接口插入電腦時,便開始供應電力至此隨身碟。此時控制器201便開始掃描閃存區(qū)塊21中所有使用者可使用的儲存區(qū)塊211內(nèi)的B01~B20是否有損壞。若區(qū)塊有損壞時,便會在該損壞的區(qū)塊內(nèi)的第一個頁或第二個頁里面的空閑區(qū)標示非FF的值。當控制器201例如在第8個儲存區(qū)塊B08內(nèi)的第一頁里面的空閑區(qū)發(fā)現(xiàn)非FF值,便確定第8個儲存區(qū)塊B08為損壞的區(qū)塊,之后,控制器201將第8個儲存區(qū)塊的地址(Address)儲存在壞塊映射表202里面的映射單元I_01中的損壞區(qū)塊地址儲存區(qū)BA,并且分配一個備用區(qū)塊例如第一個備用區(qū)塊B21代替第8個儲存區(qū)塊B08,并在映射單元I_01中的備用區(qū)塊地址儲存區(qū)SA儲存B21的地址。
接下來控制器201繼續(xù)掃描閃存區(qū)塊21,又發(fā)現(xiàn)第15個儲存區(qū)塊B15也為損壞的區(qū)塊,控制器201便開始作與上述第8個儲存區(qū)塊相同的操作,將第15個儲存區(qū)塊的地址儲存至壞塊映射表202里面的映射單元I_02中的損壞區(qū)塊地址儲存區(qū)BA,并且分配一個備用區(qū)塊,例如第二個備用區(qū)塊B22代替第15個儲存區(qū)塊B15,并在映射單元I_02中的備用區(qū)塊地址儲存區(qū)SA儲存B22的地址以供查詢。
當正常使用時,例如使用者通過電腦要對此隨身碟作存取的操作時,使用者通過操作系統(tǒng)Windows的資源管理器將文件拖曳至隨身碟中。此時,通過接口電路200傳送指令至控制器201告知要儲存文件,并且將要儲存在例如第8個儲存區(qū)塊的地址作為存取區(qū)塊地址。此時控制器201便根據(jù)存取區(qū)塊地址檢查閃存區(qū)塊21內(nèi)的第8個儲存區(qū)塊B08。當控制器201發(fā)現(xiàn)此區(qū)塊為損壞時,便開始查壞塊映射表202內(nèi)所有映射單元I_01~I_10的損壞區(qū)塊地址儲存區(qū)BA,查詢是否有與第8個儲存地址B08相符合的地址。當控制器201查詢到第8個儲存區(qū)塊B08的地址在映射單元I_01時,便開始檢查B08對應的備用區(qū)塊地址儲存區(qū)SA,查出第一個備用區(qū)塊B21的地址作為代替第8個儲存區(qū)塊B08地址的存取區(qū)塊地址。之后,控制器201檢查備用區(qū)塊B21是否為損壞的區(qū)塊。當控制器201確定備用區(qū)塊B21為可用的區(qū)塊(非損壞),便開始控制接口電路200將數(shù)據(jù)儲存在第一個備用區(qū)塊B21。
接下來,當使用者通過電腦操作系統(tǒng)Windows的資源管理器,將一個較大的文件拖曳至隨身碟中。此時,通過接口電路200傳送指令至控制器201告知要儲存文件,并且告知將要儲存到的例如第10~15個儲存區(qū)塊B10~B15的地址。此時控制器201便依次根據(jù)這些地址開始搜尋第10~15個儲存區(qū)塊B10~B15是否為壞塊,若不是壞塊,則將數(shù)據(jù)儲存至該區(qū)塊。
假設搜尋至第12個儲存區(qū)塊B12發(fā)現(xiàn)此區(qū)塊為損壞的區(qū)塊時,同樣的,控制器201會開始搜尋壞塊映射表202。此時由于第12個儲存區(qū)塊B12的地址并沒有儲存在壞塊映射表202中,因此,控制器201會在壞塊映射表202中未使用的映射單元I_03建立一個映射關系,如圖4中的401。在映射單元I_03內(nèi)的損壞區(qū)塊地址儲存區(qū)BA寫入B12的地址,在備用區(qū)塊地址儲存區(qū)SA中儲存第3個備用區(qū)塊B23的地址以提供映射關系。而控制器201便以第3個備用區(qū)塊B23代替第12個儲存區(qū)塊B12??刂破?01接下來檢查第3個備用區(qū)塊是否為損壞的區(qū)塊,假設沒有損壞,便將原本要儲存至第12個儲存區(qū)塊B12的數(shù)據(jù)存進第3個備用區(qū)塊B23。
接下來,重復上述步驟直到第15個儲存區(qū)塊B15,控制器201發(fā)現(xiàn)此區(qū)塊B15為損壞時,查詢壞塊映射表202,查出其對應的地址為第二個備用區(qū)塊B22的地址。接下來控制器201便開始檢查第二個備用區(qū)塊B22是否為壞塊,若發(fā)現(xiàn)此區(qū)塊也為壞塊時,繼續(xù)查詢壞塊映射表202,此時發(fā)現(xiàn)無法查出第二個備用區(qū)塊B22所對應的備用區(qū)塊時,控制器201同樣的在壞塊映射表202中的映射單元I_04建立一個映射關系,如圖5中的501,其中損壞區(qū)塊地址儲存區(qū)BA寫入B22的地址,在備用區(qū)塊地址儲存區(qū)SA中儲存第4個備用區(qū)塊B24的地址以提供映射關系??刂破?01便以第4個備用區(qū)塊B24代替第2個備用區(qū)塊B22??刂破?01接下來檢查第4個備用區(qū)塊是否為損壞的區(qū)塊,假設沒有損壞,便將原本要儲存至第15個儲存區(qū)塊B15的數(shù)據(jù)存進第4個備用區(qū)塊B24。
上述的實施例為儲存的實施例,讀取時也相同。當使用者通過電腦操作系統(tǒng)Windows的資源管理器,將一個在此隨身碟中的文件例如MP3文件點選兩下啟動了WinAmp軟件要播放此文件時,此時讀取指令通過接口電路200傳送至控制器201,控制器201接收到要讀取文件的地址(例如第15個儲存區(qū)塊B15的地址)后,便開始檢查第15個儲存區(qū)塊B15是否為損壞的區(qū)塊。當控制器201檢查到第15個儲存區(qū)塊B15為損壞區(qū)塊時,查詢壞塊映射表202內(nèi)的對應關系查出B22為代替B15的區(qū)塊。接下來控制器201會再度檢查B22區(qū)塊是否為損壞。同樣的,控制器201檢查出B22區(qū)塊也是損壞的區(qū)塊,因此再一次查詢壞塊映射表202查出B24區(qū)塊為代替B22的區(qū)塊。控制器201會再次檢查B24是否為損壞的區(qū)塊,此時查出B24為非壞塊,便讀取B24數(shù)據(jù)給應用程序WinAmp播放MP3音樂。
在此實施例中,不難發(fā)現(xiàn),此實施例的映射表只需要少數(shù)內(nèi)存便可以執(zhí)行。在先前的技術中,映射表必須要映射閃存中所有的空間,也就是說,閃存越大,映射表所需的內(nèi)存也會跟著越大。而此實施例中,映射表所需的內(nèi)存的最大值只需要根據(jù)備用區(qū)塊多少來決定。因此,若以閃存出廠約有2%的損壞的區(qū)塊的機率來說,按照產(chǎn)品的保質期,我們可以安排一定的備用區(qū)塊以保證產(chǎn)品在保質期內(nèi),使用者可以正常使用。
例如以一個MP3隨身碟來說,使用者一般將MP3放入隨身碟后,一周內(nèi)都是在聽該設備內(nèi)的歌,并不會常常作擦除的操作。因此在閃存中便可以選擇例如3%的備用區(qū)塊,其中2%是為了出廠的損壞率。另外1%則可以為了保質期(如3年)而準備。若以上述MP3隨身碟的例子來說,壞塊映射表便只需要先前技術內(nèi)存使用量的3%。另外,此壞塊映射表的特性在于當有損壞的區(qū)塊時,寫入此映射表,換句話說,此映射表不需要再更新。而控制器的操作則是一直查詢閃存的區(qū)塊是否有損壞,若有損壞則查表,無損壞則存取。因此此類型的壞塊映射表很適合儲存在只讀儲存器中,例如直接將此表建置在閃存中。而不須作擦除的操作。如此,本發(fā)明的實施例可以做到不需要任何形式的外加(或內(nèi)建)隨機存取存儲器即可實施。
再者,以本發(fā)明的實施例來說,雖然此實施例中的壞塊映射表中映射單元所映射的備用區(qū)塊都是以遞增的關系,也就是說I_01的備用區(qū)塊地址儲存區(qū)SA所儲存的備用區(qū)塊地址為B21,I_02的備用區(qū)塊地址儲存區(qū)SA所儲存的備用區(qū)塊地址為B22...。然而本發(fā)明不一定要如此實施。例如以遞減的方式,I_01的備用區(qū)塊地址儲存區(qū)SA所儲存的備用區(qū)塊地址為B30、I_02的備用區(qū)塊地址儲存區(qū)SA所儲存的備用區(qū)塊地址為B29...。或是以隨機的方式,都是可以實行的。同樣的,此壞塊映射表也可以不需要依照順序儲存。
然而上述的實施例以按照順序的方式來儲存映射表的方式可帶來一個好處。一般來說,當閃存在初始時可以先作一次完全的擦除,也就是說閃存所有的儲存單元都是例如邏輯1的狀態(tài)。因此要寫入文件的時候,便可以按照地址將某些區(qū)段(某個區(qū)塊內(nèi)的某幾頁)其部分改為邏輯0的狀態(tài)。但是若要編輯文件,也就是原本已經(jīng)儲存好的文件要編輯時,原本被改為邏輯0的部分是無法再次變更為邏輯1。然而除了擦除的時間遠大于寫入的時間外,由于寫入是以頁來計算,擦除是以區(qū)塊來計算。因此假設使用者要編輯的文件只占了2頁,其它存在此區(qū)塊的數(shù)據(jù)便需要一并擦除。因此在現(xiàn)有技術中一般文件編輯完成后,會將整個區(qū)塊中除了編輯的文件之外的數(shù)據(jù)都放入例如電腦的內(nèi)存中,再將區(qū)塊作擦除后,再將儲存在內(nèi)存內(nèi)的區(qū)塊數(shù)據(jù)以及該編輯過的文件寫入。
然而若以本發(fā)明實施例的方式來實施時,便可以清楚的界定哪些部分是未使用的備用區(qū)塊,例如本實施例便有6個備用區(qū)塊未使用B25~B30,因此可以作為數(shù)據(jù)交換區(qū)。假設要編輯的文件存于B17內(nèi)的第5頁,當要編輯的文件編輯完成后,將該編輯完成的文件以及除了該文件之外的整個區(qū)塊B17的數(shù)據(jù)寫入到備用區(qū)塊B25。接下來擦除該區(qū)塊B17后再將B25的資料寫入B17。若不幸在寫入B17時斷電,可以實現(xiàn)數(shù)據(jù)復原的功能。另外此交換區(qū)可以依序使用,假設這一次使用區(qū)塊B25作交換區(qū),下一次便可以使用B26,接下來使用B27...。以如此的方式依序循環(huán)的使用與擦除備用區(qū)塊,可以平均的使用到備用區(qū)塊。由于備用區(qū)塊被平均的使用,因此可以使得備用區(qū)塊的損壞機率較低。
若以上述實施例中按順序遞增的方式儲存,可以有另一實施例能進一步減少壞塊映射表的存儲容量。以電路來說,是類似圖2的電路實施例。然而本實施例圖6中除了原圖2就有的閃存區(qū)塊61、控制器601、接口電路600以及壞塊映射表602之外,還多加了一個寄存器603用于提供第一個備用區(qū)塊B21的地址。閃存區(qū)塊61仍然是以20個儲存區(qū)塊611(B01~B20)以及10個備用區(qū)塊612(B21~B30)作為例子。由于電路以圖6的方式實施,壞塊映射表602便可以以圖7的方式實施,只需設置損壞區(qū)塊地址儲存區(qū),而不設置備用區(qū)塊地址儲存區(qū)。
請參考圖6與圖7,同樣的,例如此裝置是一個USB隨身碟,接口電路600即USB接口電路。同樣假設第8個與第15個儲存區(qū)塊是損壞的區(qū)塊。與上一實施例相同的方式,在啟動時,控制器601先掃描所有儲存區(qū)塊并將損壞的區(qū)塊的地址儲存在壞塊映射表。因此,壞塊映射表602的第1個損壞區(qū)塊地址儲存區(qū)BA_00儲存第8個儲存區(qū)塊的地址。壞塊映射表602的第2個損壞區(qū)塊地址儲存區(qū)BA_01儲存第15個儲存區(qū)塊的地址。
舉例來說,例如使用者通過電腦要對此隨身碟作存取的操作時,使用者通過操作系統(tǒng)Windows的資源管理器將文件拖至該隨身碟中。此時,通過接口電路600傳送指令至控制器601告知要儲存文件,并且告知將要儲存到的例如第8個儲存區(qū)塊的地址。此時控制器601便會開始檢查閃存區(qū)塊61內(nèi)部的第8個儲存區(qū)塊B08。當控制器601發(fā)現(xiàn)此區(qū)塊為損壞時,便開始查壞塊映射表602內(nèi)損壞區(qū)塊地址儲存區(qū)BA_00~BA_09,查詢是否有與第8個儲存地址B08相符合的地址。當控制器601查詢到第8個儲存區(qū)塊B08的地址在第0個損壞區(qū)塊地址儲存區(qū)BA_00時,便開始讀取寄存器603內(nèi)所儲存的第1個備用區(qū)塊的地址。并將此地址值加上0作為存取區(qū)塊地址??刂破?01根據(jù)此存取區(qū)塊地址找出備用區(qū)塊B21,再檢查備用區(qū)塊B21是否為損壞的區(qū)塊。當控制器601確定B21為可用的區(qū)塊(非損壞),則控制接口電路600將數(shù)據(jù)儲存在第一個備用區(qū)塊B21。
同樣的以上面實施例的例子說明。當使用者通過電腦操作系統(tǒng)Windows的資源管理器將一個較大的文件拖曳至隨身碟中。此時,通過接口電路600傳送指令至控制器601告知要儲存文件,并且告知將要儲存到的例如第10~15個儲存區(qū)塊B10~B15的地址。此時控制器601便依序根據(jù)這些地址開始搜尋第10~15個儲存區(qū)塊B10~B15是否為壞塊,若不是壞塊,則將數(shù)據(jù)儲存至該區(qū)塊。
假設搜尋至第12個儲存區(qū)塊B12發(fā)現(xiàn)此區(qū)塊為損壞的區(qū)塊時,同樣的,控制器601會開始搜尋壞塊映射表602。此時由于第12個儲存區(qū)塊B12的地址并沒有儲存在壞塊映射表202中,因此,控制器601會將第12個儲存區(qū)塊B12的地址儲存至壞塊映射表602中第2個損壞區(qū)塊地址儲存區(qū)BA_02,如圖7中的701。而控制器601便以第1個備用區(qū)塊的地址值加上2,也就是第3個備用區(qū)塊的地址作為新的存取區(qū)塊地址。控制器201接下來檢查第3個備用區(qū)塊是否為損壞的區(qū)塊,假設沒有損壞,便將原本要儲存至第12個儲存區(qū)塊B12的數(shù)據(jù)存進第3個備用區(qū)塊B23。
接下來,假設第13以及第14個區(qū)塊皆無損壞??刂破?01開始處理第15個儲存區(qū)塊B15。當控制器601發(fā)現(xiàn)此區(qū)塊B15為損壞時,查詢壞塊映射表602,查出B15的地址存于第1個損壞區(qū)塊地址儲存區(qū)BA_01,因此可以計算出其對應的地址為寄存器所儲存的備用區(qū)塊的地址值加上1,也就是第二個備用區(qū)塊B22的地址。接下來控制器601便開始檢查第二個備用區(qū)塊B22是否為壞塊,若發(fā)現(xiàn)此區(qū)塊也為壞塊時,繼續(xù)查詢壞塊映射表602,此時發(fā)現(xiàn)無法查出第2個備用區(qū)塊B22的地址時,控制器601同樣的在壞塊映射表602中的損壞區(qū)塊地址儲存區(qū)BA_03儲存第2個備用區(qū)塊B22的地址,如圖7中的702??刂破?01便以同樣的計算方式算出第4個備用區(qū)塊B24的地址代替第22個備用區(qū)塊B22的地址作為存取區(qū)塊地址??刂破?01根據(jù)存取區(qū)塊地址來檢查第4個備用區(qū)塊是否為損壞的區(qū)塊,假設沒有損壞,便將原本要儲存至第15個儲存區(qū)塊B15的數(shù)據(jù)存進第4個備用區(qū)塊B24。
上述圖6的實施例為儲存的實施例,在讀取時的操作也相同,因此不加以贅述。而在本實施例中,可進一步減少壞塊映射表的內(nèi)存使用量。同樣的,由于壞塊映射表以及寄存器所儲存的備用區(qū)塊起始地址是不需要更新的數(shù)據(jù),因此兩者都同樣適合存在閃存內(nèi)部。因此,本發(fā)明的實施例可以做到不需要任何形式的外加(或內(nèi)建)隨機存取內(nèi)存即可實施。
上述的裝置實施例僅為根據(jù)本發(fā)明的精神提出的一種實施例。本發(fā)明另外提出方法實施例。圖8為本發(fā)明實施例的一種閃存控制方法的流程圖,此方法流程圖為當壞塊映射表為圖3實施例時的方法實施例。請參考圖8,首先,提供一壞塊映射表,其中壞塊映射表包括多個映射單元,每一映射單元包括損壞區(qū)塊地址儲存區(qū)以及備用區(qū)塊地址儲存區(qū)(步驟801)。初始時,掃描所有儲存區(qū)塊,將已經(jīng)損壞的區(qū)塊的地址存于映射單元中的損壞區(qū)塊地址儲存區(qū),并從備用區(qū)塊中選擇一個區(qū)塊配置,將配置的區(qū)塊的地址存于映射單元中的備用區(qū)塊地址儲存區(qū)(步驟802)。
接下來,當要根據(jù)一存取區(qū)塊地址存取數(shù)據(jù)時,判斷存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊(步驟803)。上一步驟若判斷存取區(qū)塊地址所對應的區(qū)塊為損壞區(qū)塊時,根據(jù)存取區(qū)塊地址尋找壞塊映射表內(nèi)的每一映射單元中損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址,試著找出與損壞區(qū)塊的地址相同的地址,以找出對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址作為存取區(qū)塊地址(步驟804),若找到則回到步驟803。
若在壞塊映射表內(nèi)無法找出與損壞區(qū)塊的地址相同的地址以找出對應的存取區(qū)塊地址,則從未被使用的映射單元之中選擇一新的映射單元,將存取區(qū)塊地址存入該新增映射單元的損壞區(qū)塊地址儲存區(qū)內(nèi),并從備用區(qū)塊中選擇一個區(qū)塊配置,將其地址存于該新增映射單元中的備用區(qū)塊地址儲存區(qū),并且以其地址作為存取區(qū)塊地址(步驟805),回到步驟803。重復上述操作直至存取區(qū)塊地址所對應的備用區(qū)塊為正常的區(qū)塊,根據(jù)存取區(qū)塊地址存取數(shù)據(jù)(步驟806)。
當壞塊映射表為圖7實施例時,方法實施例便修正為圖9的流程圖。圖9為本發(fā)明另一實施例的一種閃存控制方法的流程圖。首先,提供一壞塊映射表以及一備用區(qū)塊的起始地址,其中壞塊映射表包括N個損壞區(qū)塊地址儲存區(qū),每一損壞區(qū)塊地址儲存區(qū)可儲存一個損壞區(qū)塊的地址(步驟901)。初始化時,掃描所有儲存區(qū)塊,將已經(jīng)損壞的區(qū)塊的地址依序儲存于未使用的損壞區(qū)塊地址儲存區(qū)(步驟902)。
接下來,當要根據(jù)一存取區(qū)塊地址存取數(shù)據(jù)時,判斷存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊(步驟903)。上一步驟若判斷存取區(qū)塊地址所對應的區(qū)塊為損壞區(qū)塊時,查詢損壞的區(qū)塊的地址是否儲存在損壞區(qū)塊地址儲存區(qū),若存在于第K個損壞區(qū)塊地址儲存區(qū)時,輸出備用區(qū)塊起始地址加上K作為存取區(qū)塊地址,其中N、K為正整數(shù)且N>=K>=0(步驟904),回到步驟903。若在該壞塊映射表內(nèi)無法找出存取區(qū)塊地址,將存取區(qū)塊地址依序存入未使用的損壞區(qū)塊地址儲存區(qū),并按存入的損壞區(qū)塊地址儲存區(qū)的順序算出存取區(qū)塊地址(步驟905),回到步驟903。重復上述操作直至存取區(qū)塊地址所對應的備用區(qū)塊為正常的區(qū)塊,根據(jù)存取區(qū)塊地址存取數(shù)據(jù)(步驟906)。
綜上所述,本發(fā)明因采用較簡單的壞塊映射表。當使用者存取時,控制器先偵測儲存區(qū)塊是否為損壞區(qū)塊,若是損壞區(qū)塊則查表找出備用區(qū)塊,因此可避免使用者使用損壞的區(qū)塊。另外,由于壞塊映射表只須儲存損壞區(qū)塊的信息,也就是說其余未損壞的區(qū)塊不須儲存至表內(nèi),比起已知查找表必須儲存所有地址信息造成的內(nèi)存浪費,本發(fā)明的方法與裝置可使用更少的儲存空間,同樣可達到避免使用者使用損壞的區(qū)塊的功能。
雖然本發(fā)明已以較佳實施例公開如上,但其并非用于限定本發(fā)明,任何本領域技術人員在不脫離本發(fā)明的精神和范圍內(nèi),當可作些許的變動與潤飾,因此本發(fā)明的保護范圍當以權利要求書所界定的范圍為準。
權利要求
1.一種閃存的控制裝置,該閃存包括多個區(qū)塊,該些區(qū)塊分為多個儲存區(qū)塊以及多個備用區(qū)塊,該裝置包括一壞塊映射表;以及一控制器,當要根據(jù)一存取區(qū)塊地址存取一數(shù)據(jù)時,判斷該存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊,當該存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊時,根據(jù)該存取區(qū)塊地址尋找該壞塊映射表以找出對應的備用區(qū)塊地址來取代該存取區(qū)塊地址,重復上述操作直至該存取區(qū)塊地址所對應的備用區(qū)塊為正常區(qū)塊,根據(jù)最后得到的存取區(qū)塊地址存取該數(shù)據(jù)。
2.如權利要求1所述的閃存的控制裝置,其中該壞塊映射表包括多個映射單元,每一映射單元包括一損壞區(qū)塊地址儲存區(qū)以及一備用區(qū)塊地址儲存區(qū),該控制器查找該壞塊映射表以獲得備用區(qū)塊地址來取代該存取區(qū)塊地址時,掃描每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址,找出對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址取代該存取區(qū)塊地址。
3.如權利要求2所述的閃存的控制裝置,其中該控制器在掃描每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址時,如找到與該存取區(qū)塊地址相同的地址,則用該地址對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址取代該存取區(qū)塊地址。
4.如權利要求2或3所述的閃存的控制裝置,其中該控制器在掃描每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址時,如無法找到與該存取區(qū)塊地址相同的地址,則從未被使用的所述映射單元之中選擇一新增映射單元,該控制器將該存取區(qū)塊地址存入該新增映射單元的損壞區(qū)塊地址儲存區(qū)內(nèi),并從所述備用區(qū)塊中選擇一個區(qū)塊配置,將其地址存于該新增映射單元中的該備用區(qū)塊地址儲存區(qū)。
5.如權利要求2所述的閃存的控制裝置,其中該控制器在初始化時,掃描所有儲存區(qū)塊,將已經(jīng)損壞的區(qū)塊的地址存于該映射單元中的該損壞區(qū)塊地址儲存區(qū),并從所述備用區(qū)塊中選擇一個區(qū)塊配置,將其地址存于該映射單元中的該備用區(qū)塊地址儲存區(qū)。
6.如權利要求1所述的閃存的控制裝置,還包括一寄存器,用于提供所述備用區(qū)塊的一備用區(qū)塊起始地址。
7.如權利要求6所述的閃存的控制裝置,其中該壞塊映射表包括N個損壞區(qū)塊地址儲存區(qū),每一損壞區(qū)塊地址儲存區(qū)可儲存一個損壞的區(qū)塊的地址,該控制器查詢到該損壞區(qū)塊的地址儲存在第K個損壞區(qū)塊地址儲存區(qū)時,將該備用區(qū)塊起始地址加上K輸出作為該存取區(qū)塊地址以找出對應的備用區(qū)塊,其中N、K為正整數(shù)且N>=K>=0。
8.如權利要求7所述的閃存的控制裝置,其中該控制器在初始化時,掃描所有該些儲存區(qū)塊,將已經(jīng)損壞的區(qū)塊的地址依序儲存于未使用的損壞區(qū)塊地址儲存區(qū)。
9.如權利要求7所述的閃存的控制裝置,該控制器判斷該存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊,且于該壞塊映射表無法找出該存取區(qū)塊地址時,該控制器將該存取區(qū)塊地址依序存入未使用的損壞區(qū)塊地址儲存區(qū)。
10.一種閃存的控制方法,該閃存包括多個區(qū)塊,這些區(qū)塊分為多個儲存區(qū)塊以及多個備用區(qū)塊,該方法包括提供一壞塊映射表;當要根據(jù)一存取區(qū)塊地址存取一數(shù)據(jù)時,判斷該存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊;當該存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊時,根據(jù)該存取區(qū)塊地址尋找該壞塊映射表以找出對應的備用區(qū)塊的地址來取代該存取區(qū)塊地址;以及重復上述操作直至該存取區(qū)塊地址所對應的備用區(qū)塊為正常區(qū)塊,根據(jù)最后得到的存取區(qū)塊地址存取該數(shù)據(jù)。
11.如權利要求9所述的閃存的控制方法,其中該壞塊映射表包括多個映射單元,每一映射單元包括一損壞區(qū)塊地址儲存區(qū)以及一備用區(qū)塊地址儲存區(qū)。
12.如權利要求10所述的閃存的控制方法,其中當該存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊時,根據(jù)該存取區(qū)塊地址尋找該壞塊映射表以找出對應的備用區(qū)塊的地址來取代該存取區(qū)塊地址時,包括以下操作掃描該壞塊映射表內(nèi)的每一映射單元中的該損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址,找出對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址取代該存取區(qū)塊地址。
13.如權利要求12所述的閃存的控制方法,其中在掃描壞塊映射表內(nèi)內(nèi)每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址時,如找到與該存取區(qū)塊地址相同的地址,則用該地址對應的備用區(qū)塊地址儲存區(qū)所儲存的備用區(qū)塊的地址取代該存取區(qū)塊地址。
14.如權利要求12或13所述的閃存的控制方法,其中在掃描壞塊映射表內(nèi)內(nèi)每一映射單元中的損壞區(qū)塊地址儲存區(qū)內(nèi)所儲存的損壞區(qū)塊的地址時,如無法找到與該存取區(qū)塊地址相同的地址,則從未被使用的所述映射單元之中選擇一新增映射單元,該控制器將該存取區(qū)塊地址存入該新增映射單元的損壞區(qū)塊地址儲存區(qū)內(nèi),并從所述備用區(qū)塊中選擇一個區(qū)塊配置,將其地址存于該新增映射單元中的該備用區(qū)塊地址儲存區(qū)。
15.如權利要求11所述的閃存的控制方法,還包括初始化時,掃描所有儲存區(qū)塊,將已經(jīng)損壞的區(qū)塊的地址存于該映射單元中的該損壞區(qū)塊地址儲存區(qū),并從所述備用區(qū)塊中選擇一個區(qū)塊配置,將其地址存于該映射單元中的備用區(qū)塊地址儲存區(qū)。
16.如權利要求10所述的閃存的控制方法,其中該壞塊映射表包括N個損壞區(qū)塊地址儲存區(qū),每一損壞區(qū)塊地址儲存區(qū)可儲存一個損壞的區(qū)塊的地址。
17.如權利要求16所述的閃存的控制方法,還包括提供一備用區(qū)塊的初始地址。
18.如權利要求17所述的閃存的控制方法,其中當該存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊,根據(jù)該存取區(qū)塊地址尋找該壞塊映射表以找出對應的備用區(qū)塊的地址來取代該存取區(qū)塊地址時,包括以下操作當查詢到該損壞區(qū)塊的地址儲存在第K個損壞區(qū)塊地址儲存區(qū)時,將該備用區(qū)塊起始地址加上K輸出作為該存取區(qū)塊地址,其中N、K為正整數(shù)且N>=K>=0。
19.如權利要求18所述的閃存的控制方法,還包括初始化時,掃描所有儲存區(qū)塊,將已經(jīng)損壞的區(qū)塊的地址依序儲存于未使用的損壞區(qū)塊地址儲存區(qū)。
20.如權利要求18所述的閃存的控制方法,還包括當該存取區(qū)塊地址所對應的區(qū)塊為損壞的區(qū)塊,且在該壞塊映射表內(nèi)無法找出該存取區(qū)塊地址時,該控制器將該存取區(qū)塊地址依序存入未使用的損壞區(qū)塊地址儲存區(qū)。
全文摘要
一種閃存的控制裝置與方法。此閃存包括多個區(qū)塊,其中,這些區(qū)塊分為多個儲存區(qū)塊以及多個備用區(qū)塊。此控制裝置包括壞塊映射表以及控制器。當要根據(jù)存取區(qū)塊地址存取數(shù)據(jù)時,控制器判斷存取區(qū)塊地址所對應的區(qū)塊是否為損壞的區(qū)塊。當控制器判斷出存取區(qū)塊地址所對應的區(qū)塊為損壞區(qū)塊時,控制器根據(jù)存取區(qū)塊地址尋找壞塊映射表以找出對應的備用區(qū)塊地址以取代存取區(qū)塊地址。接下來,控制器重復上述操作直至存取區(qū)塊地址所對應的備用區(qū)塊為正常區(qū)塊后,根據(jù)存取區(qū)塊地址存取數(shù)據(jù)。
文檔編號G11C16/06GK1967504SQ20051012361
公開日2007年5月23日 申請日期2005年11月18日 優(yōu)先權日2005年11月18日
發(fā)明者陳泳成 申請人:凌陽科技股份有限公司