專利名稱:一種flash存儲器的數(shù)據(jù)存儲方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)存儲技術(shù)領(lǐng)域,尤其是一種FLASH存儲器的數(shù)據(jù)存儲方法。
背景技術(shù):
FLASH存儲器(可編程只讀存儲器,以下簡稱FLASH)是Intel公司于1988年推 出的一種新型半導(dǎo)體存儲器,具有非揮發(fā)存儲特性,簡稱閃存,該類只讀存儲器具有集成度 高、讀取速度快、單一供電、再編程次數(shù)多等顯著優(yōu)點(diǎn),F(xiàn)LASH存儲器作為非易失數(shù)據(jù)存儲設(shè) 備,被廣泛地應(yīng)用于嵌入式系統(tǒng)中。單片機(jī)片內(nèi)的FLASH可以在線編程,也可以存儲程序 運(yùn)行時的數(shù)據(jù),但修改FLASH中的數(shù)據(jù)時需要先進(jìn)行擦除,既修改一個字節(jié)的數(shù)據(jù)也要先 擦除這個字節(jié)所在扇區(qū)的全部數(shù)據(jù),然后再寫入數(shù)據(jù)。傳統(tǒng)的寫入方法采用如下的過程 1.備份數(shù)據(jù)所在扇區(qū)中的所有數(shù)據(jù);2.在備份數(shù)據(jù)中修改要改變的數(shù)據(jù);3.擦除數(shù)據(jù)所在 的FLASH實(shí)際扇區(qū)的所有數(shù)據(jù);4.把修改后的備份數(shù)據(jù)寫回剛擦除的FLASH扇區(qū)內(nèi)。上述 方法存在的不足是1.每改動扇區(qū)中的一個字節(jié)都要擦除整個扇區(qū)的數(shù)據(jù),2.某些數(shù)據(jù)需 要頻繁修改,該數(shù)據(jù)所在的扇區(qū)會被頻繁擦除。由此可知傳統(tǒng)的FLASH寫入方法需要頻繁 擦除數(shù)據(jù),但FLASH的擦除次數(shù)是有限的,使用傳統(tǒng)方法進(jìn)行數(shù)據(jù)的寫入和修改會大大降 低FLASH的使用壽命。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種科學(xué)合理、操作簡便且能有效 降低FLASH存儲器擦寫次數(shù)、提高FLASH存儲器使用壽命的FLASH存儲器的數(shù)據(jù)存儲方法。本發(fā)明采取的技術(shù)方案是一種FLASH存儲器的數(shù)據(jù)存儲方法,其特征在于包括以下步驟(1)在FLASH中分配N個扇區(qū)為存儲扇區(qū),將每個扇區(qū)等分為多個數(shù)據(jù)存儲塊,每 個扇區(qū)中的標(biāo)識數(shù)據(jù)存儲塊中的內(nèi)容均為數(shù)據(jù)為空標(biāo)識;(2)將需要寫入數(shù)據(jù)的扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊的數(shù)據(jù)為空標(biāo)識變?yōu)閿?shù)據(jù)有效標(biāo) 識,并順序在其它每個數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù);(3)寫滿一個扇區(qū)后,繼續(xù)向下一個扇區(qū)寫入數(shù)據(jù);(4)重復(fù)步驟O) (3),直至寫滿第N-I個扇區(qū),當(dāng)向最后一個空扇區(qū)內(nèi)寫入數(shù) 據(jù)時,采用如下步驟①在最后一個空扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊內(nèi)寫入備份標(biāo)識;②讀取當(dāng)前的最早寫入扇區(qū)內(nèi)的有效數(shù)據(jù),并將該數(shù)據(jù)寫入最后一個空扇區(qū)內(nèi);③擦除當(dāng)前的最早寫入扇區(qū)內(nèi)的所有數(shù)據(jù)并在標(biāo)識數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù)為空 標(biāo)識;④將已存儲數(shù)據(jù)的原最后一個空扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊內(nèi)由備份標(biāo)識變?yōu)閿?shù)據(jù) 有效標(biāo)識并繼續(xù)向該扇區(qū)內(nèi)寫入數(shù)據(jù);⑤當(dāng)該扇區(qū)寫滿后,重復(fù)步驟① ④,不斷更新各扇區(qū)內(nèi)的數(shù)據(jù),實(shí)現(xiàn)FLASH存儲器的數(shù)據(jù)存儲。而且,所述步驟(1)中的N個扇區(qū)為連續(xù)或者不連續(xù)的扇區(qū)。而且,所述標(biāo)識數(shù)據(jù)存儲塊為每個扇區(qū)中的第一數(shù)據(jù)存儲塊或者最后一個數(shù)據(jù)存 儲塊。而且,所述步驟(1)中的扇區(qū)內(nèi)的每個數(shù)據(jù)存儲塊的大小相同且除了標(biāo)識數(shù)據(jù)存 儲塊以外的其它數(shù)據(jù)存儲塊均被劃分為索引區(qū)和數(shù)據(jù)區(qū),在每個數(shù)據(jù)存儲塊寫入數(shù)據(jù)的方 法是將數(shù)據(jù)的索引號寫入該數(shù)據(jù)存儲塊的索引區(qū),將數(shù)據(jù)寫入該數(shù)據(jù)存儲塊的數(shù)據(jù)區(qū)。而且,所述步驟的第②步中讀取當(dāng)前的最早寫入扇區(qū)內(nèi)的有效數(shù)據(jù)的方法 是讀取該扇區(qū)內(nèi)的所有數(shù)據(jù),比較各數(shù)據(jù)的索引號,相同索引號的數(shù)據(jù)以最后一次寫入的 數(shù)據(jù)為有效,其它丟棄,然后再將篩選后數(shù)據(jù)的索引號與其它扇區(qū)內(nèi)的數(shù)據(jù)比較,以最后一 次寫入的數(shù)據(jù)為有效,其它丟棄。本發(fā)明的優(yōu)點(diǎn)和積極效果是本發(fā)明在多個扇區(qū)中順序?qū)懭霐?shù)據(jù),修改數(shù)據(jù)時只是繼續(xù)增加并自動識別相同索 引號的最后一次寫入的數(shù)據(jù)為有效,其它無效,只有在剩余一個空扇區(qū)的時候才會擦出當(dāng) 前的最早寫入數(shù)據(jù)的扇區(qū),可見數(shù)據(jù)存儲時使用越多的扇區(qū),對FLASH的擦寫越少。在頻繁 修改某幾個數(shù)據(jù)時,只需要寫入數(shù)據(jù),不用重復(fù)的擦寫某個扇區(qū),大大降低了 FLASH的擦寫 次數(shù),提高了 FLASH的壽命。其中數(shù)據(jù)存儲塊的大小和扇區(qū)的個數(shù)可根據(jù)數(shù)據(jù)的大小和修 改頻率來定義,也可把FLASH分為不同區(qū)域,每個區(qū)域采用不同的塊大小和扇區(qū)個數(shù)來存 儲數(shù)據(jù),而且在操作FLASH的任一時刻,由于斷電等情況導(dǎo)致的異常終止都不會丟失數(shù)據(jù)。
具體實(shí)施例方式下面結(jié)合實(shí)施例,對本發(fā)明進(jìn)一步說明,下述實(shí)施例是說明性的,不是限定性的, 不能以下述實(shí)施例來限定本發(fā)明的保護(hù)范圍。一種FLASH存儲器的數(shù)據(jù)存儲方法,包括以下步驟(1)在FLASH中分配N個扇區(qū)為存儲扇區(qū),將每個扇區(qū)等分為多個數(shù)據(jù)存儲塊,每 個扇區(qū)中的標(biāo)識數(shù)據(jù)存儲塊中的內(nèi)容均為數(shù)據(jù)為空標(biāo)識;步驟(1)中的N個扇區(qū)可以是連續(xù)的,也可以是不連續(xù)的。當(dāng)為不連續(xù)的扇區(qū)時, 可以根據(jù)扇區(qū)的起始地址以及偏移量來計(jì)算,通過常規(guī)的計(jì)算機(jī)算法即可實(shí)現(xiàn)每個扇區(qū)的 定位。步驟(1)中的扇區(qū)內(nèi)的每個數(shù)據(jù)存儲塊的大小相同且除了標(biāo)識數(shù)據(jù)存儲塊以外 的其它數(shù)據(jù)存儲塊均被劃分為索引區(qū)和數(shù)據(jù)區(qū),在每個數(shù)據(jù)存儲塊寫入數(shù)據(jù)的方法是首 先將數(shù)據(jù)寫入該數(shù)據(jù)存儲塊的數(shù)據(jù)區(qū),再將數(shù)據(jù)的索引號寫入該數(shù)據(jù)存儲塊的索引區(qū)。如 果寫入索引號后芯片斷電,數(shù)據(jù)還沒寫入,再上電后就不知道數(shù)據(jù)是不是真實(shí)的。而后寫 入索引號的好處是寫入數(shù)據(jù)時或?qū)懭霐?shù)據(jù)后沒寫索引時芯片斷電,索引號的所有位均為 “1” (即扇區(qū)被擦除時的默認(rèn)值),表示這個數(shù)據(jù)存儲塊內(nèi)的數(shù)據(jù)無效。(2)將需要寫入數(shù)據(jù)的扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊的數(shù)據(jù)為空標(biāo)識變?yōu)閿?shù)據(jù)有效標(biāo) 識,并順序在其它每個數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù);(3)寫滿一個扇區(qū)后,繼續(xù)向下一個扇區(qū)寫入數(shù)據(jù);(4)重復(fù)步驟O) (3),直至寫滿第N-I個扇區(qū),當(dāng)向最后一個空扇區(qū)內(nèi)寫入數(shù)據(jù)時,采用如下步驟①在最后一個空扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊內(nèi)寫入備份標(biāo)識;②讀取當(dāng)前的最早寫入扇區(qū)內(nèi)的有效數(shù)據(jù),并將該數(shù)據(jù)寫入最后一個空扇區(qū)內(nèi);③擦除當(dāng)前的最早寫入扇區(qū)內(nèi)的所有數(shù)據(jù)并在標(biāo)識數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù)為空 標(biāo)識;④將已存儲數(shù)據(jù)的原最后一個空扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊內(nèi)由備份標(biāo)識變?yōu)閿?shù)據(jù) 有效標(biāo)識并繼續(xù)向該扇區(qū)內(nèi)寫入數(shù)據(jù);⑤當(dāng)該扇區(qū)寫滿后,重復(fù)步驟① ④,不斷更新各扇區(qū)內(nèi)的數(shù)據(jù),實(shí)現(xiàn)FLASH存儲 器的數(shù)據(jù)存儲。步驟的第②步中讀取當(dāng)前的最早寫入扇區(qū)內(nèi)的有效數(shù)據(jù)的方法是讀取該扇 區(qū)內(nèi)的所有數(shù)據(jù),比較各數(shù)據(jù)的索引號,相同索引號的數(shù)據(jù)以最后一次寫入的數(shù)據(jù)為有效, 其它丟棄,然后再將篩選后數(shù)據(jù)的索引號與其它扇區(qū)內(nèi)的數(shù)據(jù)比較,以最后一次寫入的數(shù) 據(jù)為有效,其它丟棄。上述各步驟中的標(biāo)識數(shù)據(jù)存儲塊為每個扇區(qū)中的第一數(shù)據(jù)存儲塊或者最后一個 數(shù)據(jù)存儲塊。應(yīng)用實(shí)施例云臺攝像機(jī)監(jiān)控時,要記錄用戶設(shè)置的云臺預(yù)置位,一般要存儲1 個預(yù)置點(diǎn)(1 至1 ),存儲時每個預(yù)置位存儲為一塊,預(yù)置位號作為索引號(兩字節(jié)),數(shù)據(jù)區(qū)存儲預(yù)置 位的數(shù)據(jù),分別為水平位置(兩字節(jié)),垂直位置(兩字節(jié)),攝像機(jī)變倍(兩字節(jié)),由此可 知每個扇區(qū)內(nèi)的數(shù)據(jù)存儲塊的大小為八字節(jié),所有扇區(qū)內(nèi)的所有數(shù)據(jù)存儲塊中的索引號所 占字節(jié)以及數(shù)據(jù)所占字節(jié)均相同。其結(jié)構(gòu)見表1:
權(quán)利要求
1.一種FLASH存儲器的數(shù)據(jù)存儲方法,其特征在于包括以下步驟(1)在FLASH中分配N個扇區(qū)為存儲扇區(qū),將每個扇區(qū)等分為多個數(shù)據(jù)存儲塊,每個扇 區(qū)中的標(biāo)識數(shù)據(jù)存儲塊中的內(nèi)容均為數(shù)據(jù)為空標(biāo)識;(2)將需要寫入數(shù)據(jù)的扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊的數(shù)據(jù)為空標(biāo)識變?yōu)閿?shù)據(jù)有效標(biāo)識,并 順序在其它每個數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù);(3)寫滿一個扇區(qū)后,繼續(xù)向下一個扇區(qū)寫入數(shù)據(jù);(4)重復(fù)步驟(2) (3),直至寫滿第N-I個扇區(qū),當(dāng)向最后一個空扇區(qū)內(nèi)寫入數(shù)據(jù)時, 采用如下步驟①在最后一個空扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊內(nèi)寫入備份標(biāo)識;②讀取當(dāng)前的最早寫入扇區(qū)內(nèi)的有效數(shù)據(jù),并將該數(shù)據(jù)寫入最后一個空扇區(qū)內(nèi);③擦除當(dāng)前的最早寫入扇區(qū)內(nèi)的所有數(shù)據(jù)并在標(biāo)識數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù)為空標(biāo)識;④將已存儲數(shù)據(jù)的原最后一個空扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊內(nèi)由備份標(biāo)識變?yōu)閿?shù)據(jù)有效 標(biāo)識并繼續(xù)向該扇區(qū)內(nèi)寫入數(shù)據(jù);⑤當(dāng)該扇區(qū)寫滿后,重復(fù)步驟① ④,不斷更新各扇區(qū)內(nèi)的數(shù)據(jù),實(shí)現(xiàn)FLASH存儲器的 數(shù)據(jù)存儲。
2.根據(jù)權(quán)利要求1所述的一種FLASH存儲器的數(shù)據(jù)存儲方法,其特征在于所述步驟 (1)中的N個扇區(qū)為連續(xù)或者不連續(xù)的扇區(qū)。
3.根據(jù)權(quán)利要求1所述的一種FLASH存儲器的數(shù)據(jù)存儲方法,其特征在于所述標(biāo)識 數(shù)據(jù)存儲塊為每個扇區(qū)中的第一數(shù)據(jù)存儲塊或者最后一個數(shù)據(jù)存儲塊。
4.根據(jù)權(quán)利要求1所述的一種FLASH存儲器的數(shù)據(jù)存儲方法,其特征在于所述步驟 (1)中的扇區(qū)內(nèi)的每個數(shù)據(jù)存儲塊的大小相同且除了標(biāo)識數(shù)據(jù)存儲塊以外的其它數(shù)據(jù)存儲 塊均被劃分為索引區(qū)和數(shù)據(jù)區(qū),在每個數(shù)據(jù)存儲塊寫入數(shù)據(jù)的方法是將數(shù)據(jù)的索引號寫 入該數(shù)據(jù)存儲塊的索引區(qū),將數(shù)據(jù)寫入該數(shù)據(jù)存儲塊的數(shù)據(jù)區(qū)。
5.根據(jù)權(quán)利要求1所述的一種FLASH存儲器的數(shù)據(jù)存儲方法,其特征在于所述步驟 (4)的第②步中讀取當(dāng)前的最早寫入扇區(qū)內(nèi)的有效數(shù)據(jù)的方法是讀取該扇區(qū)內(nèi)的所有數(shù) 據(jù),比較各數(shù)據(jù)的索引號,相同索引號的數(shù)據(jù)以最后一次寫入的數(shù)據(jù)為有效,其它丟棄,然 后再將篩選后數(shù)據(jù)的索引號與其它扇區(qū)內(nèi)的數(shù)據(jù)比較,以最后一次寫入的數(shù)據(jù)為有效,其 它丟棄。
全文摘要
本發(fā)明涉及一種FLASH存儲器的數(shù)據(jù)存儲方法,包括以下步驟(1)在FLASH中分配N個扇區(qū)為存儲扇區(qū),將每個扇區(qū)等分為多個數(shù)據(jù)存儲塊,在每個扇區(qū)中的標(biāo)識數(shù)據(jù)存儲塊中寫入數(shù)據(jù)為空標(biāo)識;(2)將需要寫入數(shù)據(jù)的扇區(qū)的標(biāo)識數(shù)據(jù)存儲塊的數(shù)據(jù)為空標(biāo)識變?yōu)閿?shù)據(jù)有效標(biāo)識,并順序在其它每個數(shù)據(jù)存儲塊內(nèi)寫入數(shù)據(jù);(3)寫滿一個扇區(qū)后,繼續(xù)向下一個扇區(qū)寫入數(shù)據(jù);(4)重復(fù)步驟(2)~(3),直至寫滿第N-1個扇區(qū)。本發(fā)明在多個扇區(qū)中順序?qū)懭霐?shù)據(jù),修改數(shù)據(jù)時只是繼續(xù)增加并自動識別相同索引號的最后一次寫入的數(shù)據(jù)為有效,其它無效,只有在剩余一個空扇區(qū)的時候才會擦出當(dāng)前的最早寫入數(shù)據(jù)的扇區(qū),大大降低了FLASH的擦寫次數(shù),提高了FLASH的壽命。
文檔編號G06F12/02GK102063379SQ20101060953
公開日2011年5月18日 申請日期2010年12月28日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者張鵬 申請人:天津市亞安科技電子有限公司