專利名稱:一種安全燒寫閃存的方法及數(shù)據(jù)寫入方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種內(nèi)存燒寫方法,尤其涉及一種安全燒寫閃存的方法及數(shù) 據(jù)寫入方法。
背景技術(shù):
Flash (閃存)是嵌入式系統(tǒng)中常用的存儲設(shè)備, 一般用來保存掉電不 丟失的數(shù)據(jù),例如bootloader(引導加載程序)、kernel image (內(nèi)核鏡像)、 filesystem (文件系統(tǒng))等。 一般的NAND Flash (與非閃存)在其最前面的 啟動塊中不會有壞塊的,所以在此啟動塊空間可以保存一些不能發(fā)生錯誤的 數(shù)據(jù);而其余的部分,有可能會產(chǎn)生一些壞塊,這跟生產(chǎn)廠家的生產(chǎn)質(zhì)量有 關(guān)。
燒寫NAND Flash的方法^艮多,市場上有很多種NAND Flash燒寫器。 圖1所示的燒寫方式,是指定一個地址,將數(shù)據(jù)整個燒寫進去,并不考慮 Flash內(nèi)部是否有壞塊的情況。如果Flash內(nèi)部有壞塊,將會導致寫入的數(shù)據(jù) 不完整,如果寫入的是kemel image,那么在系統(tǒng)啟動時,系統(tǒng)就無法正常 運行。
如圖2所示,另外一種燒寫方法是用JTAG (Joint Test Action Group, 聯(lián)合測試行動組)口燒寫Flash的時候?qū)⒅匾臄?shù)據(jù)(例如kernel image) 分別燒錄在兩個地址下,相當于做了一個備份,如果一塊出了問題,則從備 份中的對應的塊中讀取數(shù)據(jù)。
上述方法中,很可能出現(xiàn)將數(shù)據(jù)保存在Flash的壞塊上的情況,如果保 存的是操作系統(tǒng)鏡像,則會導致整個系統(tǒng)不能運行
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種安全燒寫閃存的方法,保證數(shù)據(jù)都 寫入閃存中完好的數(shù)據(jù)塊。
為了解決上述問題,本發(fā)明提供了一種安全燒寫閃存的方法,包括將
待寫入數(shù)據(jù)寫入閃存中時,每次將數(shù)據(jù)寫入閃存的一存儲單元后,判斷此存 儲單元是否無壞塊,如果無壞塊,確定此存儲單元為有效存儲單元,否則,
跳過此存儲單元在下一個存儲單元重新寫入數(shù)據(jù);將標識閃存中有效存儲單 元位置的信息做為索引,并將所述索引寫入閃存的啟動塊中。
進一步地,將數(shù)據(jù)寫入所述存儲單元后,根據(jù)系統(tǒng)設(shè)定規(guī)則計算寫入此 存儲單元的數(shù)據(jù)所對應的冗余校驗數(shù)據(jù),并將寫入此存儲單元的數(shù)據(jù)讀出, 根據(jù)所述規(guī)則計算讀出數(shù)據(jù)對應的冗余校驗數(shù)據(jù),判斷兩次計算得到的冗余 數(shù)據(jù)是否相同,如果相同,確定此存儲單元無壞塊,否則,確定此存儲單元 有壞塊。
進一步地,將數(shù)據(jù)寫入閃存后,系統(tǒng)啟動時或啟動后,根據(jù)所述索引中 有效存儲單元位置的信息將各個有效存儲單元中的數(shù)據(jù)讀出,并寫入系統(tǒng)內(nèi) 存;所述有效存儲單元位置的信息是指有效存儲單元的首地址。
進一步地,所述閃存為與非閃存。
進一步地,在與非閃存中寫入數(shù)據(jù)時,每頁分兩次寫入每寫入256字 節(jié)的數(shù)據(jù)后,根據(jù)此256字節(jié)的數(shù)據(jù)計算得到8字節(jié)的冗余校驗數(shù)據(jù),將寫 入的256字節(jié)數(shù)據(jù)讀出,計算讀出的256字節(jié)數(shù)據(jù)對應的8字節(jié)冗余校驗數(shù) 據(jù),判斷兩次計算得到的冗余4t驗數(shù)據(jù)是否相同;如果每頁分兩次寫入時分 別判斷其寫入和讀出的數(shù)據(jù)對應的冗余檢驗數(shù)據(jù)均相同,確定此頁為有效 頁,否則,跳過此頁,在下一頁重新寫該頁的凝^居。
進一步地,所述待寫入數(shù)據(jù)為內(nèi)核鏡像文件數(shù)據(jù)、引導程序可執(zhí)行文件 數(shù)據(jù)或文件系統(tǒng)數(shù)據(jù)。
進一步地,在與非閃存中寫入數(shù)據(jù)時,通過聯(lián)合測試行動組接口或串口 或通用串行總線接口將待寫入數(shù)據(jù)寫入到同步動態(tài)隨機存取存儲器中,再從 所述同步動態(tài)隨機存取存儲器中讀出寫入與非閃存中。本發(fā)明還提供了一種數(shù)據(jù)寫入方法,包括將待寫入數(shù)據(jù)寫入閃存中時, 每次將數(shù)據(jù)寫入閃存的一存儲單元后,判斷此存儲單元是否無壞塊,如果無 壞塊,確定此存儲單元為有效存儲單元,否則,跳過此存儲單元在下一個存 儲單元重新寫入數(shù)據(jù)。
進一步地,將數(shù)據(jù)寫入所述存儲單元后,根據(jù)系統(tǒng)設(shè)定規(guī)則計算寫入此 存儲單元的數(shù)據(jù)所對應的冗余校驗數(shù)據(jù),并將寫入此存儲單元的數(shù)據(jù)讀出, 根據(jù)所述規(guī)則計算讀出數(shù)據(jù)對應的冗余校驗數(shù)據(jù),判斷兩次計算得到的冗余 數(shù)據(jù)是否相同,如果相同,確定此存儲單元無壞塊,否則,確定此存儲單元 有壞塊。
進一步地,在閃存中寫入數(shù)據(jù)時,每頁分兩次寫入每寫入256字節(jié) 的數(shù)據(jù)后,根據(jù)此256字節(jié)的數(shù)據(jù)計算得到8字節(jié)的冗余校驗數(shù)據(jù),將寫入 的256字節(jié)數(shù)據(jù)讀出,計算讀出的256字節(jié)數(shù)據(jù)對應的8字節(jié)冗余校驗數(shù)據(jù), 判斷兩次計算得到的冗余檢驗數(shù)據(jù)是否相同;如果每頁分兩次寫入時判斷其 寫入和讀出的數(shù)據(jù)對應的冗余檢驗數(shù)據(jù)均相同,確定此頁為有效頁,否則, 跳過此頁,在下一頁重新寫該頁的數(shù)據(jù)。
與其他燒寫Flash的方法相比,本發(fā)明的方法可以保證數(shù)據(jù)都寫在完好 的Flash數(shù)據(jù)塊上,保證了數(shù)據(jù)不會因為Flash的質(zhì)量問題而丟失。
圖1是現(xiàn)有技術(shù)中不考慮Flash中有壞塊的燒寫方法示意圖2是現(xiàn)有技術(shù)中考慮Flash有壞塊并只做備份的燒寫方法示意圖3是本發(fā)明的燒寫方法的流程圖4是本發(fā)明中燒寫方法的示意圖。
具體實施例方式
本發(fā)明的方法包括在閃存中寫入數(shù)據(jù)時,每次將數(shù)據(jù)寫入閃存的一存 儲單元后,判斷此存儲單元是否無壞塊,如果無壞塊,確定此存儲單元為有效存儲單元,否則,跳過此存儲單元在下一個存儲單元重新寫入數(shù)據(jù);確定
閃存中各個有效存儲單元的首地址做為索引,并將所述索引寫入閃存的啟動
塊中;上述方法可解決由于NAND Flash質(zhì)量問題導致重要數(shù)據(jù)(尤其是操 作系統(tǒng)鏡像數(shù)據(jù))保存失敗的問題,保證數(shù)據(jù)都寫在完好的Flash數(shù)據(jù)塊上。
如圖3所示,本發(fā)明中燒寫內(nèi)存的方法包括以下步驟
步驟301,將待寫入數(shù)據(jù)寫入閃存中時,每次將數(shù)據(jù)寫入閃存的一存儲 單元后,判斷此存儲單元是否無壞塊,如果無壞塊,確定此存儲單元為有效 存儲單元,否則,跳過此存儲單元在下一個存儲單元重新寫入數(shù)據(jù);
寫入數(shù)據(jù)時,每次將數(shù)據(jù)寫入一存儲單元時,根據(jù)系統(tǒng)設(shè)定規(guī)則計算寫 入此存儲單元的數(shù)據(jù)所對應的冗余校驗數(shù)據(jù),將寫入此存儲單元的數(shù)據(jù)讀 出,并根據(jù)上述系統(tǒng)設(shè)定規(guī)則計算讀出數(shù)據(jù)所對應的冗余數(shù)據(jù),判斷兩次計 算得到的冗余數(shù)據(jù)是否相同,如果相同,則確定段存儲單元為有效存儲單元, 在此存儲單元結(jié)束位置繼續(xù)寫入數(shù)據(jù),否則,跳過此存儲單元,在下一個存 儲單元重新寫入數(shù)據(jù)。
上述存儲單元的大小為512字節(jié),NAND Flash的一個頁(page)為 512+16字節(jié),在NAND Flash中寫入數(shù)據(jù)時,每頁分兩次寫每寫256字 節(jié)的數(shù)據(jù)時,根據(jù)此256字節(jié)的數(shù)據(jù)產(chǎn)生8字節(jié)的冗余校驗數(shù)據(jù),寫入256 字節(jié)數(shù)據(jù)后,將其讀出,同時計算讀出的256字節(jié)數(shù)據(jù)對應的8字節(jié)冗余校 驗數(shù)據(jù),判斷兩次計算得到的冗余檢驗數(shù)據(jù)是否相同,如果每頁分兩次寫入 時判斷其寫入和讀出的數(shù)據(jù)對應的冗余檢驗數(shù)據(jù)均相同,則說明此頁中無壞 塊,否則說明此頁中有壞塊,則跳過此頁,在下一頁重新寫該頁的內(nèi)容。
根據(jù)256字節(jié)的數(shù)據(jù)計算其對應的冗余校驗數(shù)據(jù)的方法很多,此處不再 贅述。
步驟302,將標識閃存中各個有效存儲單元位置的信息做成一個索引, 保存在閃存的啟動塊中。
可以將閃存中各個有效存儲單元的首地址做成索引;
系統(tǒng)啟動時或啟動后,根據(jù)上述索引將Flash中的數(shù)據(jù)從各個存儲單元讀出。
NAND Flash在最開始的啟動塊中沒有壞塊,在NAND Flash中寫入數(shù) 據(jù)時,將所有有效頁的首地址做成一個索引,保存在NAND Flash的啟動塊 中中。
因為無法通過JTAG 口直接將數(shù)據(jù)寫到NAND Flash中,所以可以先將 待寫入的數(shù)據(jù)寫入到系統(tǒng)的SDRAM (同步動態(tài)隨機存取存儲器)中,再將 其寫入到NAND Flash中。待寫入的數(shù)據(jù)可以是內(nèi)核鏡像文件數(shù)據(jù)、引導程 序可執(zhí)行文件數(shù)據(jù)、文件系統(tǒng)數(shù)據(jù),可以將待寫入的數(shù)據(jù)通過JTAG 口或串 口或USB (通用串行總線)接口寫入到系統(tǒng)的SDRAM中。
下面以燒寫內(nèi)核鏡像文件數(shù)據(jù)為例,說明本發(fā)明的方法
步驟1 、將內(nèi)核鏡像文件數(shù)據(jù)通過JTAG 口寫入到SDRAM中;
步驟2 、將內(nèi)核鏡像文件數(shù)據(jù)從SDRAM中寫入NAND Flash中;
在NAND Flash中寫入數(shù)據(jù)時,每頁分兩次寫每寫256字節(jié)的數(shù)據(jù)時, 根據(jù)此256字節(jié)的數(shù)據(jù)產(chǎn)生8字節(jié)的冗余校驗數(shù)據(jù),寫入256字節(jié)數(shù)據(jù)后, 將其讀出,同時計算讀出的256字節(jié)數(shù)據(jù)對應的8字節(jié)冗余校驗數(shù)據(jù),和寫 入時產(chǎn)生的8字節(jié)的冗余檢驗相比較,若相同,則說明Flash中寫入256字 節(jié)的存儲空間良好,判斷此頁為有效頁,否則說明寫入256字節(jié)的存儲空間 中有壞塊,則跳過此頁,在下一頁重新寫該頁的內(nèi)容。
步驟3、將所有有效頁的首地址做成一個索引,保存在Flash的啟動塊 中;系統(tǒng)啟動運行時或啟動后,根據(jù)上述索引將Flash中的數(shù)據(jù)逐頁讀出;
例如,bootloader引導加載程序的首地址為0x00000000;
索引的首:l也址為0x1000;
內(nèi)核4竟^f象存力文的首地址為0x4000。
其中,在NAND Flash中寫入數(shù)據(jù)時,系統(tǒng)運行可l^行程序 writefiletoflash,可執(zhí)行程序writefiletoflash中包括寫Flash函數(shù);讀Flash 函數(shù);比較冗余校驗碼函數(shù);打開文件函數(shù);關(guān)閉文件函數(shù);還包括保存 地址索引的^:組。步驟4、將內(nèi)核鏡像文件數(shù)據(jù)根據(jù)上述方法寫入NAND Flash后,系統(tǒng) 上電啟動時,根據(jù)上述索引將NANDFlash中的數(shù)據(jù)逐頁讀入到內(nèi)存中并完 成系統(tǒng)啟動。
如圖4所示的本發(fā)明中燒寫方法的示意圖中,寫入內(nèi)核鏡像文件數(shù)據(jù) 時,跳過Flash中的壞塊,進行內(nèi)核鏡像文件數(shù)據(jù)的存儲。根據(jù)Flash的有 效頁構(gòu)建的索引位于Flash的啟動塊中。
與其他燒寫NANDFlash的方法相比,雖然燒寫的速度慢,而且需要額 外的空間保存地址索引,但能夠保證數(shù)據(jù)都寫在完好的Flash頁,保證了數(shù) 據(jù)不會因為Flash的質(zhì)量問題而丟失。
上述方法中既適用于軟件操作系統(tǒng)也適用于嵌入式操作系統(tǒng)。
本發(fā)明還提出了一種數(shù)據(jù)寫入方法,包括將待寫入數(shù)據(jù)寫入閃存中時, 每次將數(shù)據(jù)寫入閃存的一存儲單元后,判斷此存儲單元是否無壞塊,如果無 壞塊,確定此存儲單元為有效存儲單元,否則,跳過此存儲單元在下一個存 儲單元重新寫入數(shù)據(jù)。其原理與上述方法同理,此處不再贅述。
本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況 些相應的改變和變形都應屬于本發(fā)明所附的權(quán)利要求的保護范圍。
權(quán)利要求
1、一種安全燒寫閃存的方法,其特征在于,將待寫入數(shù)據(jù)寫入閃存中時,每次將數(shù)據(jù)寫入閃存的一存儲單元后,判斷此存儲單元是否無壞塊,如果無壞塊,確定此存儲單元為有效存儲單元,否則,跳過此存儲單元在下一個存儲單元重新寫入數(shù)據(jù);將標識閃存中有效存儲單元位置的信息做為索引,并將所述索引寫入閃存的啟動塊中。
2、 如權(quán)利要求l所述的方法,其特征在于,將數(shù)據(jù)寫入所述存儲單元后,根據(jù)系統(tǒng)設(shè)定規(guī)則計算寫入此存儲單元的 數(shù)據(jù)所對應的冗余校驗數(shù)據(jù),并將寫入此存儲單元的數(shù)據(jù)讀出,根據(jù)所述規(guī) 則計算讀出數(shù)據(jù)對應的冗余校驗數(shù)據(jù),判斷兩次計算得到的冗余數(shù)據(jù)是否相 同,如果相同,確定此存儲單元無壞塊;否則,確定此存儲單元有壞塊。
3、 如權(quán)利要求1或2所述的方法,其特征在于,將數(shù)據(jù)寫入閃存后,系統(tǒng)啟動時或啟動后,根據(jù)所述索引中有效存儲單 元位置的信息將各個有效存儲單元中的數(shù)據(jù)讀出,并寫入系統(tǒng)內(nèi)存;所述有 效存儲單元位置的信息是指有效存儲單元的首地址。
4、 如權(quán)利要求1或2所述的方法,其特征在于, 所述閃存為與非閃存。
5、 如權(quán)利要求4所述的方法,其特征在于,在與非閃存中寫入數(shù)據(jù)時,每頁分兩次寫入每寫入256字節(jié)的數(shù)據(jù)后, 根據(jù)此256字節(jié)的數(shù)據(jù)計算得到8字節(jié)的冗余校驗數(shù)據(jù),將寫入的256字節(jié) 數(shù)據(jù)讀出,計算讀出的256字節(jié)數(shù)據(jù)對應的8字節(jié)冗余校驗數(shù)據(jù),判斷兩次 計算得到的冗余檢驗數(shù)據(jù)是否相同;如果每頁分兩次寫入時分別判斷其寫入 和讀出的數(shù)據(jù)對應的冗余檢驗數(shù)據(jù)均相同,確定此頁為有效頁;否則,跳過 此頁,在下一頁重新寫該頁的數(shù)據(jù)。
6、 如權(quán)利要求l所述的方法,其特征在于,所述待寫入數(shù)據(jù)為內(nèi)核鏡像文件數(shù)據(jù)、引導程序可執(zhí)行文件數(shù)據(jù)或文件 系統(tǒng)數(shù)據(jù)。
7、 如權(quán)利要求4所述的方法,其特征在于,在與非閃存中寫入數(shù)據(jù)時,通過聯(lián)合測試行動組接口或串口或通用串行 總線接口將待寫入數(shù)據(jù)寫入到同步動態(tài)隨機存取存儲器中,再從所述同步動 態(tài)隨機存取存儲器中讀出寫入與非閃存中。
8、 一種數(shù)據(jù)寫入方法,其特征在于,將待寫入數(shù)據(jù)寫入閃存中時,每次將數(shù)據(jù)寫入閃存的一存儲單元后,判 斷此存儲單元是否無壞塊,如果無壞塊,確定此存儲單元為有效存儲單元, 否則,跳過此存儲單元在下一個存儲單元重新寫入數(shù)據(jù)。
9、 如權(quán)利要求8所述的方法,其特征在于,將數(shù)據(jù)寫入所述存儲單元后,根據(jù)系統(tǒng)設(shè)定規(guī)則計算寫入此存儲單元的 數(shù)據(jù)所對應的冗余校驗數(shù)據(jù),并將寫入此存儲單元的數(shù)據(jù)讀出,根據(jù)所述規(guī) 則計算讀出數(shù)據(jù)對應的冗余校驗數(shù)據(jù),判斷兩次計算得到的冗余數(shù)據(jù)是否相 同,如果相同,確定此存儲單元無壞塊;否則,確定此存儲單元有壞塊。
10、 如權(quán)利要求9所述的方法,其特征在于,在閃存中寫入數(shù)據(jù)時,每頁分兩次寫入每寫入256字節(jié)的數(shù)據(jù)后, 根據(jù)此256字節(jié)的數(shù)據(jù)計算得到8字節(jié)的冗余校驗數(shù)據(jù),將寫入的256字節(jié) 數(shù)據(jù)讀出,計算讀出的256字節(jié)數(shù)據(jù)對應的8字節(jié)冗余校驗數(shù)據(jù),判斷兩次 計算得到的冗余檢驗數(shù)據(jù)是否相同;如果每頁分兩次寫入時判斷其寫入和讀 出的數(shù)據(jù)對應的冗余檢驗數(shù)據(jù)均相同,確定此頁為有效頁;否則,跳過此頁, 在下一頁重新寫該頁的數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種安全燒寫閃存的方法及數(shù)據(jù)寫入方法,安全燒寫閃存的方法包括將待寫入數(shù)據(jù)寫入閃存中時,每次將數(shù)據(jù)寫入閃存的一存儲單元后,判斷此存儲單元是否無壞塊,如果無壞塊,確定此存儲單元為有效存儲單元,否則,跳過此存儲單元在下一個存儲單元重新寫入數(shù)據(jù);將標識閃存中有效存儲單元位置的信息做為索引,并將所述索引寫入閃存的啟動塊中。本發(fā)明的方法可以保證數(shù)據(jù)都寫在完好的閃存數(shù)據(jù)塊上,保證了數(shù)據(jù)不會因為閃存的質(zhì)量問題而丟失。
文檔編號G11C29/04GK101567217SQ200810093230
公開日2009年10月28日 申請日期2008年4月23日 優(yōu)先權(quán)日2008年4月23日
發(fā)明者孟祥飛 申請人:中興通訊股份有限公司