專利名稱:一種實現(xiàn)flash芯片數(shù)據(jù)安全的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,特別是涉及一種在對物理扇區(qū)與邏輯扇區(qū)大小不一致的FLASH芯片進行寫操作時實現(xiàn)數(shù)據(jù)安全的方法。
背景技術(shù):
FLASH芯片是一種常用的在掉電情況下依然能夠保存數(shù)據(jù)的存儲芯片,在嵌入式系統(tǒng)中應(yīng)用得非常廣泛。FLASH在物理介質(zhì)上一般都是分扇區(qū)的,對FLASH的寫操作都是以扇區(qū)為單位并且需要先擦除整個扇區(qū),然后才能進行寫操作,即,假設(shè)用戶只需要寫一個字節(jié),也需要對整個扇區(qū)進行先擦后寫的操作。對FLASH的寫操作的步驟一般為首先獲得目的地址所在扇區(qū)的數(shù)據(jù),然后把扇區(qū)中目的區(qū)域的數(shù)據(jù)用待寫的數(shù)據(jù)替代,這樣就整合了老的數(shù)據(jù)和待寫的數(shù)據(jù),最后把整合后的數(shù)據(jù)再寫入到FLASH。
上層(指應(yīng)用層)應(yīng)用對FLASH操作的最小單位稱之為邏輯扇區(qū),比如,邏輯扇區(qū)定為1K,那么即使你只需要存儲一個字節(jié)的數(shù)據(jù),也需要占用1K的空間。由于FLASH的存儲容量一般較小,而物理扇區(qū)一般較大,如果邏輯扇區(qū)定義為和物理扇區(qū)一樣大,就將使得FLASH的利用率過低。比如,F(xiàn)LASH的容量為512K,物理扇區(qū)為8K,如果邏輯扇區(qū)也定義為8K,那么該FLASH最大只能存放512K/8K=64個信息塊,即,應(yīng)用最多能夠操作64個信息塊,這很顯然浪費了許多FLASH的空間,為了解決這個問題,可以將邏輯扇區(qū)定義的小一點,比如1K,那么應(yīng)用就能操作512個信息塊了,因此一般在應(yīng)用中邏輯扇區(qū)都定義得比物理扇區(qū)小。
由于FLASH的讀寫數(shù)據(jù)較慢,而且是進行先擦后寫的操作,因此如果在寫的過程中發(fā)生掉電等異常,可能破壞了原來的數(shù)據(jù),如果信息塊較大,跨越了幾個物理扇區(qū)時,可能部分丟失某個扇區(qū)的數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,用于解決在系統(tǒng)出現(xiàn)掉電等異常情況時無法恢復(fù)物理扇區(qū)與邏輯扇區(qū)大小不一致的FLASH芯片數(shù)據(jù)的問題。
為了實現(xiàn)上述目的,本發(fā)明提供了一種實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,包括步驟一,將FLASH芯片劃分為用于存放有效標(biāo)志結(jié)構(gòu)的標(biāo)志區(qū)、備用區(qū)和主用區(qū),該有效標(biāo)志結(jié)構(gòu)包含主用區(qū)有效標(biāo)志字段、主用區(qū)地址字段、數(shù)據(jù)長度字段和備用區(qū)有效標(biāo)志字段;步驟二,將所述主用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述備用區(qū),并改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置;及步驟三,將所述備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述主用區(qū),并改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述步驟一中,所述備用區(qū)有效標(biāo)志字段為所述有效標(biāo)志結(jié)構(gòu)的最后一個字段。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述步驟二中,還包括一備份所述主用區(qū)數(shù)據(jù)所在扇區(qū)數(shù)據(jù)的步驟,具體為備份從所述主用區(qū)扇區(qū)的開始到所述主用區(qū)扇區(qū)的結(jié)束區(qū)域內(nèi)的數(shù)據(jù)。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述步驟二中的改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置步驟具體為將所述主用區(qū)有效標(biāo)志字段填無效,所述主用區(qū)地址字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述數(shù)據(jù)長度字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述備用區(qū)有效標(biāo)志字段填有效。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,在所述步驟三之前還包括一判斷所述主用區(qū)有效標(biāo)志字段是否為無效的步驟。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,當(dāng)所述主用區(qū)有效標(biāo)志字段為無效時,還包括一判斷所述備用區(qū)有效標(biāo)志字段是否為有效的步驟,若為有效,則繼續(xù)所述步驟三。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述步驟三中,還包括一對所述主用區(qū)進行先擦除后寫入的步驟。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述步驟三中的將所述備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述主用區(qū)的步驟又包括獲取要寫入數(shù)據(jù)至所述主用區(qū)的地址所在的扇區(qū)的數(shù)據(jù);將該主用區(qū)的地址區(qū)域的數(shù)據(jù)替代為所述備用區(qū)中的數(shù)據(jù),生成整合數(shù)據(jù);寫入所述整合數(shù)據(jù)至所述主用區(qū)。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述步驟三中的改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置步驟具體為將所述主用區(qū)有效標(biāo)志字段填有效,所述主用區(qū)地址字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述數(shù)據(jù)長度字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述備用區(qū)有效標(biāo)志字段填無效。
所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其中,所述標(biāo)志區(qū)為一個或多個物理扇區(qū)。
本發(fā)明是一種能夠有效保證FLASH芯片數(shù)據(jù)安全的方法,該方法克服了現(xiàn)有技術(shù)對FLASH寫操作存在的數(shù)據(jù)破壞的缺點,使得系統(tǒng)在出現(xiàn)掉電等異常情況時仍可恢復(fù)FLASH的數(shù)據(jù)。
以下結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述,但不作為對本發(fā)明的限定。
圖1為寫FLASH芯片前的主用區(qū)的數(shù)據(jù)示意圖;圖2為寫主用區(qū)扇區(qū)掉電時的主用區(qū)的數(shù)據(jù)示意圖;圖3為寫主用區(qū)扇區(qū)掉電時的備用區(qū)的數(shù)據(jù)示意圖;圖4為寫主用區(qū)扇區(qū)掉電恢復(fù)后的主用區(qū)的數(shù)據(jù)示意圖;圖5為本發(fā)明操作FLASH芯片前備份主用區(qū)所有數(shù)據(jù)后的備用區(qū)的數(shù)據(jù)示意圖;圖6為本發(fā)明實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法流程示意圖;圖7為本發(fā)明實現(xiàn)數(shù)據(jù)安全性算法的流程示意圖;
圖8為本發(fā)明當(dāng)發(fā)生異常時實現(xiàn)數(shù)據(jù)恢復(fù)的流程示意圖。
具體實施例方式
請參閱圖6所示,為本發(fā)明實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法流程示意圖,并結(jié)合圖1-圖5。圖1描述了寫FLASH芯片前的主用區(qū)的數(shù)據(jù);圖2描述了寫主用區(qū)扇區(qū)掉電時的主用區(qū)的數(shù)據(jù);圖3描述了寫主用區(qū)扇區(qū)掉電時的備用區(qū)的數(shù)據(jù);圖4描述了寫主用區(qū)扇區(qū)掉電恢復(fù)后的主用區(qū)的數(shù)據(jù);圖5描述了本發(fā)明操作FLASH芯片前備份主用區(qū)所有數(shù)據(jù)后的備用區(qū)的數(shù)據(jù)。本發(fā)明的方法流程具體包括如下步驟步驟601,將FLASH劃分為標(biāo)志區(qū)、備用區(qū)和主用區(qū);具體地,在FLASH中留出一個或多個物理扇區(qū)來存放有效標(biāo)志結(jié)構(gòu),該物理扇區(qū)可稱為標(biāo)志區(qū);留出一個足夠大的區(qū)域作為備用區(qū);剩下的區(qū)域作為主用區(qū)。
劃出一個或多個扇區(qū)來保存有效標(biāo)志結(jié)構(gòu)的原因在于如果將有效標(biāo)志和數(shù)據(jù)放在同一個物理扇區(qū)中,當(dāng)發(fā)生掉電等異常時候為剛寫完有效標(biāo)志結(jié)構(gòu)時,將會導(dǎo)致數(shù)據(jù)不能恢復(fù)或恢復(fù)錯誤。因為此時有效標(biāo)志是正常的,而數(shù)據(jù)是破壞的,這樣在恢復(fù)數(shù)據(jù)時將導(dǎo)致恢復(fù)錯誤的數(shù)據(jù)。
有效標(biāo)志結(jié)構(gòu)包含主用區(qū)有效標(biāo)志、主用區(qū)地址、數(shù)據(jù)長度和備用區(qū)有效標(biāo)志等幾個字段。
其中“備用區(qū)有效標(biāo)志”字段是有效標(biāo)志結(jié)構(gòu)的最后一個字段,這樣設(shè)置避免了當(dāng)在寫備用區(qū)的有效標(biāo)志結(jié)構(gòu)時發(fā)生掉電等異常時導(dǎo)致數(shù)據(jù)恢復(fù)的錯誤。如果“備用區(qū)有效標(biāo)志”字段不是有效標(biāo)志結(jié)構(gòu)的最后一個字段,假如最后一個字段是“數(shù)據(jù)長度”字段,那么當(dāng)?shù)綦姲l(fā)生在剛剛寫完“備用區(qū)有效標(biāo)志”字段時,此時“備用區(qū)有效標(biāo)志”字段有效,但“數(shù)據(jù)長度”字段是非法值,這將導(dǎo)致數(shù)據(jù)恢復(fù)錯誤。
其中,當(dāng)主用區(qū)的數(shù)據(jù)出現(xiàn)異常時,此時就需要通過備用區(qū)的數(shù)據(jù)來恢復(fù)主用區(qū)的數(shù)據(jù),通過字段主用區(qū)地址可確定主用區(qū)的地址;字段數(shù)據(jù)長度則用于確定主用區(qū)需要恢復(fù)的數(shù)據(jù)的長度。
步驟602,將數(shù)據(jù)寫入備用區(qū),即,將主用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入備用區(qū);備用區(qū)的數(shù)據(jù)是主用區(qū)數(shù)據(jù)所在扇區(qū)的所有數(shù)據(jù),而不僅僅是備份待寫入的數(shù)據(jù),從而避免掉電時數(shù)據(jù)不能完全恢復(fù)。
備用區(qū)的數(shù)據(jù)為備份主用區(qū)數(shù)據(jù)所在扇區(qū)的所有數(shù)據(jù)。假設(shè)主用區(qū)扇區(qū)的當(dāng)前的數(shù)據(jù)如圖1所示,若要改寫的數(shù)據(jù)是數(shù)據(jù)1,如果僅僅是備份了數(shù)據(jù)1,而數(shù)據(jù)2沒有備份,如果剛好擦除了主用區(qū)扇區(qū)時就發(fā)生了掉電,此時主用區(qū)的數(shù)據(jù)為全無效,主用區(qū)的數(shù)據(jù)如圖2所示,但因只備份了數(shù)據(jù)1,而沒有備份數(shù)據(jù)2,備用區(qū)的數(shù)據(jù)如圖3所示,如果需要數(shù)據(jù)恢復(fù)就只能恢復(fù)數(shù)據(jù)1,恢復(fù)后的主用區(qū)的數(shù)據(jù)如圖4所示,丟失了數(shù)據(jù)2,而這是不允許的。如果在備用區(qū)備份了主用區(qū)扇區(qū)的所有數(shù)據(jù)就可以避免上述問題。
備份主用區(qū)扇區(qū)的所有數(shù)據(jù)后的備用區(qū)如圖5所示,如果發(fā)生掉電能夠恢復(fù)所有的數(shù)據(jù)。備份主用區(qū)所在扇區(qū)的所有數(shù)據(jù)的方法是備份從主用區(qū)扇區(qū)的開始到主用區(qū)扇區(qū)的結(jié)束的區(qū)域內(nèi)的所有數(shù)據(jù)。
步驟603,改寫有效標(biāo)志結(jié)構(gòu),將“主用區(qū)有效標(biāo)志”字段填無效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填有效。
在每次對FLASH進行操作或系統(tǒng)復(fù)位的時候都要判斷該有效標(biāo)志結(jié)構(gòu),如果備用區(qū)有效,則把備用區(qū)的數(shù)據(jù)恢復(fù)到主用區(qū)。
a)在系統(tǒng)重啟初始化時要檢測所有的備用區(qū)是否有效,如果有效,就把備用區(qū)的數(shù)據(jù)回寫到主用區(qū),同時把備用區(qū)置為無效。
b)在每次寫FLASH的時候都要檢測備用區(qū)是否有效,如果有效,就把備用區(qū)的數(shù)據(jù)回寫到主用區(qū)。
經(jīng)過上面的操作能夠保證每次在對FLASH操作前,F(xiàn)LASH的數(shù)據(jù)都是有效的。
步驟604,將數(shù)據(jù)寫入主用區(qū),即,將備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入主用區(qū);該步驟具體為首先獲得目的地址所在的扇區(qū)的數(shù)據(jù),該目的地址為要寫入數(shù)據(jù)的主用區(qū)的地址;然后把主用區(qū)扇區(qū)中待寫入的目的地址區(qū)域的數(shù)據(jù)用待寫的數(shù)據(jù)替代,這樣就整合了老的數(shù)據(jù)和待寫的數(shù)據(jù),生成整合數(shù)據(jù),最后把整合數(shù)據(jù)再寫入到FLASH的主用區(qū)。
步驟605,改寫有效標(biāo)志結(jié)構(gòu),將“主用區(qū)有效標(biāo)志”字段填有效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填無效。
如果步驟605成功完成,那么就結(jié)束了FLASH芯片的本次寫操作。
采用以上步驟,有效保證了FLASH芯片的數(shù)據(jù)安全性,使得在出現(xiàn)掉電等異常時FLASH的數(shù)據(jù)仍是有效的或者數(shù)據(jù)可恢復(fù)的;在上述任一步驟發(fā)生掉電等異常情況時,數(shù)據(jù)都是可恢復(fù)的。若掉電等異常情況發(fā)生在步驟602,那么這時備用區(qū)的數(shù)據(jù)是無效的,有效標(biāo)志結(jié)構(gòu)的“主用區(qū)有效標(biāo)志”字段仍然是有效,即以主用區(qū)的數(shù)據(jù)為準(zhǔn),主用區(qū)的數(shù)據(jù)是有效的;若掉電等異常情況發(fā)生在步驟603,那么這時備用區(qū)的數(shù)據(jù)是有效的,有效標(biāo)志結(jié)構(gòu)的“主用區(qū)有效標(biāo)志”字段仍然是有效,主用區(qū)的數(shù)據(jù)是有效的;若掉電等異常情況發(fā)生在步驟604,那么這時備用區(qū)的數(shù)據(jù)是有效的,有效標(biāo)志結(jié)構(gòu)的“主用區(qū)有效標(biāo)志”字段為無效,“備用區(qū)有效標(biāo)志”字段置為有效,即以備用區(qū)的數(shù)據(jù)為準(zhǔn),數(shù)據(jù)恢復(fù)后主用區(qū)的數(shù)據(jù)是有效的。
請參閱圖7所示,為本發(fā)明實現(xiàn)數(shù)據(jù)安全性算法的流程示意圖;結(jié)合圖6,該算法流程具體包括如下步驟步驟701,開始;步驟702,把數(shù)據(jù)寫入備用區(qū),即,將主用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入備用區(qū);步驟703,改寫有效標(biāo)志結(jié)構(gòu),“主用區(qū)有效標(biāo)志”字段填無效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填有效;步驟704,把數(shù)據(jù)寫入主用區(qū),即,將備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入主用區(qū);步驟705,改寫有效標(biāo)志結(jié)構(gòu),“主用區(qū)有效標(biāo)志”字段填有效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填無效;步驟706,結(jié)束。
請參閱圖8所示,為本發(fā)明當(dāng)發(fā)生異常時實現(xiàn)數(shù)據(jù)恢復(fù)的流程示意圖。結(jié)合圖6,該流程具體包括如下步驟步驟801,開始;步驟802,判斷“主用區(qū)有效標(biāo)志”字段是否為無效,若無效,繼續(xù)步驟803,若有效,轉(zhuǎn)至步驟806;步驟803,判斷“備用區(qū)有效標(biāo)志”字段是否為有效,若有效,繼續(xù)步驟804,若無效,轉(zhuǎn)至步驟806;步驟804,把數(shù)據(jù)回寫到主用區(qū),即,將備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入主用區(qū);步驟805,修改有效標(biāo)志結(jié)構(gòu),“主用區(qū)有效標(biāo)志”字段填有效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填無效;步驟806,結(jié)束。
下面以傳輸設(shè)備中系統(tǒng)應(yīng)用部分對FLASH芯片的寫操作來對本發(fā)明作進一步的詳細說明。
從網(wǎng)管上對傳輸設(shè)備的一些設(shè)置參數(shù)一般保存在FLASH芯片中,假設(shè)保存這些設(shè)置參數(shù)的FLASH芯片為512K,物理扇區(qū)為4K,邏輯扇區(qū)為256個字節(jié)。在一個物理扇區(qū)內(nèi)存在2種設(shè)置參數(shù)的信息,分別分布在不同的邏輯扇區(qū)內(nèi)。假設(shè)這2個設(shè)置參數(shù)分別是“設(shè)置同步定時源”和“設(shè)置外時鐘位置”。并假設(shè)當(dāng)前進行的是“設(shè)置同步定時源”操作。對FLASH芯片的寫操作實現(xiàn)的過程具體如下(1),先將數(shù)據(jù)寫到備用區(qū)(即將主用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入備用區(qū)),備用區(qū)的數(shù)據(jù)是主用區(qū)數(shù)據(jù)所在扇區(qū)的所有數(shù)據(jù)。
當(dāng)系統(tǒng)收到網(wǎng)管的“設(shè)置同步定時源”命令時,需要把設(shè)置的數(shù)據(jù)保存到FLASH。這時備用區(qū)備份了“設(shè)置同步定時源”和“設(shè)置外時鐘位置”兩個命令的設(shè)置參數(shù),如果這時發(fā)生異常,異?;謴?fù)后數(shù)據(jù)以主用區(qū)的數(shù)據(jù)為準(zhǔn),不會發(fā)生數(shù)據(jù)異常。
(2),改寫有效標(biāo)志結(jié)構(gòu),將“主用區(qū)有效標(biāo)志”字段填無效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填有效。
這時備用區(qū)已經(jīng)成功的備份了主用區(qū)的“設(shè)置同步定時源”和“設(shè)置外時鐘位置”兩個命令的設(shè)置參數(shù),如果這時發(fā)生異常,異?;謴?fù)后數(shù)據(jù)以主用區(qū)的數(shù)據(jù)為準(zhǔn),因為還沒有對主用區(qū)數(shù)據(jù)進行操作,所以不會發(fā)生數(shù)據(jù)異常。
(3),將數(shù)據(jù)寫入到主用區(qū)(即將備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入主用區(qū))。
這時對主用區(qū)進行操作先擦除后寫入。如果這時發(fā)生異常,主用區(qū)的“設(shè)置同步定時源”和“設(shè)置外時鐘位置”兩個命令的設(shè)置參數(shù)可能都是錯誤的數(shù)據(jù),有效標(biāo)志結(jié)構(gòu)中的“備用區(qū)有效標(biāo)志”字段已經(jīng)設(shè)置為有效,所以異?;謴?fù)后數(shù)據(jù)以備用區(qū)的數(shù)據(jù)為準(zhǔn),并把備用區(qū)數(shù)據(jù)恢復(fù)到主用區(qū),因為備用區(qū)把主用區(qū)的所有數(shù)據(jù)都進行了備份,所以不會發(fā)生數(shù)據(jù)異常。
(4),改寫有效標(biāo)志結(jié)構(gòu),將“主用區(qū)有效標(biāo)志”字段填有效,“主用區(qū)地址”字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“數(shù)據(jù)長度”字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,“備用區(qū)有效標(biāo)志”字段填無效。
如果這時發(fā)生異常,主用區(qū)的“設(shè)置同步定時源”和“設(shè)置外時鐘位置”兩個命令的設(shè)置參數(shù)已經(jīng)是正常的數(shù)據(jù),不會發(fā)生數(shù)據(jù)異常。
完成上述過程后,在上述任何一步中系統(tǒng)發(fā)生異常,數(shù)據(jù)都是可以恢復(fù)的,從而實現(xiàn)了當(dāng)FLASH的物理扇區(qū)和邏輯扇區(qū)不一致時也能保證數(shù)據(jù)是安全的目的。
當(dāng)然,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。
權(quán)利要求
1.一種實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,包括步驟一,將FLASH芯片劃分為用于存放有效標(biāo)志結(jié)構(gòu)的標(biāo)志區(qū)、備用區(qū)和主用區(qū),該有效標(biāo)志結(jié)構(gòu)包含主用區(qū)有效標(biāo)志字段、主用區(qū)地址字段、數(shù)據(jù)長度字段和備用區(qū)有效標(biāo)志字段;步驟二,將所述主用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述備用區(qū),并改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置;及步驟三,將所述備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述主用區(qū),并改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置。
2.根據(jù)權(quán)利要求1所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述步驟一中,所述備用區(qū)有效標(biāo)志字段為所述有效標(biāo)志結(jié)構(gòu)的最后一個字段。
3.根據(jù)權(quán)利要求1所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述步驟二中,還包括一備份所述主用區(qū)數(shù)據(jù)所在扇區(qū)數(shù)據(jù)的步驟,具體為備份從所述主用區(qū)扇區(qū)的開始到所述主用區(qū)扇區(qū)的結(jié)束區(qū)域內(nèi)的數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述步驟二中的改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置步驟具體為將所述主用區(qū)有效標(biāo)志字段填無效,所述主用區(qū)地址字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述數(shù)據(jù)長度字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述備用區(qū)有效標(biāo)志字段填有效。
5.根據(jù)權(quán)利要求1、2、3或4所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,在所述步驟三之前還包括一判斷所述主用區(qū)有效標(biāo)志字段是否為無效的步驟。
6.根據(jù)權(quán)利要求5所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,當(dāng)所述主用區(qū)有效標(biāo)志字段為無效時,還包括一判斷所述備用區(qū)有效標(biāo)志字段是否為有效的步驟,若為有效,則繼續(xù)所述步驟三。
7.根據(jù)權(quán)利要求1、2、3或4所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述步驟三中,還包括一對所述主用區(qū)進行先擦除后寫入的步驟。
8.根據(jù)權(quán)利要求1、2、3或4所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述步驟三中的將所述備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述主用區(qū)的步驟又包括獲取要寫入數(shù)據(jù)至所述主用區(qū)的地址所在的扇區(qū)的數(shù)據(jù);將該主用區(qū)的地址區(qū)域的數(shù)據(jù)替代為所述備用區(qū)中的數(shù)據(jù),生成整合數(shù)據(jù);及寫入所述整合數(shù)據(jù)至所述主用區(qū)。
9.根據(jù)權(quán)利要求1、2、3或4所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述步驟三中的改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置步驟具體為將所述主用區(qū)有效標(biāo)志字段填有效,所述主用區(qū)地址字段填主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述數(shù)據(jù)長度字段填主用區(qū)的數(shù)據(jù)所占的最后一個扇區(qū)的下一個扇區(qū)的起始地址減去主用區(qū)的數(shù)據(jù)所占的第一個扇區(qū)的起始地址,所述備用區(qū)有效標(biāo)志字段填無效。
10.根據(jù)權(quán)利要求1、2、3或4所述的實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,所述標(biāo)志區(qū)為一個或多個物理扇區(qū)。
全文摘要
本發(fā)明公開了一種實現(xiàn)FLASH芯片數(shù)據(jù)安全的方法,其特征在于,包括步驟一,將FLASH芯片劃分為用于存放有效標(biāo)志結(jié)構(gòu)的標(biāo)志區(qū)、備用區(qū)和主用區(qū),該有效標(biāo)志結(jié)構(gòu)包含主用區(qū)有效標(biāo)志字段、主用區(qū)地址字段、數(shù)據(jù)長度字段和備用區(qū)有效標(biāo)志字段;步驟二,將主用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入備用區(qū),并改寫有效標(biāo)志結(jié)構(gòu)的字段設(shè)置;及步驟三,將所述備用區(qū)當(dāng)前的數(shù)據(jù)和待寫的數(shù)據(jù)整合后的數(shù)據(jù)寫入所述主用區(qū),并改寫所述有效標(biāo)志結(jié)構(gòu)的字段設(shè)置。本發(fā)明是一種能夠有效保證FLASH芯片數(shù)據(jù)安全的方法,該方法克服了現(xiàn)有技術(shù)對FLASH寫操作存在的數(shù)據(jù)破壞的缺點,使得系統(tǒng)在出現(xiàn)掉電等異常情況時仍可恢復(fù)FLASH的數(shù)據(jù)。
文檔編號G06F11/14GK101079010SQ200610011998
公開日2007年11月28日 申請日期2006年5月25日 優(yōu)先權(quán)日2006年5月25日
發(fā)明者管冬根, 李小偉 申請人:中興通訊股份有限公司