本發(fā)明涉及一種串行閃存數(shù)據(jù)保護(hù)方法和裝置,屬于計(jì)算機(jī)領(lǐng)域。
背景技術(shù):
串行falsh存儲(chǔ)器因接口簡(jiǎn)單、容量巨大,廣泛應(yīng)用于單片機(jī)產(chǎn)品開(kāi)發(fā)環(huán)境。但其讀寫(xiě)速度相對(duì)緩慢的特點(diǎn),導(dǎo)致其在進(jìn)行數(shù)據(jù)寫(xiě)入操作階段,意外發(fā)生掉電情況時(shí)會(huì)極高概率出現(xiàn)文件丟失,甚至導(dǎo)致整個(gè)文件系統(tǒng)崩潰現(xiàn)象。
現(xiàn)有階段解決此問(wèn)題的方法通常:在硬件方面進(jìn)行彌補(bǔ),比如掉電保護(hù)電路等策略;此方法很大程度上解決了意外掉電帶來(lái)數(shù)據(jù)丟失的問(wèn)題,但涉及的技術(shù)環(huán)節(jié)過(guò)多,并且同樣需要軟件方面配合,因此無(wú)法100%保證其可靠性。最大不足就是保護(hù)電路會(huì)極大地提升了產(chǎn)品開(kāi)發(fā)成本(硬件成本)。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述問(wèn)題,本發(fā)明提供一種串行閃存數(shù)據(jù)保護(hù)方法和裝置。
本發(fā)明采用的技術(shù)方案一方面為一種串行閃存數(shù)據(jù)保護(hù)方法,包括以下步驟:基于邏輯地址劃分串行閃存為緩存區(qū)和實(shí)際區(qū);建立緩存區(qū)與實(shí)際區(qū)之間的頁(yè)面映射;將待寫(xiě)入數(shù)據(jù)逐區(qū)寫(xiě)入緩存區(qū)的映射扇區(qū),當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足或者數(shù)據(jù)需要轉(zhuǎn)換扇區(qū)時(shí),將映射扇區(qū)的數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
優(yōu)選地,還包括以下步驟:獲取需要寫(xiě)入數(shù)據(jù)的實(shí)際區(qū)的絕對(duì)地址,查詢(xún)?cè)摻^對(duì)地址是否在緩存區(qū)存在對(duì)應(yīng)的映射扇區(qū),如果不存在,則確定一個(gè)映射扇區(qū)并建立與所述絕對(duì)地址的頁(yè)面映射;如果存在,則讀取該映射扇區(qū)的數(shù)據(jù)并存入ram,所述ram用于存儲(chǔ)待寫(xiě)入實(shí)際區(qū)的數(shù)據(jù)。
優(yōu)選地,當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足時(shí),ram從已寫(xiě)入數(shù)據(jù)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
優(yōu)選地,當(dāng)需要轉(zhuǎn)換扇區(qū)時(shí),ram從對(duì)應(yīng)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
本發(fā)明采用的技術(shù)方案另一方面為一種串行閃存數(shù)據(jù)保護(hù)裝置,包括以下模塊:
劃分模塊,用于基于邏輯地址劃分串行閃存為緩存區(qū)和實(shí)際區(qū);映射模塊,用于建立緩存區(qū)與實(shí)際區(qū)之間的頁(yè)面映射;數(shù)據(jù)處理模塊,用于將待寫(xiě)入數(shù)據(jù)逐區(qū)寫(xiě)入緩存區(qū)的映射扇區(qū),當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足或者數(shù)據(jù)需要轉(zhuǎn)換扇區(qū)時(shí),將映射扇區(qū)的數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
優(yōu)選地,所述映射模塊還用于獲取需要寫(xiě)入數(shù)據(jù)的實(shí)際區(qū)的絕對(duì)地址,查詢(xún)?cè)摻^對(duì)地址是否在緩存區(qū)存在對(duì)應(yīng)的映射扇區(qū),如果不存在,則確定一個(gè)映射扇區(qū)并建立與所述絕對(duì)地址的頁(yè)面映射;如果存在,則讀取該映射扇區(qū)的數(shù)據(jù)并存入ram,所述ram用于存儲(chǔ)待寫(xiě)入實(shí)際區(qū)的數(shù)據(jù)。
優(yōu)選地,所述數(shù)據(jù)處理模塊,還用于當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足時(shí),ram從已寫(xiě)入數(shù)據(jù)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
優(yōu)選地,所述數(shù)據(jù)處理模塊,還用于當(dāng)需要轉(zhuǎn)換扇區(qū)時(shí),ram從對(duì)應(yīng)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
本發(fā)明的有益效果為通過(guò)設(shè)定緩存區(qū)和實(shí)際區(qū),通過(guò)頁(yè)映射進(jìn)行數(shù)據(jù)之間的轉(zhuǎn)移,當(dāng)緩存區(qū)溢出或者需要特定的數(shù)據(jù)轉(zhuǎn)移的時(shí)候進(jìn)行數(shù)據(jù)的轉(zhuǎn)移,只有當(dāng)數(shù)據(jù)被完整的轉(zhuǎn)移之后才進(jìn)行數(shù)據(jù)的清除,能夠確保數(shù)據(jù)在斷電的情況下仍能進(jìn)行數(shù)據(jù)的保存。
附圖說(shuō)明
圖1所示為基于本發(fā)明實(shí)施例的一種串行閃存數(shù)據(jù)保護(hù)方法的示意圖。
具體實(shí)施方式
以下結(jié)合實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明。
基于發(fā)明的實(shí)施例1,如圖1所示一種串行閃存數(shù)據(jù)保護(hù)方法,包括以下步驟:基于邏輯地址劃分串行閃存為緩存區(qū)和實(shí)際區(qū);建立緩存區(qū)與實(shí)際區(qū)之間的頁(yè)面映射;將待寫(xiě)入數(shù)據(jù)逐區(qū)寫(xiě)入緩存區(qū)的映射扇區(qū),當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足或者數(shù)據(jù)需要轉(zhuǎn)換扇區(qū)時(shí),將映射扇區(qū)的數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
使用程序(基于邏輯地址劃分)將閃存劃分為緩存區(qū)和實(shí)際區(qū),所述實(shí)際區(qū)是最終用來(lái)存儲(chǔ)數(shù)據(jù)的空間,通過(guò)頁(yè)式存儲(chǔ)的形式將緩存區(qū)和實(shí)際區(qū)進(jìn)行存儲(chǔ)單元的分配,通過(guò)建立兩者之間的頁(yè)面映射,即頁(yè)與頁(yè)之間對(duì)應(yīng)(同時(shí)將映射的記錄做成映射表,包括扇區(qū)號(hào),對(duì)應(yīng)的物理地址和邏輯地址等信息);而數(shù)據(jù)寫(xiě)入的步驟,第一步是外部的待寫(xiě)入數(shù)據(jù)首先會(huì)被按頁(yè)(即映射扇區(qū))存入緩存區(qū),由于緩存區(qū)的設(shè)定是由程序控制的,因此根據(jù)映射扇區(qū)的扇區(qū)號(hào)的使用記錄就可以知道扇區(qū)的使用情況,當(dāng)緩存區(qū)沒(méi)有多余的映射扇區(qū)或者需要將緩存區(qū)的數(shù)據(jù)存入實(shí)際區(qū)的時(shí)候,根據(jù)映射扇區(qū)之間的頁(yè)面映射關(guān)系,進(jìn)行數(shù)據(jù)的移動(dòng),當(dāng)數(shù)據(jù)寫(xiě)入完成的時(shí)候,擦拭緩存區(qū)的對(duì)應(yīng)的映射扇區(qū)的數(shù)據(jù)并拆除頁(yè)面映射關(guān)系。
基于發(fā)明的實(shí)施例1的一種串行閃存數(shù)據(jù)保護(hù)方法,還包括以下步驟:獲取需要寫(xiě)入數(shù)據(jù)的實(shí)際區(qū)的絕對(duì)地址,查詢(xún)?cè)摻^對(duì)地址是否在緩存區(qū)存在對(duì)應(yīng)的映射扇區(qū),如果不存在,則確定一個(gè)映射扇區(qū)并建立與所述絕對(duì)地址的頁(yè)面映射;如果存在,則讀取該映射扇區(qū)的數(shù)據(jù)并存入ram,所述ram用于存儲(chǔ)待寫(xiě)入實(shí)際區(qū)的數(shù)據(jù)。
當(dāng)數(shù)據(jù)需要寫(xiě)入實(shí)際區(qū)的某個(gè)絕對(duì)地址時(shí),通過(guò)查詢(xún)建立頁(yè)面映射的映射表,可以知道是否已經(jīng)有設(shè)定好的映射關(guān)系,如果存在的話(huà),就不用重新進(jìn)行映射關(guān)系的建立,就可以直接通過(guò)內(nèi)存進(jìn)行數(shù)據(jù)的轉(zhuǎn)移,如果不存在的話(huà),那么在緩存區(qū)內(nèi)確定一個(gè)映射扇區(qū)(可以是本來(lái)沒(méi)有寫(xiě)入數(shù)據(jù)的部分,也可以是經(jīng)過(guò)擦拭后獲得的部分);獲取該映射扇區(qū)的數(shù)據(jù)并存入ram。
基于發(fā)明的實(shí)施例1的一種串行閃存數(shù)據(jù)保護(hù)方法,當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足時(shí),ram從已寫(xiě)入數(shù)據(jù)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
通過(guò)數(shù)據(jù)寫(xiě)入或者擦拭記錄,很容易知道閃存空間的使用情況,當(dāng)緩存區(qū)的剩余的映射扇區(qū)(即沒(méi)有存儲(chǔ)有數(shù)據(jù)的扇區(qū))數(shù)量或者扇區(qū)空間不足的時(shí)候,獲取已寫(xiě)入數(shù)據(jù)的扇區(qū)的資料,選擇其中的若干扇區(qū)進(jìn)行數(shù)據(jù)轉(zhuǎn)移(可以隨機(jī)選擇扇區(qū)或者按照數(shù)據(jù)寫(xiě)入時(shí)間的順序選最老的扇區(qū)),當(dāng)數(shù)據(jù)寫(xiě)入完成的時(shí)候,則擦拭緩存區(qū)的對(duì)應(yīng)的扇區(qū)并拆除頁(yè)面映射關(guān)系。
基于發(fā)明的實(shí)施例1的一種串行閃存數(shù)據(jù)保護(hù)方法,當(dāng)需要轉(zhuǎn)換扇區(qū)時(shí),ram從對(duì)應(yīng)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
由于需要將特定的數(shù)據(jù)進(jìn)行轉(zhuǎn)移,因此,會(huì)從特定的扇區(qū)進(jìn)行數(shù)據(jù)的轉(zhuǎn)移,通過(guò)ram從特定的映射扇區(qū)讀取數(shù)據(jù),然后基于頁(yè)面映射的關(guān)系將數(shù)據(jù)寫(xiě)入實(shí)際區(qū)對(duì)應(yīng)的扇區(qū)/頁(yè),當(dāng)數(shù)據(jù)寫(xiě)入完成的時(shí)候,則擦拭緩存區(qū)的對(duì)應(yīng)的扇區(qū)并拆除頁(yè)面映射關(guān)系。
基于本發(fā)明的實(shí)施例2,一種串行閃存數(shù)據(jù)保護(hù)裝置,包括以下模塊:
劃分模塊,用于基于邏輯地址劃分串行閃存為緩存區(qū)和實(shí)際區(qū);映射模塊,用于建立緩存區(qū)與實(shí)際區(qū)之間的頁(yè)面映射;數(shù)據(jù)處理模塊,用于將待寫(xiě)入數(shù)據(jù)逐區(qū)寫(xiě)入緩存區(qū)的映射扇區(qū),當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足或者數(shù)據(jù)需要轉(zhuǎn)換扇區(qū)時(shí),將映射扇區(qū)的數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
基于本發(fā)明的實(shí)施例2的一種串行閃存數(shù)據(jù)保護(hù)裝置,所述映射模塊還用于獲取需要寫(xiě)入數(shù)據(jù)的實(shí)際區(qū)的絕對(duì)地址,查詢(xún)?cè)摻^對(duì)地址是否在緩存區(qū)存在對(duì)應(yīng)的映射扇區(qū),如果不存在,則確定一個(gè)映射扇區(qū)并建立與所述絕對(duì)地址的頁(yè)面映射;如果存在,則讀取該映射扇區(qū)的數(shù)據(jù)并存入ram,所述ram用于存儲(chǔ)待寫(xiě)入實(shí)際區(qū)的數(shù)據(jù)。
基于本發(fā)明的實(shí)施例2的一種串行閃存數(shù)據(jù)保護(hù)裝置,所述數(shù)據(jù)處理模塊,還用于當(dāng)緩存區(qū)的剩余的映射扇區(qū)的空間不足時(shí),ram從已寫(xiě)入數(shù)據(jù)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
基于本發(fā)明的實(shí)施例2的一種串行閃存數(shù)據(jù)保護(hù)裝置,所述數(shù)據(jù)處理模塊,還用于當(dāng)需要轉(zhuǎn)換扇區(qū)時(shí),ram從對(duì)應(yīng)的映射扇區(qū)讀取數(shù)據(jù),基于頁(yè)面映射將數(shù)據(jù)寫(xiě)入實(shí)際區(qū),當(dāng)數(shù)據(jù)寫(xiě)入完成時(shí),擦拭緩存區(qū)對(duì)應(yīng)的映射扇區(qū)并拆除頁(yè)面映射關(guān)系。
以上所述,只是本發(fā)明的較佳實(shí)施例而已,本發(fā)明并不局限于上述實(shí)施方式,只要其以相同的手段達(dá)到本發(fā)明的技術(shù)效果,都應(yīng)屬于本發(fā)明的保護(hù)范圍。在本發(fā)明的保護(hù)范圍內(nèi)其技術(shù)方案和/或?qū)嵤┓绞娇梢杂懈鞣N不同的修改和變化。