本發(fā)明屬于航空電子技術(shù)領(lǐng)域,具體涉及一種NAND FLASH數(shù)據(jù)存儲方法。
背景技術(shù):
NAND FLASH Memory是一種電可擦除讀寫非易失性存儲器。它具有高密度,低成本,非易失性,功耗低,讀寫和擦除速度快等優(yōu)點,廣泛應(yīng)用于飛行參數(shù)記錄系統(tǒng)中防護記錄器和快取記錄器數(shù)據(jù)存儲中。在航空機載設(shè)備領(lǐng)域,通常采用順序存儲的方式,同時由于有自動循環(huán)記錄的要求,即在達到存儲容量后能夠自動覆蓋較早的記錄,但是過去的存儲方法,再將較早的數(shù)據(jù)記錄刪除后,雖然舊的數(shù)據(jù)記錄并沒有完全覆蓋,但卻無法查看到剩余未被覆蓋的數(shù)據(jù),導(dǎo)致在飛行事故處理和日常維護時的不便,與此同時,在進行數(shù)據(jù)履歷下載時必須對每一個數(shù)據(jù)塊從頭到尾查詢一遍,查詢時間很長,極大的增加了維護所需的成本。
技術(shù)實現(xiàn)要素:
本發(fā)明克服了現(xiàn)有技術(shù)的不足,提出了一種NAND FLASH數(shù)據(jù)存儲方法,解決了航空電子領(lǐng)域NAND FLASH數(shù)據(jù)存儲器在飛行事故處理和日常維護時較為不便,查詢時間很長,維護成本高的問題。
考慮到現(xiàn)有技術(shù)的上述問題,根據(jù)本發(fā)明公開的一個方面,本發(fā)明采用以下技術(shù)方案:
一種NAND FLASH數(shù)據(jù)存儲方法,首先根據(jù)NAND FLASH的最小擦除單位為塊,塊由頁組成的特征,采用順序存儲的方式進行數(shù)據(jù)存儲,當(dāng)存儲容量達到數(shù)據(jù)容量的最后一塊時,自動擦除第一塊存儲的數(shù)據(jù),同時在進行數(shù)據(jù)存儲時,每個數(shù)據(jù)由若干個數(shù)據(jù)塊組成,每個數(shù)據(jù)塊均包括數(shù)據(jù)索引區(qū)和有效數(shù)據(jù)區(qū),數(shù)據(jù)索引信息包括偏移地址、數(shù)據(jù)類型、數(shù)據(jù)塊類型、履歷信息和數(shù)據(jù)記錄狀態(tài),其特征在于,方法包括以下步驟:
1)獲取最新的記錄位置的步驟:
1.1)按順序讀取每一個塊的數(shù)據(jù)索引信息;
1.2)當(dāng)數(shù)據(jù)塊的數(shù)據(jù)索引區(qū)指示當(dāng)前塊為空塊時,停止搜索;記錄當(dāng)前地址,即為最新的記錄位置;
2)存儲的步驟:
2.1)每個數(shù)據(jù)塊的第0頁固定寫入數(shù)據(jù)索引信息,第1頁開始為有效數(shù)據(jù)區(qū);
2.2)首先在當(dāng)前塊的第0頁寫入數(shù)據(jù)索引信息,說明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為文件起始塊,同時擦除下一數(shù)據(jù)塊,如果當(dāng)前塊為當(dāng)前存儲空間的最后一個塊,則下一數(shù)據(jù)塊為當(dāng)前存儲空間的第0塊;
2.3)當(dāng)數(shù)據(jù)超過一個塊時,在下一個數(shù)據(jù)塊的第0頁繼續(xù)寫入數(shù)據(jù)索引信息,并標(biāo)明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊;
2.4)當(dāng)在寫入過程中發(fā)現(xiàn)寫入不正確時,自動將數(shù)據(jù)搬移到下一塊,同時將數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型標(biāo)識標(biāo)為壞塊;
3)數(shù)據(jù)循環(huán)存儲的步驟:當(dāng)數(shù)據(jù)寫入存儲空間的最后一個數(shù)據(jù)塊時,自動擦除存儲空間的第0個數(shù)據(jù)塊,同時標(biāo)注該數(shù)據(jù)塊的數(shù)據(jù)索引信息;
4)按履歷信息搜索并下載的步驟:
4.1)根據(jù)步驟2)所存儲的數(shù)據(jù)索引信息,得到當(dāng)前存儲數(shù)據(jù)的數(shù)據(jù)類型、數(shù)據(jù)塊類型、履歷信息,進入步驟4.2);
4.2)如果數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型是文件起始塊,則進入步驟4.3),否則繼續(xù)搜索下一個數(shù)據(jù)塊是否為文件起始塊;
4.3)判斷當(dāng)前塊存儲的數(shù)據(jù)索引信息中的履歷信息是否與要搜索并下載的履歷信息一致,如果一致則從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);如果不一致,繼續(xù)在數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為數(shù)據(jù)起始塊的數(shù)據(jù)塊中查找與下載的履歷信息一致的數(shù)據(jù)塊位置,直到找到位置,找到后從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);如果當(dāng)前存儲空間的所有文件起始塊中的數(shù)據(jù)索引信息中的履歷信息均與下載的不一致,則進行步驟4.5);
4.4)判斷下一個數(shù)據(jù)塊據(jù)索引信息的數(shù)據(jù)塊類型是否為有效數(shù)據(jù)塊,如果為有效數(shù)據(jù)塊,則重復(fù)4.3);
4.5)從第0塊開始判斷當(dāng)前塊存儲的數(shù)據(jù)索引信息中的履歷信息是否與要搜索并下載的履歷信息一致,并且數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊,直到找到一個有效數(shù)據(jù)塊并且履歷信息與需下載的履歷信息一致的數(shù)據(jù)塊,找到該數(shù)據(jù)塊塊后,則從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);
5)NAND FLASH掉電時存儲的步驟:掉電時,在當(dāng)前數(shù)據(jù)塊的數(shù)據(jù)索引信息中的數(shù)據(jù)記錄狀態(tài)位置寫入掉電狀態(tài)信息,便于數(shù)據(jù)恢復(fù);
6)循環(huán)存儲后數(shù)據(jù)塊中剩余數(shù)據(jù)的恢復(fù)步驟:通過讀取每個數(shù)據(jù)塊的數(shù)據(jù)索引信息,雖然部分?jǐn)?shù)據(jù)因為循環(huán)存儲被覆蓋,但是由于每個數(shù)據(jù)塊均有履歷信息,按步驟4.1)、4.3)和4.5)恢復(fù)一部分未被覆蓋的剩余的數(shù)據(jù)。
本發(fā)明能有效解決航空機載設(shè)備領(lǐng)域數(shù)據(jù)存儲管理的問題,可以在數(shù)據(jù)循環(huán)記錄時恢復(fù)未被完全覆蓋的數(shù)據(jù)中的剩余部分;本發(fā)明在寫入數(shù)據(jù)索引信息時,增加了數(shù)據(jù)文件寫入狀態(tài),用于標(biāo)識是正常上電寫入還是掉電狀態(tài)寫入,便于恢復(fù)掉電時寫入的數(shù)據(jù),并能有效判斷掉電時刻;本發(fā)明由于在數(shù)據(jù)存儲是寫入了大量數(shù)據(jù)索引信息,方法數(shù)據(jù)查找和比對,極大的提高了大量履歷的下載速度。
附圖說明
圖1是本發(fā)明NAND FLASH內(nèi)部存儲結(jié)構(gòu)示意圖。
圖2是本發(fā)明數(shù)據(jù)文件存放方式結(jié)構(gòu)示意圖。
圖3是本發(fā)明數(shù)據(jù)文件索引信息的內(nèi)容。
圖4是本發(fā)明具體實施方式的數(shù)據(jù)存儲區(qū)結(jié)構(gòu)圖。
圖5是本發(fā)明具體實施方式每個數(shù)據(jù)塊數(shù)據(jù)文件存放方式結(jié)構(gòu)示意圖。
圖6是本發(fā)明具體實施方式數(shù)據(jù)索引信息內(nèi)容示例一(數(shù)據(jù)文件起始塊)。
圖7是本發(fā)明具體實施方式數(shù)據(jù)索引信息內(nèi)容示例二(有效數(shù)據(jù)塊正常上電狀態(tài))。
圖8是本發(fā)明具體實施方式數(shù)據(jù)索引信息內(nèi)容示例三(有效數(shù)據(jù)塊掉電狀態(tài)記錄)。
圖9是本發(fā)明具體實施方式數(shù)據(jù)索引信息內(nèi)容示例四(空塊)。
圖10是本發(fā)明具體實施方式數(shù)據(jù)索引信息內(nèi)容示例五(環(huán)塊)。
具體實施方式
下面結(jié)合實施例對本發(fā)明作進一步地詳細說明,但本發(fā)明的實施方式不限于此。
如圖1所示,首先根據(jù)NAND FLASH的最小擦除單位為塊,塊由頁組成的特征,采用順序存儲的方式進行數(shù)據(jù)存儲,當(dāng)存儲容量達到數(shù)據(jù)容量的最后一塊時,自動擦除第一塊存儲的數(shù)據(jù),同時在進行數(shù)據(jù)存儲時,每個數(shù)據(jù)由若干個數(shù)據(jù)塊組成,如圖2所示。每個數(shù)據(jù)塊均包括數(shù)據(jù)索引區(qū)和有效數(shù)據(jù)區(qū),數(shù)據(jù)索引包括偏移地址、數(shù)據(jù)類型、數(shù)據(jù)塊類型、履歷信息和數(shù)據(jù)記錄狀態(tài),如圖3所示。
其中,
偏移地址:代表有效數(shù)據(jù)在一個數(shù)據(jù)塊中的起始位置;
數(shù)據(jù)類型:代表當(dāng)前數(shù)據(jù)塊存儲數(shù)據(jù)種類,例如:飛行數(shù)據(jù),音頻數(shù)據(jù)等;
數(shù)據(jù)塊類型:代表當(dāng)前數(shù)據(jù)塊是什么類型,例如:有效數(shù)據(jù)塊,文件起始塊、壞塊、空塊等;
履歷信息:代表當(dāng)前數(shù)據(jù)的履歷信息,由年+月+日+時+分+秒組成;
數(shù)據(jù)記錄狀態(tài):代表當(dāng)前數(shù)據(jù)塊是正常上電時記錄的數(shù)據(jù)還是掉電時記錄的數(shù)據(jù)。
本發(fā)明的一種NAND FLASH數(shù)據(jù)存儲方法,包括以下步驟:
1)獲取最新的記錄位置的步驟:
1.1)按順序讀取每一個塊的數(shù)據(jù)索引信息;
1.2)當(dāng)數(shù)據(jù)塊的數(shù)據(jù)索引區(qū)指示當(dāng)前塊為空塊時,停止搜索;記錄當(dāng)前地址,即為最新的記錄位置;
2)存儲的步驟:
2.1)每個數(shù)據(jù)塊的第0頁固定寫入數(shù)據(jù)索引信息,第1頁開始為有效數(shù)據(jù)區(qū);
2.2)首先在當(dāng)前塊的第0頁寫入數(shù)據(jù)索引信息,說明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為文件起始塊,同時擦除下一數(shù)據(jù)塊,如果當(dāng)前塊為當(dāng)前存儲空間的最后一個塊,則下一數(shù)據(jù)塊為當(dāng)前存儲空間的第0塊;
2.3)當(dāng)數(shù)據(jù)超過一個塊時,在下一個數(shù)據(jù)塊的第0頁繼續(xù)寫入數(shù)據(jù)索引信息,并標(biāo)明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊;
2.4)當(dāng)在寫入過程中發(fā)現(xiàn)寫入不正確時,自動將數(shù)據(jù)搬移到下一塊,同時將數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型標(biāo)識標(biāo)為壞塊;
3)數(shù)據(jù)循環(huán)存儲的步驟:當(dāng)數(shù)據(jù)寫入存儲空間的最后一個數(shù)據(jù)塊時,自動擦除存儲空間的第0個數(shù)據(jù)塊,同時標(biāo)注該數(shù)據(jù)塊的數(shù)據(jù)索引信息;
4)按履歷信息搜索并下載的步驟:
4.1)根據(jù)步驟2)所存儲的數(shù)據(jù)索引信息,得到當(dāng)前存儲數(shù)據(jù)的數(shù)據(jù)類型、數(shù)據(jù)塊類型、履歷信息,進入步驟4.2);
4.2)如果數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型是文件起始塊,則進入步驟4.3),否則繼續(xù)搜索下一個數(shù)據(jù)塊是否為文件起始塊;
4.3)判斷當(dāng)前塊存儲的數(shù)據(jù)索引信息中的履歷信息是否與要搜索并下載的履歷信息一致,如果一致則從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);如果不一致,繼續(xù)在數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為數(shù)據(jù)起始塊的數(shù)據(jù)塊中查找與下載的履歷信息一致的數(shù)據(jù)塊位置, 直到找到位置,找到后從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);如果當(dāng)前存儲空間的所有文件起始塊中的數(shù)據(jù)索引信息中的履歷信息均與下載的不一致,則進行步驟4.5);
4.4)判斷下一個數(shù)據(jù)塊據(jù)索引信息的數(shù)據(jù)塊類型是否為有效數(shù)據(jù)塊,如果為有效數(shù)據(jù)塊,則重復(fù)4.3);
4.5)從第0塊開始判斷當(dāng)前塊存儲的數(shù)據(jù)索引信息中的履歷信息是否與要搜索并下載的履歷信息一致,并且數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊,直到找到一個有效數(shù)據(jù)塊并且履歷信息與需下載的履歷信息一致的數(shù)據(jù)塊,找到該數(shù)據(jù)塊塊后,則從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);
5)NAND FLASH掉電時存儲的步驟:掉電時,在當(dāng)前數(shù)據(jù)塊的數(shù)據(jù)索引信息中的數(shù)據(jù)記錄狀態(tài)位置寫入掉電狀態(tài)信息,便于數(shù)據(jù)恢復(fù);
6)循環(huán)存儲后數(shù)據(jù)塊中剩余數(shù)據(jù)的恢復(fù)步驟:通過讀取每個數(shù)據(jù)塊的數(shù)據(jù)索引信息,雖然部分?jǐn)?shù)據(jù)因為循環(huán)存儲被覆蓋,但是由于每個數(shù)據(jù)塊均有履歷信息,按步驟4.1)、4.3)和4.5)恢復(fù)一部分未被覆蓋的剩余的數(shù)據(jù)。
下面以圖4至圖10所示為例進行描述。
如圖4所示,數(shù)據(jù)存儲區(qū)由芯片1、芯片2、芯片3和芯片4組成,每個芯片有8192個數(shù)據(jù)塊,每個數(shù)據(jù)塊由64頁組成,每一頁大小為2048字節(jié)。
則應(yīng)用本發(fā)明主要包括以下步驟:
1):獲取最新的記錄位置的步驟:
1.1):從第0塊開始讀取每一塊第1頁的數(shù)據(jù)塊索引信息;
1.2):當(dāng)數(shù)據(jù)索引為全FF時(如圖9),即為最新的記錄位置,記錄當(dāng)前位 置。
2):記錄的步驟:
2.1):每個數(shù)據(jù)塊的第0頁固定寫入數(shù)據(jù)索引信息,第1頁開始為有效數(shù)據(jù)區(qū)(如圖5);
2.2):首先在當(dāng)前塊的第0頁寫入數(shù)據(jù)索引信息,如圖6所示,標(biāo)明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為文件起始塊,同時擦除下一數(shù)據(jù)塊,如果當(dāng)前塊為當(dāng)前存儲空間的最后一個塊,則下一數(shù)據(jù)塊為當(dāng)前存儲空間的第0塊;
2.3):當(dāng)數(shù)據(jù)超過一個塊時(如圖7所示),在下一個數(shù)據(jù)塊的第0頁繼續(xù)寫入數(shù)據(jù)信息,并標(biāo)明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊;
2.4):當(dāng)在寫入過程中發(fā)現(xiàn)寫入不正確時,自動將數(shù)據(jù)搬移到下一塊,并標(biāo)明當(dāng)前數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊(如圖10所示)。
3):數(shù)據(jù)循環(huán)記錄的步驟:當(dāng)數(shù)據(jù)寫入存儲空間的最后一個數(shù)據(jù)塊時,自動擦除存儲空間的第0個數(shù)據(jù)塊,同時標(biāo)注該數(shù)據(jù)塊的數(shù)據(jù)索引信息(如圖4所示);
4):按履歷搜索并下載的步驟:
4.1):根據(jù)步驟2.2)所寫入的履歷信息,如圖6所示,得到當(dāng)前記錄的數(shù)據(jù)類型、數(shù)據(jù)塊類型、履歷信息,進入步驟4.2);
4.2):如果數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型是文件起始塊,則進入步驟4.3),否則繼續(xù)搜索下一個數(shù)據(jù)塊是否為文件起始塊,如圖6所示;
4.3):判斷其記錄的履歷信息是否與要搜索并下載的履歷信息一致(2015/04/07/10/30/25/0001),則從當(dāng)前塊的第1頁開始下載該數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);如果不一致,繼續(xù)在數(shù)據(jù)索引信息中的數(shù) 據(jù)塊類型為數(shù)據(jù)起始塊的數(shù)據(jù)塊中查找與下載的履歷信息一致的數(shù)據(jù)塊位置,直到找到位置,找到后從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);如果當(dāng)前存儲空間的所有文件起始塊中的數(shù)據(jù)索引信息中的履歷信息均與下載的不一致,說明該數(shù)據(jù)已經(jīng)被循環(huán)存儲覆蓋了,則進行步驟4.5);
4.4):判斷下一個數(shù)據(jù)塊數(shù)據(jù)索引區(qū)的數(shù)據(jù)塊類型是否為有效數(shù)據(jù)塊(如圖7所示),如果為有效數(shù)據(jù)塊,則重復(fù)4.3);
4.5)從第0塊開始判斷當(dāng)前塊存儲的數(shù)據(jù)索引信息中的履歷信息是否與要搜索并下載的履歷信息一致,并且數(shù)據(jù)索引信息中的數(shù)據(jù)塊類型為有效數(shù)據(jù)塊,直到找到一個有效數(shù)據(jù)塊并且履歷信息與需下載的履歷信息一致的數(shù)據(jù)塊,找到該數(shù)據(jù)塊塊后,則從當(dāng)前塊的第1頁開始下載當(dāng)前存儲的數(shù)據(jù),當(dāng)下載到下一個數(shù)據(jù)塊時,進入步驟4.4);
5):數(shù)據(jù)掉電時記錄的步驟:掉電時,在當(dāng)前數(shù)據(jù)塊的數(shù)據(jù)索引信息中的數(shù)據(jù)記錄狀態(tài)位置寫入掉電狀態(tài)信息,便于數(shù)據(jù)恢復(fù)(如圖8所示);
6):循環(huán)后覆蓋的數(shù)據(jù)恢復(fù)步驟:通過讀取每個數(shù)據(jù)塊的數(shù)據(jù)索引信息,雖然部分?jǐn)?shù)據(jù)因為循環(huán)存儲被覆蓋,但是由于每個數(shù)據(jù)塊均有履歷信息(2015/04/07/10/30/25/0001),按步驟4.1)、4.3)和4.5)恢復(fù)一部分剩余的數(shù)據(jù)(如圖6至圖10所示)。