專利名稱:一種閃存芯片的讀寫方法
技術領域:
本發(fā)明涉及一種閃存芯片的讀寫方法,尤指一種針對以閃存芯片為基本存儲介質(zhì)的閃存盤的數(shù)據(jù)寫入和讀出的方法。
眾所周知,現(xiàn)有的閃存均是由存儲塊組成的,每一個存儲塊內(nèi)均包含兩個區(qū)域數(shù)據(jù)存儲區(qū)100和存儲塊狀態(tài)區(qū)500;數(shù)據(jù)存儲區(qū)用于實際的數(shù)據(jù)存儲,存儲塊狀態(tài)區(qū)內(nèi)則是標識存儲塊內(nèi)的存儲塊好壞的存儲塊的狀態(tài)信息。如果,存儲塊內(nèi)的存儲塊均是正常的,存儲塊的狀態(tài)信息被設定為“好”;一旦存儲塊內(nèi)的存儲塊出現(xiàn)壞的單元,存儲塊的狀態(tài)信息被設定為“壞”。通過上述的設定,閃存的讀寫管理軟件就可以在對閃存進行讀寫操作時方便地“避開”被設定為“壞”的存儲塊。另外,一般對閃存進行數(shù)據(jù)更新操作,需要先擦除原有數(shù)據(jù),然后才能寫入新的數(shù)據(jù)。
上述現(xiàn)有的閃存的存儲塊的分區(qū)管理方式和數(shù)據(jù)的更新方式是一種基本的操作方式。但是上述方式存在著一些缺點首先,存儲塊的狀態(tài)區(qū)只有“好”和“壞”兩種狀態(tài),不利于描述其所對應的存儲塊的更詳細的工作狀態(tài)和使用信息;其次,由于數(shù)據(jù)更新操作需要先擦除原有數(shù)據(jù),才能寫入新的數(shù)據(jù),因此,數(shù)據(jù)更新操作所花費的時間遠比對閃存進行寫操作所花費的時間要多得多;再有,現(xiàn)有的數(shù)據(jù)更新操作不對所寫入的存儲塊的使用頻率進行統(tǒng)計,因此會造成閃存中各個存儲塊老化速度不均勻,降低了閃存的使用壽命。
本發(fā)明的主要目的在于提供一種閃存芯片的讀寫方法,將閃存盤的閃存中的存儲塊進行管理,增加狀態(tài)標識,根據(jù)存儲塊的狀態(tài)進行擦除、讀、寫操作,從而將閃存的寫入操作與擦除操作分開,提高整體的讀寫速度,避免在向閃存盤寫入數(shù)據(jù)耗時過長,預防由于系統(tǒng)致命的癱瘓所造成的數(shù)據(jù)損失。
本發(fā)明的又一目的在于提供一種閃存芯片的讀寫方法,使得對閃存中各個存儲塊的寫入操作的頻率基本一致,避免閃存中各個存儲塊的老化程度不均,實現(xiàn)所有的存儲塊都被均勻分配寫入,最終延長閃存盤的壽命。
本發(fā)明的目的是通過如下技術方案實現(xiàn)的一種閃存芯片的讀寫方法,閃存芯片內(nèi)部的各存儲塊分有數(shù)據(jù)區(qū)和控制區(qū),控制區(qū)劃分為索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū),根據(jù)索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū)所表述的信息,對閃存的各存儲塊的數(shù)據(jù)區(qū)進行擦除、讀、寫和數(shù)據(jù)更新操作。
所述的狀態(tài)標識區(qū)標識所對應存儲塊工作狀態(tài)的狀態(tài)標識位組可為相對應的存儲塊(Block)的四種狀態(tài)之一“空”或“忙”或“釋放”或“丟棄”。
所述的索引區(qū)中的索引位組的信息為與之相對應的存儲塊使用狀態(tài)之一“未用過”或“已使用”。
所述的邏輯地址指針區(qū)內(nèi)的邏輯地址指針組信息為與之相對應的存儲塊的物理地址或表示多次更新后、按照更新次數(shù)順序記錄的邏輯地址。
所述的擦除操作步驟為1、依次檢測閃存盤中所有或設定數(shù)目的部分存儲塊狀態(tài)標識的狀態(tài)數(shù)據(jù);2、如果該狀態(tài)為“釋放”,則對與存儲塊狀態(tài)標識相對應的存儲塊全塊進行擦除;否則,進入步驟5;3、將該存儲塊的索引區(qū)中所有的索引信息設置為“未用”;4、將該存儲塊的邏輯地址指針區(qū)中所有的邏輯地址指針擦除;5、如果該狀態(tài)為“空閑”或“忙”或“丟棄”;6、如果未檢測完閃存盤中所有的或設定數(shù)據(jù)的部分存儲塊狀態(tài)標識的狀態(tài)數(shù)據(jù),返回步驟1;否則,進入步驟7;7、結(jié)束。
所述的擦除操作可為初始化擦除和其他時間的擦除。初始化擦除操為在該閃存盤加電時所作的第一個操作。其他時間擦除可為讀數(shù)據(jù)塊內(nèi)文件的同時擦除狀態(tài)為“釋放”數(shù)據(jù)塊。擦除也可為讀操作擦除或操作寫擦除,讀操作擦除為在每個讀操作之前的擦除操作;寫操作擦除為在每個寫操作之前的擦除操作。
所述的讀操作擦除為如果存儲塊狀態(tài)為“釋放”的存儲塊的數(shù)量少于一事先設置的最小的讀操作擦除存儲塊的數(shù)量,將其與該事先設置的最小的讀操作擦除存儲塊的數(shù)量之間的差值數(shù)量的“丟棄”的存儲塊設置為被擦除的對象,進行擦除操作。
所述的寫操作擦除為如果存儲塊狀態(tài)為“釋放”的存儲塊的數(shù)量少于一事先設置的最小的寫操作擦除存儲塊的數(shù)量,將其與該事先設置的最小的讀操作擦除存儲塊的數(shù)量之間的差值數(shù)量的“丟棄”的存儲塊設置為被擦除的對象,進行擦除操作。
所述的讀操作包括如下步驟1、根據(jù)給出的訪問地址找到相應的存儲塊,依次檢測該存儲塊中索引區(qū)各索引信息中的內(nèi)容;2、如果找到最后一個內(nèi)容記錄“已使用”的索引信息,進入步驟3;否則返回到步驟1;3、根據(jù)與該索引信息對應的邏輯地址指針中的地址找到該地址指示的存儲塊,讀出該存儲塊內(nèi)的數(shù)據(jù)內(nèi)容,結(jié)束。
所述的寫操作包括如下步驟1、找到當前指針所指向的為“空閑”狀態(tài)的存儲塊,將所要寫的數(shù)據(jù)寫入該存儲塊的數(shù)據(jù)區(qū)中;2、再讀回該存儲塊的數(shù)據(jù)內(nèi)容,將步驟1所寫的數(shù)據(jù)與讀回的該存儲塊的數(shù)據(jù)內(nèi)容進行比較;3、如果比較結(jié)果為不一致,進入步驟4;否則進入步驟5;4、將當前存儲塊的狀態(tài)修改為“丟棄”,返回步驟1;5、將與當前存儲塊相對應的索引區(qū)中相應的狀態(tài)內(nèi)容設置為“已使用”;6、將與其相對應的邏輯地址指針的內(nèi)容設置為該數(shù)據(jù)存入的存儲塊的地址;7、將當前存儲塊的狀態(tài)修改為“忙”,結(jié)束。
所述的數(shù)據(jù)更新操作包括如下步驟1、根據(jù)給出的被更新數(shù)據(jù)的地址找到相應的存儲塊,分析與之相對應的狀態(tài)標識區(qū)中的信息內(nèi)容;2、如果該狀態(tài)標識區(qū)中的內(nèi)容為“忙”,依次檢測該存儲塊中索引區(qū)各索引信息中的內(nèi)容,直到找到最后一個內(nèi)容值記錄為“已使用”的索引信息;3、根據(jù)步驟2中找到的索引信息對應的邏輯地址指針的內(nèi)容,找到該邏輯地址指針所指向的存儲塊;4、將步驟3中找到的存儲塊所對應的狀態(tài)標識區(qū)中的內(nèi)容設置為“釋放”;5、找到當前指針指向的首個為“空閑”狀態(tài)的存儲塊,進行寫操作。
6、將步驟2中最后一個內(nèi)容值記錄為“已使用”索引信息后面的一個索引信息的內(nèi)容設置為“已使用”;將與該索引信息其相對應的邏輯地址指針的內(nèi)容設置為步驟5所寫數(shù)據(jù)的存儲塊的地址;7、將步驟1中的被更新數(shù)據(jù)的地址找到相應的存儲塊相對應的狀態(tài)標識區(qū)中的信息內(nèi)容設置為“釋放”;結(jié)束。
所述的數(shù)據(jù)更新操作還包括如下步驟將被更新數(shù)據(jù)的存儲塊內(nèi)本次不更新的其他文件的內(nèi)容進行復制,再將該文件內(nèi)容搬移到當前指針更新寫入的存儲塊相應位置上。
所述的為“空閑”狀態(tài)的存儲塊的地址存儲在閃存盤的一連續(xù)的存儲區(qū)中。
本發(fā)明通過將構成閃存盤的閃存中的存儲塊內(nèi)的狀態(tài)區(qū)的重新劃分為索引區(qū)、邏輯地址指針區(qū)和存儲塊狀態(tài)標識區(qū),實現(xiàn)了利用各個分區(qū)來存儲與之對應的存儲塊數(shù)據(jù)區(qū)的操作狀態(tài)信息的目的,將閃存的寫入操作與擦除操作分開,避免了寫入數(shù)據(jù)耗時過長的缺點,可以預防由于系統(tǒng)以外癱瘓所造成的數(shù)據(jù)損失。
此外,本發(fā)明通過存儲塊內(nèi)的狀態(tài)區(qū)的重新劃分,使每個閃存單元只能在清除狀態(tài)時被寫入,被寫入的位將自然地保持到該位因為需要重寫而將包括該位的整個存儲塊被擦除之前;最后,每個存儲塊的寫操作均因為可成功地找到可寫入的“空”存儲塊,而不需要先擦除它;由于每一個要寫的存儲塊均在不同的邏輯存儲塊上,空閑狀態(tài)存儲塊按照指針指向順序排列,寫入時是一一按次序被使用,因此沒有哪個存儲塊可被連續(xù)地寫入,使得對閃存中各個存儲塊的寫入操作的頻率基本一致,避免了閃存中各個存儲塊的老化程度不均,實現(xiàn)了所有的存儲塊都被均勻分配寫入,最終延長了閃存盤的壽命。
以下結(jié)合附圖和具體實施方案對本發(fā)明做進一步的詳細說明
圖1為現(xiàn)有閃存中存儲塊的數(shù)據(jù)存儲部分和壞塊標識部分劃分示意圖。
圖2為本發(fā)明對閃存中存儲塊的劃分及狀態(tài)信息標識的方法示意圖。
圖3為本發(fā)明對閃存中存儲塊首次寫入數(shù)據(jù)后的狀態(tài)示意圖。
圖4為本發(fā)明對閃存中存儲塊數(shù)據(jù)更新后的狀態(tài)示意圖。
圖5為本發(fā)明對閃存中存儲塊寫操作基本流程圖;圖6為本發(fā)明對閃存中存儲塊讀操作基本流程圖;圖7為本發(fā)明對閃存中存儲塊初始化及擦除過程流程圖;圖8為本發(fā)明對閃存中存儲塊數(shù)據(jù)更新操作流程圖。
如圖1-4所示,本發(fā)明閃存芯片內(nèi)部的各存儲塊分有數(shù)據(jù)區(qū)和控制區(qū),控制區(qū)劃分為索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū),根據(jù)索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū)所表述的信息,對閃存的各存儲塊的數(shù)據(jù)區(qū)進行擦除、讀、寫和數(shù)據(jù)更新操作。閃存中存儲塊管理方法為本發(fā)明方法的基礎依據(jù)。
狀態(tài)標識區(qū)標識所對應存儲塊工作狀態(tài)的狀態(tài)標識位組可為相對應的存儲塊(Block)的四種狀態(tài)之一“空”或“忙”或“釋放”或“丟棄”。狀態(tài)標識區(qū)的狀態(tài)標識位組數(shù)與數(shù)據(jù)塊的數(shù)量一致。1號數(shù)據(jù)塊為壞塊,該數(shù)據(jù)塊的號碼信息被另放入控制區(qū)不良存儲信息內(nèi)。
索引區(qū)中的索引位組的信息為與之相對應的存儲塊使用狀態(tài)之一“未用過或已使用”。其中“未用過”用“1”表示;“已使用”用“0”表示。
邏輯地址指針區(qū)內(nèi)的邏輯地址指針組信息為與之相對應的存儲塊的物理地址號碼。索引區(qū)中的索引位組的數(shù)量與邏輯地址指針區(qū)中的邏輯地址指針組的數(shù)量相等。
當數(shù)據(jù)塊內(nèi)沒有寫入數(shù)據(jù)為空閑狀態(tài)時,索引位組的信息為“1”, 狀態(tài)標識位組可為“空”,表示該數(shù)據(jù)塊為空閑狀態(tài),邏輯地址指針組信息沒有地址指針設置,這是對應的狀態(tài)標識位組為“空”,表示該數(shù)據(jù)塊為空閑狀態(tài),可寫入數(shù)據(jù);當然,該數(shù)據(jù)塊號碼如果被表示在不良信息管理區(qū)內(nèi),表示該數(shù)據(jù)塊為“壞的”,則不能寫入數(shù)據(jù)。這一步往往是向數(shù)據(jù)塊內(nèi)寫入數(shù)據(jù)時首先應該進行。
參見圖3,在該實施例中,2號數(shù)據(jù)塊寫入了數(shù)據(jù),這是其對應的索引位信息置為0,邏輯地址指針的地址置為該數(shù)據(jù)塊的物理地址2,2號數(shù)據(jù)塊的狀態(tài)被標識為“忙”。
參見圖4,當對應的2號數(shù)據(jù)塊有更新操作,并且更新的數(shù)據(jù)放入數(shù)據(jù)塊狀態(tài)標識位組的標記為“空”(如圖3所示)的3號數(shù)據(jù)塊中后,2號數(shù)據(jù)塊索引位組增加一個已使用的標記“0”,對應的增加標識邏輯地址指針區(qū)內(nèi)的邏輯地址指針組信息也增加一個更新次數(shù)順序記錄的最后一個數(shù)據(jù)塊邏輯地址,故應為“3”。這時,相應的2號數(shù)據(jù)塊狀態(tài)標識位組的標記為“丟棄”;3號數(shù)據(jù)塊狀態(tài)標識位組的標記為“忙”。在某時刻,由系統(tǒng)對標識為“丟棄”的塊進行擦除,擦除完畢后,將該數(shù)據(jù)塊狀態(tài)標識位組的標記為“釋放”。因此數(shù)據(jù)更新時只要將數(shù)據(jù)直接寫入一個空的數(shù)據(jù)塊中即可,而不需要先進行擦除的操作,節(jié)省了大量的時間,提高了閃存的讀寫速度。標識索引狀態(tài)的索引區(qū)中的索引位組的數(shù)量與邏輯地址指針區(qū)中的邏輯地址指針組的數(shù)量相等。其索引位組的數(shù)量與邏輯地址指針區(qū)中的邏輯地址指針組的數(shù)量應為該數(shù)據(jù)塊更新操作的次數(shù)。而狀態(tài)標識區(qū)的狀態(tài)標識位組的數(shù)量可與數(shù)據(jù)塊的數(shù)量相等。
另外當遇到壞塊時,可通過在對應的標識位組標記“壞”,將該壞塊區(qū)分出來,置為不用,而不至于影響整個閃存片的使用。
如圖5所示,本發(fā)明的寫操作寫操作包括如下步驟1、找到當前指針所指向的為“空閑”狀態(tài)的存儲塊N,將所要寫的數(shù)據(jù)寫入存儲塊N的數(shù)據(jù)區(qū)中;2、再讀回該存儲塊N的數(shù)據(jù)內(nèi)容,將步驟1所寫的數(shù)據(jù)與讀回的該存儲塊N的數(shù)據(jù)內(nèi)容進行比較;3、如果比較結(jié)果為不一致,將當前存儲塊N的狀態(tài)修改為“丟棄”,將該存儲塊N的號碼存入“壞塊”的號碼管理區(qū)域內(nèi),返回步驟1;4、如果比較結(jié)果為一致,則寫入數(shù)據(jù),將與當前存儲塊相對應的索引區(qū)中相應的狀態(tài)內(nèi)容設置為“已使用”;5、將與其相對應的邏輯地址指針的內(nèi)容設置為該數(shù)據(jù)存入的存儲塊的地址;6、將當前存儲塊的狀態(tài)修改為“忙”,結(jié)束。
參見圖6,本發(fā)明讀操作包括如下步驟1、根據(jù)給出的訪問地址找到相應的存儲塊M,依次檢測該存儲塊M中索引區(qū)各索引信息中的內(nèi)容;2、如果找到最后一個內(nèi)容記錄“已使用”即為“0“的索引信息,進入步驟3;否則返回到步驟1;3、根據(jù)與該索引信息對應的邏輯地址指針中的地址找到該地址指示的存儲塊N,讀出該存儲塊N內(nèi)的數(shù)據(jù)內(nèi)容A,4、完成整個讀的操作。
圖7所示的是本發(fā)明擦除操作的方法。本發(fā)明的一個重要目的就是將擦除操作與寫操作分開,以提高整個讀寫的速度。因此本發(fā)明的擦除操作可為初始化擦除和其他時間的擦除。而初始化擦除操為在該閃存盤加電時所作的第一個操作;其他時間擦除可為讀數(shù)據(jù)塊內(nèi)文件的同時擦除狀態(tài)為“釋放”數(shù)據(jù)塊,這樣將改變現(xiàn)有技術中必須再完成了擦除操作后,才能進行寫操作的缺點。
具體擦除操作步驟為1、依次檢測閃存盤中所有或設定數(shù)目的部分存儲塊狀態(tài)標識的狀態(tài)數(shù)據(jù);2、如果該狀態(tài)為“釋放”,則對與存儲塊狀態(tài)標識相對應的存儲塊全塊進行擦除;否則,進入步驟5;3、將該存儲塊的索引區(qū)中所有的索引信息設置為“未用”;4、將該存儲塊的邏輯地址指針區(qū)中所有的邏輯地址指針擦除;5、如果該狀態(tài)為“空閑”或“忙”或“丟棄”;6、如果未檢測完閃存盤中所有的或設定數(shù)據(jù)的部分存儲塊狀態(tài)標識的狀態(tài)數(shù)據(jù),返回步驟1;否則,進入步驟7;7、結(jié)束。
當然,擦除也可為讀操作擦除或操作寫擦除。而讀操作擦除為在每個讀操作之前的擦除操作,具體是依據(jù)如果存儲塊狀態(tài)為“釋放”的存儲塊的數(shù)量少于一事先設置的最小的讀操作擦除存儲塊的數(shù)量,將其與該事先設置的最小的讀操作擦除存儲塊的數(shù)量之間的差值數(shù)量的“丟棄”的存儲塊設置為被擦除的對象,進行擦除操作。
對于寫操作擦除,也為在每個寫操作之前的擦除操作。如果存儲塊狀態(tài)為“釋放”的存儲塊的數(shù)量少于一事先設置的最小的寫操作擦除存儲塊的數(shù)量,將其與該事先設置的最小的讀操作擦除存儲塊的數(shù)量之間的差值數(shù)量的“丟棄”的存儲塊設置為被擦除的對象,進行擦除操作。
另外,為避免系統(tǒng)意外斷電,而將正在進行寫操作,存儲塊中已經(jīng)有了數(shù)據(jù),但是該塊的狀態(tài)尚未改變,因此再上電時,首先應判斷指針所指向的存儲塊內(nèi)是否有數(shù)據(jù)。如果有數(shù)據(jù),并檢測該存儲塊的狀態(tài)為“空閑“時,則該存儲塊標記為”釋放“,指針向下移動。否則指針指向不改變。
如圖8所示為本發(fā)明數(shù)據(jù)更新的方法。
它包括如下步驟1、根據(jù)給出的被更新數(shù)據(jù)的地址找到相應的存儲塊,分析與之相對應的狀態(tài)標識區(qū)中的信息內(nèi)容A;2、如果該狀態(tài)標識區(qū)中的內(nèi)容為“忙”,依次檢測該存儲塊中索引區(qū)各索引信息中的內(nèi)容,直到找到最后一個內(nèi)容值記錄為“已使用”的索引信息;3、根據(jù)步驟2中找到的索引信息對應的邏輯地址指針的內(nèi)容,找到該邏輯地址指針所指向的存儲塊M;4、將步驟3中找到的存儲塊所對應的狀態(tài)標識區(qū)中的內(nèi)容設置為“釋放”,即為可擦除;5、找到當前指針指向的首個為“空閑”狀態(tài)的存儲塊N,進行寫操作。
6、將步驟2中最后一個內(nèi)容值記錄為“已使用”索引信息后面的一個索引信息的內(nèi)容設置為“已使用”;將與該索引信息其相對應的邏輯地址指針的內(nèi)容設置為步驟5所寫數(shù)據(jù)的存儲塊的地址N;7、將步驟1中的被更新數(shù)據(jù)的地址找到相應的存儲塊M相對應的狀態(tài)標識區(qū)中的信息內(nèi)容設置為“釋放”;結(jié)束。
另外,當存儲塊中有一個以上不同的文件時,為A、B,并且一次更新的操作只是對于一個文件A的更新,因此數(shù)據(jù)更新操作還包括如下步驟將被更新數(shù)據(jù)的存儲塊M內(nèi)本次不更新的其他文件B的內(nèi)容進行復制,再將該文件B內(nèi)容搬移到當前指針更新寫入的存儲塊N相應位置上。
綜上所述,本發(fā)明通過控制區(qū)的合理劃分和標識記錄,有效地實現(xiàn)了對閃存片數(shù)據(jù)塊讀寫信息的管理,并將數(shù)據(jù)塊寫入和擦除動作分別完成,大大提高了數(shù)據(jù)讀寫的速度,而且還可均勻地使用閃存片個數(shù)據(jù)塊,延長其使用壽命。
權利要求
1.一種閃存芯片的讀寫方法,其特征在于閃存芯片內(nèi)部的各存儲塊分有數(shù)據(jù)區(qū)和控制區(qū),控制區(qū)劃分為索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū),根據(jù)索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū)所表述的信息,對閃存的各存儲塊的數(shù)據(jù)區(qū)進行擦除、讀、寫和數(shù)據(jù)更新操作。
2.如權利要求1所述的閃存芯片的讀寫方法,其特征在于所述的狀態(tài)標識區(qū)標識所對應存儲塊工作狀態(tài)的狀態(tài)標識位組可為相對應的存儲塊(Block)的四種狀態(tài)之一“空”或“忙”或“釋放”或“丟棄”。
3.如權利要求1所述的閃存芯片的讀寫方法,其特征在于所述的索引區(qū)中的索引位組的信息為與之相對應的存儲塊使用狀態(tài)之一“未用過”或“已使用”。
4.如權利要求1所述的閃存芯片的讀寫方法,其特征在于所述的邏輯地址指針區(qū)內(nèi)的邏輯地址指針組信息為與之相對應的存儲塊的物理地址或表示多次更新后、按照更新次數(shù)順序記錄的邏輯地址。
5.如權利要求1或2或3或4所述的閃存芯片的讀寫方法,其特征在于所述的擦除操作步驟為a、依次檢測閃存盤中所有或設定數(shù)目的部分存儲塊狀態(tài)標識的狀態(tài)數(shù)據(jù);b、如果該狀態(tài)為“釋放”,則對與存儲塊狀態(tài)標識相對應的存儲塊全塊進行擦除;否則,進入步驟e;c、將該存儲塊的索引區(qū)中所有的索引信息設置為“未用”;d、將該存儲塊的邏輯地址指針區(qū)中所有的邏輯地址指針擦除;e、如果該狀態(tài)為“空閑”或“忙”或“丟棄”;f、如果未檢測完閃存盤中所有的或設定數(shù)據(jù)的部分存儲塊狀態(tài)標識的狀態(tài)數(shù)據(jù),返回步驟a;否則,進入步驟g;g、結(jié)束。
6.如權利要求1所述的閃存芯片的讀寫方法,其特征在于所述的擦除操作可為初始化擦除和其他時間的擦除。
7.如權利要求6所述的閃存芯片的讀寫方法,其特征在于所述的初始化擦除操為在該閃存盤加電時所作的第一個操作。
8.如權利要求6所述的閃存芯片的讀寫方法,其特征在于所述的其他時間擦除可為讀數(shù)據(jù)塊內(nèi)文件的同時擦除狀態(tài)為“釋放”數(shù)據(jù)塊。
9.如權利要求1所述的閃存芯片的讀寫方法,其特征在于所述的擦除也可為讀操作擦除或操作寫擦除。
10.如權利要求9所述的閃存芯片的讀寫方法,其特征在于所述的讀操作擦除為在每個讀操作之前的擦除操作。
11.如權利要求5或10所述的閃存芯片的讀寫方法,其特征在于所述的讀操作擦除為如果存儲塊狀態(tài)為“釋放”的存儲塊的數(shù)量少于一事先設置的最小的讀操作擦除存儲塊的數(shù)量,將其與該事先設置的最小的讀操作擦除存儲塊的數(shù)量之間的差值數(shù)量的“丟棄”的存儲塊設置為被擦除的對象,進行擦除操作。
12.如權利要求9所述的閃存芯片的讀寫方法,其特征在于所述的寫操作擦除為在每個寫操作之前的擦除操作。
13.如權利要求5或12所述的閃存芯片的讀寫方法,其特征在于所述的寫操作擦除為如果存儲塊狀態(tài)為“釋放”的存儲塊的數(shù)量少于一事先設置的最小的寫操作擦除存儲塊的數(shù)量,將其與該事先設置的最小的讀操作擦除存儲塊的數(shù)量之間的差值數(shù)量的“丟棄”的存儲塊設置為被擦除的對象,進行擦除操作。
14.如權利要求1或2或3或4所述的閃存芯片的讀寫方法,其特征在于所述的讀操作包括如下步驟a、根據(jù)給出的訪問地址找到相應的存儲塊,依次檢測該存儲塊中索引區(qū)各索引信息中的內(nèi)容;b、如果找到最后一個內(nèi)容記錄“已使用”的索引信息,進入步驟c;否則返回到步驟a;c、根據(jù)與該索引信息對應的邏輯地址指針中的地址找到該地址指示的存儲塊,讀出該存儲塊內(nèi)的數(shù)據(jù)內(nèi)容,結(jié)束。
15.如權利要求1或2或3或4所述的閃存芯片的讀寫方法,其特征在于所述的寫操作包括如下步驟a、找到當前指針所指向的為“空閑”狀態(tài)的存儲塊,將所要寫的數(shù)據(jù)寫入該存儲塊的數(shù)據(jù)區(qū)中;b、再讀回該存儲塊的數(shù)據(jù)內(nèi)容,將步驟a所寫的數(shù)據(jù)與讀回的該存儲塊的數(shù)據(jù)內(nèi)容進行比較;c、如果比較結(jié)果為不一致,進入步驟d;否則進入步驟e;d、將當前存儲塊的狀態(tài)修改為“丟棄”,返回步驟a;e、將與當前存儲塊相對應的索引區(qū)中相應的狀態(tài)內(nèi)容設置為“已使用”;f、將與其相對應的邏輯地址指針的內(nèi)容設置為該數(shù)據(jù)存入的存儲塊的地址;g、將當前存儲塊的狀態(tài)修改為“忙”,結(jié)束。
16.如權利要求1或15所述的閃存芯片的讀寫方法,其特征在于所述的數(shù)據(jù)更新操作包括如下步驟a、根據(jù)給出的被更新數(shù)據(jù)的地址找到相應的存儲塊,分析與之相對應的狀態(tài)標識區(qū)中的信息內(nèi)容;b、如果該狀態(tài)標識區(qū)中的內(nèi)容為“忙”,依次檢測該存儲塊中索引區(qū)各索引信息中的內(nèi)容,直到找到最后一個內(nèi)容值記錄為“已使用”的索引信息;c、根據(jù)步驟b中找到的索引信息對應的邏輯地址指針的內(nèi)容,找到該邏輯地址指針所指向的存儲塊;d、將步驟c中找到的存儲塊所對應的狀態(tài)標識區(qū)中的內(nèi)容設置為“釋放”;e、找到當前指針指向的首個為“空閑”狀態(tài)的存儲塊,進行寫操作。f、將步驟b中最后一個內(nèi)容值記錄為“已使用”索引信息后面的一個索引信息的內(nèi)容設置為“已使用”;將與該索引信息其相對應的邏輯地址指針的內(nèi)容設置為步驟e所寫數(shù)據(jù)的存儲塊的地址;g、將步驟a中的被更新數(shù)據(jù)的地址找到相應的存儲塊相對應的狀態(tài)標識區(qū)中的信息內(nèi)容設置為“釋放”;結(jié)束。
17.如權利要求16所述的閃存芯片的讀寫方法,其特征在于所述的數(shù)據(jù)更新操作還包括如下步驟將被更新數(shù)據(jù)的存儲塊內(nèi)本次不更新的其他文件的內(nèi)容進行復制,再將該文件內(nèi)容搬移到當前指針更新寫入的存儲塊相應位置上。
18.如權利要求15或16所述的閃存芯片的讀寫方法,其特征在于所述的為“空閑”狀態(tài)的存儲塊的地址存儲在閃存盤的一連續(xù)的存儲區(qū)中。
全文摘要
一種閃存芯片的讀寫方法,閃存芯片內(nèi)部的各存儲塊分有數(shù)據(jù)區(qū)和控制區(qū),控制區(qū)劃分為索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū),根據(jù)索引區(qū)、邏輯地址指針區(qū)和狀態(tài)標識區(qū)所表述的信息,對閃存的各存儲塊的數(shù)據(jù)區(qū)進行擦除、讀、寫和數(shù)據(jù)更新操作。本發(fā)明根據(jù)存儲塊的狀態(tài)進行擦除、讀、寫操作,將閃存的寫入操作與擦除操作分開,提高整體的讀寫速度,使得對閃存中各個存儲塊的寫入操作的頻率基本一致,延長閃存盤的壽命。
文檔編號G11C7/00GK1362708SQ0110000
公開日2002年8月7日 申請日期2001年1月2日 優(yōu)先權日2001年1月2日
發(fā)明者岳京星, 吳秀林 申請人:吳秀林, 岳京星