專利名稱:閃存的安全寫入方法
技術(shù)領(lǐng)域:
本發(fā)明涉及芯片存儲(chǔ)器的安全讀寫的方法,具體來(lái)說(shuō)是閃存的一種安全寫入方法。
背景技術(shù):
近些年來(lái),閃存(Flash Memory)存儲(chǔ)介質(zhì)在嵌入式系統(tǒng)中得到迅速發(fā)展和廣泛應(yīng)用。閃存是一種基于半導(dǎo)體的存儲(chǔ)器,具有系統(tǒng)掉電后仍可保留內(nèi)部信息,及在線擦寫等功能特點(diǎn),是一種替代原來(lái)EEPROM存儲(chǔ)介質(zhì)的新型存儲(chǔ)器。
首先介紹一下閃存(Flash Memory)的特性和限制,這里所介紹的閃存的特性和限制都是從上層的文件系統(tǒng)的角度來(lái)看的,而不會(huì)涉及到具體的物理特性A)閃存的最小尋址單位是字節(jié)(byte),而不是磁盤上的扇區(qū)(sector)。這意味著我們可以從一塊閃存的任意偏移(offset)讀數(shù)據(jù),但并不表明對(duì)閃存寫操作也是以字節(jié)為單位進(jìn)行的。
B)當(dāng)一塊閃存處在干凈的狀態(tài)時(shí)(被擦寫過(guò),但是還沒(méi)有寫操作發(fā)生),在這塊flash上的每一位(bit)都是邏輯1。
C)閃存上的每一位(bit)可以被寫操作置成邏輯0??墒前堰壿?置成邏輯1卻不能按位(bit)來(lái)操作,一般一個(gè)最小擦除單元稱為擦寫塊,擦寫操作只能按擦寫塊(erase block)為單位進(jìn)行。擦寫塊的大小從4K到128K不等。從上層來(lái)看,擦寫所完成的功能就是把擦寫塊內(nèi)的每一位都重設(shè)置(reset)成邏輯1。
D)閃存的使用壽命是有限的。具體來(lái)說(shuō),閃存的使用壽命是由擦寫塊的最大可擦寫次數(shù)來(lái)決定的。超過(guò)了最大可擦寫次數(shù),這個(gè)擦寫塊就成為壞塊(bad block)了。因此為了避免某個(gè)擦寫塊被過(guò)度擦寫,以至于它先于其他的擦寫塊達(dá)到最大可擦寫次數(shù),我們應(yīng)該在盡量小的影響性能的前提下,使擦寫操作均勻的分布在每個(gè)擦寫塊上。這個(gè)過(guò)程叫做磨損平衡(wear leveling)。
E)閃存一般有一個(gè)最大寫入單元,通常我們習(xí)慣把最大寫入單元稱為頁(yè),一般一個(gè)擦寫塊包含一個(gè)或者多個(gè)頁(yè)。
在嵌入式系統(tǒng)開(kāi)發(fā)中,為提高可靠性及安全性,要求對(duì)閃存的寫操作做防掉電保護(hù)處理。防掉電保護(hù)是指在一次寫操作完成前,如果系統(tǒng)意外掉電,在重新上電后,系統(tǒng)可以恢復(fù)到寫操作之前的狀態(tài)。然而由于閃存擦寫方面的一些特性,導(dǎo)致其針對(duì)閃存的防掉電處理相對(duì)來(lái)說(shuō)困難很多。
由于閃存的上述特性,目前運(yùn)行在閃存上的文件系統(tǒng)要改寫一個(gè)塊設(shè)備的扇區(qū)時(shí),通常是將這個(gè)扇區(qū)所在擦寫塊的數(shù)據(jù)讀到內(nèi)存中,放在緩存(buffer)中,然后將緩存中與這個(gè)扇區(qū)對(duì)應(yīng)的內(nèi)容用新的內(nèi)容替換掉,再對(duì)該擦寫塊執(zhí)行擦寫操作,最后將緩沖中的數(shù)據(jù)寫回該擦寫塊。這種實(shí)現(xiàn)方式的缺點(diǎn)是很明顯的效率低,對(duì)一個(gè)扇區(qū)的更新要重寫整個(gè)擦寫塊上的數(shù)據(jù),也造成內(nèi)存空間很大的浪費(fèi);沒(méi)有提供磨損平衡,那些被頻繁更新的數(shù)據(jù)所在擦寫塊將首先變成壞塊;非常不安全,很容易引起數(shù)據(jù)的丟失。如果在上面的操作最后兩步之間發(fā)生了突然掉電(power loss),那么整個(gè)擦寫塊中的數(shù)據(jù)就全部丟失了。這在突然掉電經(jīng)常發(fā)生的嵌入式系統(tǒng)中是不能接受的。
發(fā)明內(nèi)容
本發(fā)明克服了上述缺點(diǎn),提供了一種安全、磨損平衡而且節(jié)省內(nèi)存的針對(duì)閃存的安全讀寫的方法。
本發(fā)明解決其技術(shù)問(wèn)題所采取的技術(shù)方案是閃存的一種安全寫入方法,將每個(gè)最小擦寫單元作為一個(gè)邏輯塊,每個(gè)邏輯塊中包含一個(gè)或多個(gè)邏輯頁(yè),并給每一個(gè)邏輯塊編號(hào),所述邏輯塊中包括一個(gè)預(yù)留的用于數(shù)據(jù)中轉(zhuǎn)的備份塊,數(shù)據(jù)的寫入包括以下步驟1)根據(jù)要寫入內(nèi)容的目標(biāo)地址所在的邏輯塊,獲取對(duì)應(yīng)目標(biāo)塊的邏輯塊號(hào)和所述邏輯塊內(nèi)對(duì)應(yīng)頁(yè)的頁(yè)號(hào);2)將要寫入的內(nèi)容按步驟1)中獲取的頁(yè)號(hào)寫入所述備份塊中的對(duì)應(yīng)頁(yè)中;3)將所述目標(biāo)塊中除所述目標(biāo)頁(yè)外的其他各頁(yè)寫入所述備份塊中對(duì)應(yīng)的其他各頁(yè)中;4)將備份塊中的邏輯塊號(hào)由所述步驟1)中目標(biāo)塊的邏輯塊號(hào)替換;5)當(dāng)所述備份塊號(hào)的各個(gè)有效位全部為“1”時(shí),擦除步驟1)中目標(biāo)邏輯塊中的全部?jī)?nèi)容,所述擦除后的目標(biāo)邏輯塊成為新的備份塊,當(dāng)所述備份塊號(hào)的各個(gè)有效位不全為“1”時(shí),擦除步驟1)中目標(biāo)邏輯塊中的全部?jī)?nèi)容,并將邏輯塊號(hào)改寫為備份塊號(hào),作為新的備份塊。
所述步驟2)、3)順序不限。
所述邏輯塊號(hào)可以固定位數(shù)存儲(chǔ)在所在邏輯塊中。
所述邏輯塊號(hào)可保存在所在邏輯塊的第一個(gè)或最后一個(gè)字節(jié)中。
如果在步驟4)和步驟5)之間發(fā)生掉電,則上電后,可進(jìn)行以下步驟選取并保留兩個(gè)具有相同邏輯塊號(hào)中的任一個(gè)邏輯塊,另外一個(gè)作為備份邏輯塊,并擦除所述備份邏輯塊中的內(nèi)容。
對(duì)每個(gè)邏輯塊的編號(hào)可在系統(tǒng)對(duì)閃存初始化或者格式化的時(shí)候進(jìn)行。
閃存的一種安全寫入方法,將每個(gè)最小擦寫單元作為一個(gè)邏輯塊,每個(gè)邏輯塊包含一個(gè)或多個(gè)邏輯頁(yè),并給每一個(gè)邏輯塊編號(hào),所述邏輯塊中包括一個(gè)預(yù)留的用于數(shù)據(jù)中轉(zhuǎn)的備份塊,當(dāng)所述邏輯塊號(hào)的各個(gè)有效位全為“0”時(shí),數(shù)據(jù)的寫入包括以下步驟1)根據(jù)要寫入內(nèi)容的目標(biāo)地址所在的邏輯塊,獲取對(duì)應(yīng)目標(biāo)塊的邏輯塊號(hào)和所述邏輯塊內(nèi)對(duì)應(yīng)頁(yè)的頁(yè)號(hào);2)找到并擦除所述備份塊中的全部?jī)?nèi)容;3)將要寫入的內(nèi)容按步驟1)中獲取的頁(yè)號(hào)寫入所述備份塊中的對(duì)應(yīng)頁(yè)中;4)將所述目標(biāo)塊中除所述目標(biāo)頁(yè)外的其他各頁(yè)寫入所述備份塊中對(duì)應(yīng)的其他各頁(yè)中;5)將備份塊中的邏輯塊號(hào)由所述步驟1)中目標(biāo)塊的邏輯塊號(hào)替換;6)將步驟1)中原目標(biāo)塊中的邏輯塊號(hào)改寫為備份塊的邏輯塊塊號(hào);所述步驟4)、5)順序不限。
所述邏輯塊號(hào)可以固定位數(shù)存儲(chǔ)在所在邏輯塊中。
所述邏輯塊號(hào)可保存在所在邏輯塊的第一個(gè)或最后一個(gè)字節(jié)中。
如果在步驟5)和步驟6)之間發(fā)生掉電,則上電后,可進(jìn)行以下步驟選取并保留兩個(gè)具有相同邏輯塊號(hào)中的任一個(gè)邏輯塊,另外一個(gè)作為備份邏輯塊,并更改所述備份邏輯塊中邏輯塊編號(hào)單元為全“0”。
對(duì)每個(gè)邏輯塊的編號(hào)可在系統(tǒng)對(duì)閃存初始化或者格式化的時(shí)候進(jìn)行。
本發(fā)明將每個(gè)最小擦寫單元作為一個(gè)邏輯塊,每個(gè)邏輯塊中包含一個(gè)或多個(gè)邏輯頁(yè),通過(guò)并給每一個(gè)邏輯塊編號(hào),將要寫入的數(shù)據(jù)和目標(biāo)邏輯塊中的內(nèi)容都寫入備份邏輯塊,并將備份邏輯塊的邏輯號(hào)和目標(biāo)邏輯塊的塊號(hào)倒置,從而實(shí)現(xiàn)數(shù)據(jù)的安全寫入,并可以達(dá)到很好的掉電保護(hù)的作用,同時(shí)所述備份塊是隨機(jī)的,避免了某個(gè)擦寫塊被過(guò)度擦寫,以至于它先于其他的邏輯塊達(dá)到最大可擦寫次數(shù),從而達(dá)到磨損平衡,提高閃存的使用壽命,從而提高系統(tǒng)性能,此外由于相比于現(xiàn)有技術(shù),不需要經(jīng)常擦寫整個(gè)擦寫塊,很大程度的減少了內(nèi)存的使用量。
圖1為本發(fā)明實(shí)施例1中存儲(chǔ)器在改寫前的初始狀態(tài);圖2為本發(fā)明實(shí)施例1中完成步驟2后存儲(chǔ)器的狀態(tài);圖3為本發(fā)明實(shí)施例1中完成步驟3后存儲(chǔ)器的狀態(tài);圖4為本發(fā)明實(shí)施例1中完成步驟4后存儲(chǔ)器的狀態(tài);圖5為本發(fā)明實(shí)施例1中完成步驟5后存儲(chǔ)器的狀態(tài)。
圖6為本發(fā)明實(shí)施例2中存儲(chǔ)器在改寫前的初始狀態(tài);圖7為本發(fā)明實(shí)施例2中完成步驟2后存儲(chǔ)器的狀態(tài);圖8為本發(fā)明實(shí)施例2中完成步驟3后存儲(chǔ)器的狀態(tài);圖9為本發(fā)明實(shí)施例2中完成步驟4后存儲(chǔ)器的狀態(tài);圖10為本發(fā)明實(shí)施例2中完成步驟5后存儲(chǔ)器的狀態(tài)。
具體實(shí)施例方式
下面根據(jù)具體實(shí)施例對(duì)本發(fā)明內(nèi)容做詳細(xì)描述。
由于閃存(Flash Memory)的寫以頁(yè)為單位,擦除以塊為單位,不同的類型的閃存對(duì)頁(yè)和塊的劃分有區(qū)別,我們以一個(gè)擦寫塊64字節(jié),每個(gè)擦寫塊分8個(gè)頁(yè)的總共四個(gè)擦寫塊的存儲(chǔ)區(qū)為例,遵循每個(gè)邏輯塊唯一的對(duì)應(yīng)一個(gè)擦寫塊,因此每個(gè)邏輯塊也是64個(gè)字節(jié),分為8個(gè)頁(yè)。系統(tǒng)對(duì)數(shù)據(jù)的讀寫都是基于所述邏輯塊來(lái)處理,對(duì)閃存介質(zhì)的尋址都是根據(jù)邏輯地址進(jìn)行。同時(shí),還要至少保留一個(gè)備份擦寫塊,用于數(shù)據(jù)中轉(zhuǎn)。
實(shí)施例1,在系統(tǒng)對(duì)閃存初始化或者格式化的時(shí)候,使閃存中每個(gè)物理擦寫單元對(duì)應(yīng)一個(gè)邏輯塊,給每一個(gè)邏輯塊都編號(hào),本實(shí)施例中占用每個(gè)邏輯塊的第一個(gè)字節(jié)存放邏輯塊號(hào),如圖1所示,這樣每個(gè)邏輯塊的可用容量其實(shí)就變成63字節(jié),而整個(gè)存儲(chǔ)區(qū)的大小為252個(gè)字節(jié)。這里我們分別定義四個(gè)邏輯塊的邏輯號(hào)為00、01、02、03、,其中邏輯號(hào)為00的邏輯塊為保留的備份邏輯塊,且為未使用或者經(jīng)過(guò)擦除后的邏輯塊,用于數(shù)據(jù)的中轉(zhuǎn)。同時(shí)我們?cè)O(shè)置01號(hào)邏輯塊對(duì)應(yīng)物理塊0,02號(hào)邏輯塊對(duì)應(yīng)物理塊1,03號(hào)邏輯塊對(duì)應(yīng)物理塊3,00號(hào)邏輯塊對(duì)應(yīng)物理塊2,邏輯地址編址為邏輯塊號(hào)從小到大的順序來(lái)編排。邏輯塊的編號(hào)根據(jù)具體的應(yīng)用來(lái)決定,可以采用不同的方法。
例如要對(duì)邏輯地址0x31~0x38寫入一串?dāng)?shù)字7,具體步驟如下1、根據(jù)要寫入的目標(biāo)邏輯地址,獲取對(duì)應(yīng)的目標(biāo)邏輯塊號(hào)與頁(yè)號(hào),在這里為邏輯塊01和其中的第7頁(yè),如圖1所示;2、根據(jù)邏輯塊號(hào)00找到備份邏輯塊,并擦除找到的此備份邏輯塊,使其包括邏輯塊號(hào)在內(nèi)的全部存儲(chǔ)區(qū)域均為邏輯“1”,如圖2所示;3、把要改寫的內(nèi)容寫入步驟1中計(jì)算出目標(biāo)邏輯塊號(hào)和頁(yè)號(hào)對(duì)應(yīng)的備份塊中的邏輯塊號(hào)和頁(yè)號(hào)中,即將一串?dāng)?shù)字7寫入備份塊的第7頁(yè),并將對(duì)應(yīng)于邏輯塊01中的其他頁(yè)拷貝到備份邏輯塊中相應(yīng)頁(yè)中,如圖3所示;4、將備份塊的邏輯號(hào),改成步驟1中計(jì)算出的目標(biāo)邏輯塊的塊號(hào),即將備份塊此時(shí)的邏輯號(hào)FF改為01,如圖4所示;5、將步驟1中計(jì)算出的邏輯塊的邏輯塊號(hào)(即原邏輯塊01的塊號(hào))改寫為備份塊塊號(hào)00,如圖5所示;通過(guò)以上操作,我們可以發(fā)現(xiàn)邏輯塊01已經(jīng)安全地改寫為預(yù)定的值,只不過(guò)數(shù)據(jù)已經(jīng)改寫到另外的物理塊上面,而其本身的物理塊則成為新的備份邏輯塊(即邏輯塊00)。在這個(gè)過(guò)程當(dāng)中任何時(shí)候發(fā)生掉電都不會(huì)引起數(shù)據(jù)的丟失,例如a)如果掉電發(fā)生在步驟3以前,對(duì)要改寫的邏輯塊沒(méi)有任何影響。
b)如果掉電發(fā)生在步驟3和4之間,由于此時(shí)邏輯塊號(hào)沒(méi)有任何變化,重新上電就可以恢復(fù)。
c)如果掉電發(fā)生在步驟4和5之間,此時(shí),會(huì)存在兩個(gè)相同塊號(hào)的塊,這樣,重新上電后任選一個(gè)作為邏輯塊,另外一個(gè)作為備份塊,然后將邏輯塊號(hào)改寫為備份塊的邏輯塊號(hào)00即可。
實(shí)施例2,在系統(tǒng)對(duì)閃存初始化或者格式化的時(shí)候,使閃存中每個(gè)物理擦寫單元對(duì)應(yīng)一個(gè)邏輯塊,給每一個(gè)邏輯塊都編號(hào),本實(shí)施例中占用每個(gè)邏輯塊的第一個(gè)字節(jié)存放邏輯塊號(hào),如圖6所示,這樣每個(gè)邏輯塊的可用容量其實(shí)就變成63字節(jié),而整個(gè)存儲(chǔ)區(qū)的大小為252個(gè)字節(jié)。這里我們分別定義四個(gè)邏輯塊的邏輯號(hào)為01、02、03、FF,其中邏輯塊號(hào)為FF的邏輯塊為保留的備份邏輯塊,用于數(shù)據(jù)的中轉(zhuǎn)。同時(shí)我們?cè)O(shè)置01號(hào)邏輯塊對(duì)應(yīng)物理塊0,02號(hào)邏輯塊對(duì)應(yīng)物理塊1,03號(hào)邏輯塊對(duì)應(yīng)物理塊3,F(xiàn)F號(hào)邏輯塊對(duì)應(yīng)物理塊2,邏輯塊的編號(hào)根據(jù)具體的應(yīng)用來(lái)決定,可以采用不同的方法。
例如要對(duì)邏輯地址0x31~0x38寫入一串?dāng)?shù)字7,具體步驟如下1、根據(jù)要寫入的邏輯地址,獲取對(duì)應(yīng)的目標(biāo)邏輯塊號(hào)與頁(yè)號(hào),在這里為邏輯塊01和其中的第7頁(yè),如圖6所示;2、根據(jù)邏輯塊號(hào)FF找到備份邏輯塊,此備份邏輯塊此時(shí)應(yīng)為未使用或者擦除后未使用,如圖7所示;3、把要改寫的內(nèi)容寫入步驟1中計(jì)算出目標(biāo)邏輯塊號(hào)和頁(yè)號(hào)對(duì)應(yīng)的備份塊中的邏輯塊號(hào)和頁(yè)號(hào)中,即將一串?dāng)?shù)字7寫入備份塊FF的第7頁(yè),并將對(duì)應(yīng)于邏輯塊01中的其他頁(yè)拷貝到備份邏輯塊中相應(yīng)頁(yè)中,完成這一步后存儲(chǔ)器中的數(shù)據(jù)如圖8所示;4、將備份塊的邏輯號(hào),改成步驟1中計(jì)算出的目標(biāo)邏輯塊的塊號(hào),即將備份塊的邏輯號(hào)改為01,如圖9所示;5、擦除步驟1中計(jì)算出的目標(biāo)邏輯塊,即將整個(gè)邏輯塊全部改寫為邏輯“1”,則邏輯塊號(hào)為FF,使其成為新的備份塊,如圖10所示;通過(guò)以上操作,我們可以發(fā)現(xiàn)邏輯塊01已經(jīng)安全地改寫為預(yù)定的值,只不過(guò)數(shù)據(jù)已經(jīng)改寫到另外的物理塊上面,而其本身的物理塊已經(jīng)處于干凈的狀態(tài),即被擦除過(guò),但尚沒(méi)有寫操作發(fā)生,成為新的邏輯備份塊。在這個(gè)過(guò)程當(dāng)中任何時(shí)候發(fā)生掉電都不會(huì)引起數(shù)據(jù)的丟失,例如a)如果掉電發(fā)生在步驟3以前,對(duì)要改寫的邏輯塊沒(méi)有任何影響。
b)如果掉電發(fā)生在步驟3和4之間,由于此時(shí)邏輯塊號(hào)沒(méi)有任何變化,重新上電就可以恢復(fù)。
c)如果掉電發(fā)生在步驟4和5之間,此時(shí),會(huì)存在兩個(gè)相同塊號(hào)的塊,這樣,重新上電后任選一個(gè)作為目標(biāo)邏輯塊,另外一個(gè)作為備份塊,然后擦除作為備份塊的邏輯塊即可。
經(jīng)過(guò)上述處理,就能保證系統(tǒng)數(shù)據(jù)的安全性,從而達(dá)到了安全讀寫的目的,而且備份塊的隨機(jī)更迭也保證了磨損平衡,不會(huì)因?yàn)轭l繁擦寫某一個(gè)物理塊而導(dǎo)致其提前成為壞塊。同時(shí)由于不需要過(guò)多的擦寫整個(gè)擦寫塊,很大程度的減少了內(nèi)存的使用量。
以上對(duì)本發(fā)明所提供的閃存的安全寫入方法進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.閃存的一種安全寫入方法,其特征在于將每個(gè)最小擦寫單元作為一個(gè)邏輯塊,每個(gè)邏輯塊中包含一個(gè)或者多個(gè)邏輯頁(yè),并給每一個(gè)邏輯塊編號(hào),所述邏輯塊中包括一個(gè)預(yù)留的用于數(shù)據(jù)中轉(zhuǎn)的備份塊,數(shù)據(jù)的寫入包括以下步驟1)根據(jù)要寫入內(nèi)容的目標(biāo)地址所在的邏輯塊,獲取對(duì)應(yīng)目標(biāo)塊的邏輯塊號(hào)和所述邏輯塊內(nèi)對(duì)應(yīng)頁(yè)的頁(yè)號(hào);2)將要寫入的內(nèi)容按步驟1)中獲取的頁(yè)號(hào)寫入所述備份塊中的對(duì)應(yīng)頁(yè)中;3)將所述目標(biāo)塊中除所述目標(biāo)頁(yè)外的其他各頁(yè)寫入所述備份塊中對(duì)應(yīng)的其他各頁(yè)中;4)將備份塊中的邏輯塊號(hào)由所述步驟1)中目標(biāo)塊的邏輯塊號(hào)替換;5)當(dāng)所述備份塊號(hào)的各個(gè)有效位全部為“1”時(shí),擦除步驟1)中目標(biāo)邏輯塊中的全部?jī)?nèi)容,所述擦除后的目標(biāo)邏輯塊成為新的備份塊,當(dāng)所述備份塊號(hào)的各個(gè)有效位不全為“1”時(shí),擦除步驟1)中目標(biāo)邏輯塊中的全部?jī)?nèi)容,并將邏輯塊號(hào)改寫為備份塊號(hào),作為新的備份塊。所述步驟2)、3)順序不限。
2.根據(jù)權(quán)利要求1所述的閃存的安全寫方法,其特征在于所述邏輯塊號(hào)以固定位數(shù)存儲(chǔ)在所在邏輯塊中。
3.根據(jù)權(quán)利要求2所述的閃存的安全寫方法,其特征在于所述邏輯塊號(hào)保存在所在邏輯塊的第一個(gè)字節(jié)中或最后一個(gè)字節(jié)。
4.根據(jù)權(quán)利要求1或2或3所述的閃存的安全寫方法,其特征在于如果在步驟4)和步驟5)之間發(fā)生掉電,則上電后,進(jìn)行以下步驟選取并保留兩個(gè)具有相同邏輯塊號(hào)中的任一個(gè)邏輯塊,另外一個(gè)作為備份邏輯塊,并擦除所述備份邏輯塊中的內(nèi)容。
5.根據(jù)權(quán)利要求1或2或3所述的閃存的安全寫方法,其特征在于對(duì)每個(gè)邏輯塊的編號(hào)在系統(tǒng)對(duì)閃存初始化或者格式化的時(shí)候進(jìn)行。
6.閃存的一種安全寫入方法,其特征在于將每個(gè)最小擦寫單元作為一個(gè)邏輯塊,每個(gè)邏輯塊中包含一個(gè)或者多個(gè)邏輯頁(yè),并給每一個(gè)邏輯塊編號(hào),所述邏輯塊中包括一個(gè)預(yù)留的用于數(shù)據(jù)中轉(zhuǎn)的備份塊,當(dāng)所述邏輯塊號(hào)的各個(gè)有效位全為“0”時(shí),數(shù)據(jù)的寫入包括以下步驟1)根據(jù)要寫入內(nèi)容的目標(biāo)地址所在的邏輯塊,獲取對(duì)應(yīng)目標(biāo)塊的邏輯塊號(hào)和所述邏輯塊內(nèi)對(duì)應(yīng)頁(yè)的頁(yè)號(hào);2)找到并擦除所述備份塊中的全部?jī)?nèi)容;3)將要寫入的內(nèi)容按步驟1)中獲取的頁(yè)號(hào)寫入所述備份塊中的對(duì)應(yīng)頁(yè)中;4)將所述目標(biāo)塊中除所述目標(biāo)頁(yè)外的其他各頁(yè)寫入所述備份塊中對(duì)應(yīng)的其他各頁(yè)中;5)將備份塊中的邏輯塊號(hào)由所述步驟1)中目標(biāo)塊的邏輯塊號(hào)替換;6)將步驟1)中原目標(biāo)塊中的邏輯塊號(hào)改寫為備份塊的邏輯塊塊號(hào);所述步驟3)、4)順序不限。
7.根據(jù)權(quán)利要求6所述的閃存的安全寫入方法,其特征在于所述邏輯塊號(hào)以固定位數(shù)存儲(chǔ)在所在邏輯塊中。
8.根據(jù)權(quán)利要求7所述的閃存的安全寫入方法,其特征在于所述邏輯塊號(hào)保存在所在邏輯塊的第一個(gè)字節(jié)中或最后一個(gè)字節(jié)。
9.根據(jù)權(quán)利要求6或7或8所述的閃存的安全寫入方法,其特征在于如果在步驟5)和步驟6)之間發(fā)生掉電,則上電后,進(jìn)行以下步驟選取并保留兩個(gè)具有相同邏輯塊號(hào)中的任一個(gè)邏輯塊,另外一個(gè)作為備份邏輯塊,并更改所述備份邏輯塊中邏輯塊編號(hào)單元為全“0”。
10.根據(jù)權(quán)利要求6或7或8所述的閃存的安全寫入方法,其特征在于對(duì)每個(gè)邏輯塊的編號(hào)在系統(tǒng)對(duì)閃存初始化或者格式化的時(shí)候進(jìn)行。
全文摘要
本發(fā)明涉及芯片存儲(chǔ)器的安全讀寫的方法,具體來(lái)說(shuō)是閃存的一種安全寫入方法。本發(fā)明將每個(gè)最小擦寫單元作為一個(gè)邏輯塊,每個(gè)邏輯塊中包含一個(gè)或者多個(gè)邏輯頁(yè),通過(guò)并給每一個(gè)邏輯塊編號(hào),將要寫入的數(shù)據(jù)和目標(biāo)邏輯塊中的內(nèi)容都寫入備份邏輯塊,并將備份邏輯塊的邏輯號(hào)和目標(biāo)邏輯塊的塊號(hào)倒置,從而實(shí)現(xiàn)數(shù)據(jù)的安全寫入,并可以達(dá)到很好的掉電保護(hù)的作用,同時(shí)所述備份塊是隨機(jī)的,避免了某個(gè)擦寫塊被過(guò)度擦寫,以至于它先于其他的邏輯塊達(dá)到最大可擦寫次數(shù),從而達(dá)到磨損平衡,提高閃存的使用壽命,從而提高系統(tǒng)性能,此外由于相比于現(xiàn)有技術(shù),不需要經(jīng)常擦寫整個(gè)擦寫塊,很大程度地減少了內(nèi)存的使用量。
文檔編號(hào)G06F11/14GK1845082SQ200610078999
公開(kāi)日2006年10月11日 申請(qǐng)日期2006年4月29日 優(yōu)先權(quán)日2006年4月29日
發(fā)明者陸舟, 于華章 申請(qǐng)人:北京飛天誠(chéng)信科技有限公司