国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于大頁面Flash的數(shù)據(jù)更新和讀取方法

      文檔序號:6525354閱讀:182來源:國知局
      一種基于大頁面Flash的數(shù)據(jù)更新和讀取方法
      【專利摘要】本發(fā)明公開了一種基于大頁面Flash的數(shù)據(jù)更新和讀取方法,屬于存儲器領域。其中,數(shù)據(jù)更新的方法包括:當與物理頁號對應的Flash頁面為空閑頁時,將待寫入數(shù)據(jù)寫入所述Flash頁面的有效數(shù)據(jù)區(qū),當所述Flash頁面不為空閑頁時,生成日志記錄,若所述Flash頁面的日志區(qū)的剩余空間充足,則將日志記錄寫入所述Flash頁面的日志區(qū),若不充足則重新組織數(shù)據(jù),用新的空閑頁替換所述Flash頁面;數(shù)據(jù)讀取的方法包括:讀取與物理頁號對應的Flash頁面的有效數(shù)據(jù)區(qū)中的數(shù)據(jù),根據(jù)所述Flash頁面的日志區(qū)中的日志記錄更新讀取到的數(shù)據(jù),返回更新后的數(shù)據(jù)中的相應數(shù)據(jù)。本發(fā)明的有益效果在于:可以提高數(shù)據(jù)更新的效率。
      【專利說明】—種基于大頁面Flash的數(shù)據(jù)更新和讀取方法
      【技術領域】
      [0001]本發(fā)明涉及存儲器領域,尤其涉及一種基于大頁面Flash的數(shù)據(jù)更新和讀取方法。
      【背景技術】
      [0002]Flash是存儲芯片的一種,F(xiàn)lash存儲器又稱閃存,它結合了 ROM和RAM的長處,不僅具備電子可擦除可編程的性能,還可以快速讀取數(shù)據(jù),使數(shù)據(jù)不會因為斷電而丟失。
      [0003]發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),現(xiàn)有技術中至少存在以下不足:有很多Flash芯片的頁面非常大,例如2KB/4KB,但是應用中每次需要更新的內(nèi)容卻比較少,根據(jù)目前通用的方法,每次即使是更新幾個字節(jié)的數(shù)據(jù),也要重新查找空閑頁面,然后將原始頁面的內(nèi)容在RAM中更新后寫入新的Flash頁面,采用這種方法進行數(shù)據(jù)更新,效率低,且會縮短Flash的壽命。

      【發(fā)明內(nèi)容】

      [0004]本發(fā)明的目的是為了克服現(xiàn)有技術的缺陷,提出一種基于大頁面Flash的數(shù)據(jù)更新和讀取方法。
      [0005]本發(fā)明方法是通過下述技術方案實現(xiàn)的:
      [0006]一方面,本發(fā)明提供了一種基于大頁面Flash的數(shù)據(jù)更新方法,其基本實施過程如下:
      [0007]—種基于大頁面Flash的數(shù)據(jù)更新方法,包括:根據(jù)寫入地址得到物理頁號和第一頁內(nèi)偏移地址,向大頁面Flash中寫入待寫入數(shù)據(jù);其特征在于,所述大頁面Flash的每個Flash頁面被劃分為有效數(shù)據(jù)區(qū)和日志區(qū),所述向所述大頁面Flash中寫入所述待寫入數(shù)據(jù)具體包括:
      [0008]步驟S1:判斷與所述物理頁號對應的Flash頁面是否為空閑頁,是則將所述待寫入數(shù)據(jù)寫入到所述Flash頁面的有效數(shù)據(jù)區(qū),結束;否則執(zhí)行步驟S2 ;
      [0009]步驟S2:按照預設格式根據(jù)所述待寫入數(shù)據(jù)、所述待寫入數(shù)據(jù)的長度和所述第一頁內(nèi)偏移地址生成日志記錄;
      [0010]步驟S3:計算所述Flash頁面的日志區(qū)的剩余空間的大小,判斷所述Flash頁面的日志區(qū)的剩余空間是否大于所述日志記錄的長度,是則將所述生成的日志記錄寫入到所述Flash頁面的日志區(qū),結束;否則執(zhí)行步驟S4 ;
      [0011]步驟S4:在所述大頁面Flash中查找新的空閑頁,根據(jù)所述Flash頁面的日志區(qū)中的日志記錄、所述生成的日志記錄和有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)重新組織數(shù)據(jù),將組織得到的數(shù)據(jù)寫入所述新的空閑頁的有效數(shù)據(jù)區(qū),結束。
      [0012]具體地,所述判斷與所述物理頁號對應的Flash頁面是否為空閑頁具體包括:檢索所述Flash頁面的日志區(qū),判斷所述Flash頁面的日志區(qū)中的非空閑標志是否置位,是則所述Flash頁面不是空閑頁,否則所述Flash頁面是空閑頁;相應地,所述將組織得到的數(shù)據(jù)寫入所述新的空閑頁的有效數(shù)據(jù)區(qū)之后還包括:置位所述新的空閑頁的日志區(qū)中的非空閑標志;進一步地,所述判斷與所述物理頁號對應的Flash頁面是否為空閑頁之前包括:設置各Flash頁面的日志區(qū)的前兩個字節(jié)為非空閑標志,當各Flash頁面的前兩個字節(jié)為0x5AA5時所述非空閑標志置位,當各Flash頁面的前兩個字節(jié)不為0x5AA5時所述非空閑標志復位;相應地,所述置位所述新的空閑頁日志區(qū)中的非空閑標志:將所述新的空閑頁日志區(qū)的前兩個字節(jié)修改為0x5AA5 ;
      [0013]或者,所述判斷與所述物理頁號對應的Flash頁面是否為空閑頁具體包括:讀取所述Flash頁面從起始地址開始的預設個字節(jié)的數(shù)據(jù),判斷讀取到的各個字節(jié)是否均為OxFF,是則所述Flash頁面是空閑頁,否則所述Flash頁面不是空閑頁;
      [0014]或者,所述判斷所述物理頁號對應的Flash頁面是否為空閑頁具體包括:讀取所述Flash頁面從第一頁內(nèi)偏移地址開始的預設個字節(jié)的數(shù)據(jù),判斷讀取到的各個字節(jié)是否均為OxFF,是則所述Flash頁面是空閑頁,否則所述Flash頁面不是空閑頁;
      [0015]所述步驟S1與步驟S2之間還包括:判斷所述Flash頁面的日志區(qū)是否寫滿,是則執(zhí)行步驟S4,否則執(zhí)行步驟S2 ;
      [0016]所述判斷所述Flash頁面的日志區(qū)是否寫滿具體包括:計算所述Flash頁面的日志區(qū)中已使用的字節(jié)數(shù),判斷所述日志區(qū)已使用的字節(jié)數(shù)是否等于所述Flash頁面的日志區(qū)的大小,是則所述Flash頁面的日志區(qū)寫滿;否則所述Flash頁面的日志區(qū)未寫滿;其中,所述計算所述Flash頁面的日志區(qū)中已使用的字節(jié)數(shù)具體包括:遍歷所述Flash頁面的日志區(qū),記錄所述Flash頁面的日志區(qū)中各日志記錄的長度,當查找到連續(xù)的至少兩個字節(jié)的OxFF時,計算各日志記錄的長度和,得到所述日志區(qū)中已使用的字節(jié)數(shù);
      [0017]所述計算所述Flash頁面的日志區(qū)的剩余空間的大小具體包括:遍歷所述Flash頁面的日志區(qū),記錄所述Flash頁面的日志區(qū)中各日志記錄的長度,當查找到連續(xù)的兩個及以上字節(jié)的OxFF時,計算各日志記錄的長度和,得到所述Flash頁面的日志區(qū)中已使用的字節(jié)數(shù),用所述Flash頁面的日志區(qū)的大小減去所述已使用的字節(jié)數(shù),得到所述Flash頁面的日志區(qū)的剩余空間的大??;
      [0018]所述根據(jù)所述Flash頁面的日志區(qū)中的日志記錄、所述生成的日志記錄和有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)重新組織數(shù)據(jù)具體包括:
      [0019]步驟A:讀取所述Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù);
      [0020]步驟B:逐條讀取所述Flash頁面的日志區(qū)中的日志記錄和所述生成的日志記錄,按照日志記錄中的第一頁內(nèi)偏移地址,用日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應的數(shù)據(jù);
      [0021]進一步地,所述步驟B具體包括:
      [0022]步驟B1:順序讀取所述Flash頁面的日志區(qū)中的一條日志記錄;
      [0023]步驟B2:按照讀取到的日志記錄中的第一頁內(nèi)偏移地址,用讀取到的日志記錄中的待寫入數(shù)據(jù)更新所述有效數(shù)據(jù)中的相應數(shù)據(jù);
      [0024]步驟B3:判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄,是則返回執(zhí)行步驟B1,否則執(zhí)行步驟B4 ;
      [0025]步驟B4:讀取所述生成的日志記錄,按照所述生成的日志記錄中的第一頁內(nèi)偏移地址,用所述生成的日志記錄中的待寫入數(shù)據(jù)更新所述有效數(shù)據(jù)中的相應數(shù)據(jù);[0026]其中,所述判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄具體為:判斷讀取到的日志記錄之后是否為至少兩個字節(jié)的OxFF,是則所述Flash頁面的日志區(qū)中沒有未讀取的日志記錄,否則所述Flash頁面的日志區(qū)中還有未讀取的日志記錄。
      [0027]另一方面,本發(fā)明還提供了一種基于大頁面Flash的數(shù)據(jù)讀取方法,其基本實施過程如下:
      [0028]一種基于大頁面Flash的數(shù)據(jù)讀取方法,包括根據(jù)讀取地址得到物理頁號和第二頁內(nèi)偏移地址,讀取大頁面Flash中的數(shù)據(jù);其特征在于,所述讀取大頁面Flash中的數(shù)據(jù)具體包括:
      [0029]步驟T1:讀取與所述物理頁號對應的Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù);
      [0030]步驟T2:逐條讀取所述Flash頁面的日志區(qū)中的日志記錄,按照日志記錄中的第一頁內(nèi)偏移地址,用日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應的數(shù)據(jù);
      [0031]步驟T3:返回更新得到的數(shù)據(jù)中與所述第二頁內(nèi)偏移地址和讀取長度相對應的數(shù)據(jù);
      [0032]所述步驟T2具體包括:
      [0033]步驟a:順序讀取所述Flash頁面的日志區(qū)中的一條日志記錄;
      [0034]步驟b:按照讀取到的日志記錄中的第一頁內(nèi)偏移地址,用讀取到的日志記錄中的待寫入數(shù)據(jù)更新所述有效數(shù)據(jù)中的相應數(shù)據(jù);
      [0035]步驟c:判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄,是則返回執(zhí)行步驟a,否則執(zhí)行步驟T3。
      [0036]所述判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄具體為:判斷讀取到的日志記錄之后是否為至少兩個字節(jié)的OxFF,是則所述Flash頁面的日志區(qū)中沒有未讀取的日志記錄,否則所述Flash頁面的日志區(qū)中還有未讀取的日志記錄。
      [0037]本發(fā)明方法的有益效果在于,采用本發(fā)明提供的方法可以提高數(shù)據(jù)更新的效率,特別是在Flash頁面較大,每次更新的數(shù)據(jù)量較小的情況下,能夠大幅提升Flash的性能和壽命。
      【專利附圖】

      【附圖說明】
      [0038]為了更清楚的說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
      [0039]圖1為本發(fā)明實施例一提供的一種基于大頁面Flash的數(shù)據(jù)更新方法的流程圖;
      [0040]圖2為圖1中將所述Flash頁面的有效數(shù)據(jù)區(qū)和日志區(qū)的數(shù)據(jù)重新組織的具體方法流程圖;
      [0041]圖3為本發(fā)明實施例一中所述Flash頁面的頁面示意圖;
      [0042]圖4為本發(fā)明實施例一中將組織得到的數(shù)據(jù)寫入新的空閑頁后新的空閑頁的頁面示意圖;
      [0043]圖5為本發(fā)明實施例二提供的一種基于大頁面Flash的數(shù)據(jù)讀取方法的流程圖;
      [0044]圖6為圖5中步驟b的具體方法流程圖?!揪唧w實施方式】
      [0045]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
      [0046]本發(fā)明提供的一種基于大頁面Flash的數(shù)據(jù)更新和讀取方法,在Flash的物理頁面中劃分出部分冗余區(qū)域作為日志區(qū)域,當需要更新該物理頁面中的數(shù)據(jù)時,在日志區(qū)域中添加一條記錄本次需要更新的內(nèi)容的日志記錄,當日志區(qū)域?qū)憹M后,查找新的空閑頁面,用查找到的空閑頁面替換該物理頁面;當需要讀取該物理頁面中的數(shù)據(jù)時,首先從數(shù)據(jù)區(qū)域讀取內(nèi)容,然后根據(jù)日志區(qū)域中的日志記錄更新讀取到的數(shù)據(jù)內(nèi)容。
      [0047]實施例一
      [0048]參見圖1,本發(fā)明實施例一提供一種基于大頁面Flash的數(shù)據(jù)更新方法,在所述方法中,將大頁面Flash的各Flash頁面劃分為有效數(shù)據(jù)區(qū)和日志區(qū),例如,對于一個4KB的頁面,劃分出3KB為有效數(shù)據(jù)區(qū),剩余的1KB冗余區(qū)域作為日志區(qū),當向所述大頁面Flash中寫入數(shù)據(jù)(以下稱要寫入的數(shù)據(jù)為待寫入數(shù)據(jù))時,調(diào)用寫入函數(shù),向所述寫入函數(shù)中傳入待寫入數(shù)據(jù)、待寫入數(shù)據(jù)的長度和寫入地址(該寫入地址為邏輯地址),所述寫入函數(shù)根據(jù)所述寫入地址計算出邏輯頁號和第一頁內(nèi)偏移地址,在邏輯頁號物理頁號映射表中查找與所述邏輯頁號對應的物理頁號,執(zhí)行向所述物理頁號對應的Flash頁面中寫入待寫入數(shù)據(jù)操作,所述寫入待寫入數(shù)據(jù)操作包括以下步驟:
      [0049]步驟A:判斷所述Flash頁面是否是空閑頁,是則將待寫入數(shù)據(jù)寫入到所述Flash頁面的有效數(shù)據(jù)區(qū),結束;否則執(zhí)行步驟B ;
      [0050]具體地,判斷所述Flash頁面是否是空閑頁包括:檢索所述Flash頁面的日志區(qū),判斷所述日志區(qū)中的非空閑標志是否置位,是則所述Flash頁面不是空閑頁,否則所述Flash頁面是空閑頁;
      [0051]當所述Flash頁面是空閑頁,將待寫入數(shù)據(jù)寫入所述Flash頁面的有效數(shù)據(jù)區(qū)時還包括:置位所述Flash頁面的日志區(qū)中的非空閑標志;
      [0052]例如,本實施例中,設置日志區(qū)的前兩個字節(jié)為非空閑標志,當日志區(qū)的前2個字節(jié)的值為0x5AA5時表示非空閑標志置位,當前兩個字節(jié)的值不為0x5AA5時表示非空閑標志復位;
      [0053]或者,判斷所述Flash頁面是否是空閑頁包括:讀取所述Flash頁面從起始地址開始的預設個字節(jié)的數(shù)據(jù),判斷讀取到的各個字節(jié)是否均為OxFF,是則所述Flash頁面是空閑頁,否則所述Flash頁面不是空閑頁;其中,所述預設個字節(jié)為若干個字節(jié),通常為兩個及以上字節(jié);
      [0054]例如,本實施例中,讀取所述Flash頁面從起始地址開始的兩個字節(jié)的數(shù)據(jù),若讀取到的數(shù)據(jù)為OxFFFF則所述Flash頁面為空閑頁,否則所述Flash頁面不為空閑頁;
      [0055]又或者,判斷所述Flash頁面是否是空閑頁包括:讀取所述Flash頁面從第一頁內(nèi)偏移地址開始的預設個字節(jié)的數(shù)據(jù),判斷讀取到的各個字節(jié)是否均為OxFF,是則所述Flash頁面是空閑頁,否則所述Flash頁面不是空閑頁;其中,所述預設個字節(jié)為若干個字節(jié),通常為兩個及以上字節(jié);
      [0056]例如,本實施例中,讀取所述Flash頁面從第一頁內(nèi)偏移地址開始的三個字節(jié)的數(shù)據(jù),若讀取到的數(shù)據(jù)為OxFFFFFF則所述Flash頁面為空閑頁。
      [0057]步驟B:判斷所述Flash頁面的日志區(qū)是否寫滿,是則執(zhí)行步驟F,否則執(zhí)行步驟C ;
      [0058]具體地,判斷所述Flash頁面的日志區(qū)是否寫滿包括:
      [0059]步驟B1:計算所述日志區(qū)已使用的字節(jié)數(shù);
      [0060]步驟B1具體包括:遍歷所述Flash頁面的日志區(qū),記錄各日志記錄的長度,當查找到連續(xù)的至少兩個字節(jié)的OxFF時,計算各日志記錄的長度和,得到所述日志區(qū)已使用的字節(jié)數(shù);
      [0061]步驟B2:判斷所述日志區(qū)已使用的字節(jié)數(shù)是否達到了所述日志區(qū)的大小,是則所述日志區(qū)寫滿,否則所述日志區(qū)未寫滿;
      [0062]例如,本實施例中,日志區(qū)的大小為1KB,SP 1024個字節(jié),當日志區(qū)已使用的字節(jié)數(shù)達到1024個字節(jié)時表示日志區(qū)寫滿,當日志區(qū)已使用的字節(jié)數(shù)未達到1024字節(jié)時,表示日志區(qū)未寫滿;
      [0063]進一步地,本實施例中可以省略步驟B直接執(zhí)行步驟C。
      [0064]步驟C:按照預設格式根據(jù)待寫入數(shù)據(jù)、待寫入數(shù)據(jù)的長度和第一頁內(nèi)偏移地址生成日志記錄;
      [0065]具體地,所述預設格式為待寫入數(shù)據(jù)長度+第一頁內(nèi)偏移地址+待寫入數(shù)據(jù);
      [0066]本實施例中,用兩個字節(jié)的數(shù)據(jù)表示待寫入數(shù)據(jù)的長度,用兩個字節(jié)的數(shù)據(jù)表示第一頁內(nèi)偏移地址,例如,若第一頁內(nèi)偏移地址為0x0400,待寫入數(shù)據(jù)為0x313233343536,則生成的要添加的日志記錄為:0x00060400313233343536。
      [0067]步驟D:計算所述Flash頁面的日志區(qū)剩余空間的大小,判斷所述Flash頁面的日志區(qū)剩余空間的大小是否大于所述日志記錄的長度,是則執(zhí)行步驟E,否則執(zhí)行步驟F ;
      [0068]具體地,計算所述Flash頁面的日志區(qū)的剩余空間包括:遍歷所述Flash頁面的日志區(qū),記錄各日志記錄的長度,當查找到連續(xù)的至少兩個字節(jié)的OxFF時,計算各日志記錄的長度和,得到所述日志區(qū)已使用的字節(jié)數(shù),用所述日志區(qū)的大小減去已使用的字節(jié)數(shù)得到所述日志區(qū)剩余空間的大??;
      [0069]本實施例中,用兩個字節(jié)的數(shù)據(jù)表示待寫入數(shù)據(jù)的長度,用兩個字節(jié)的數(shù)據(jù)表示頁內(nèi)偏移地址,所述日志記錄的長度等于待寫入數(shù)據(jù)的長度加上4個字節(jié);例如,若待寫入數(shù)據(jù)的長度為6個字節(jié),則要添加的日志記錄的長度為10個字節(jié)。
      [0070]步驟E:將生成的日志記錄寫入到所述Flash頁面的日志區(qū),結束;
      [0071]步驟F:查找新的空閑頁,將所述Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)、日志區(qū)中的日志記錄以及生成的日志記錄重新組織;
      [0072]參見圖2,本實施例中,將所述Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)、日志區(qū)中的日志記錄以及生成的日志記錄重新組織包括:
      [0073]步驟F1:讀取所述Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù);
      [0074]步驟F2:順序讀取所述Flash頁面的日志區(qū)中的一條日志記錄;
      [0075]步驟F3:按照所述日志記錄中的第一頁內(nèi)偏移地址,用所述日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應數(shù)據(jù);
      [0076]例如,若讀取到的日志記錄為0x00060400313233343536,則將有效數(shù)據(jù)中的第1025個字節(jié)至第1030個字節(jié)的數(shù)據(jù)更新為0x313233343536 ;
      [0077]步驟F4:判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄,是則返回步驟F2,否則執(zhí)行步驟F5;
      [0078]判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄包括:判斷所述日志記錄之后是否為至少兩個字節(jié)的OxFF,是則所述Flash頁面的日志區(qū)中沒有未讀取的日志記錄,否則所述Flash頁面的日志區(qū)中還有未讀取的日志記錄;
      [0079]步驟F5:讀取生成的日志記錄;
      [0080]步驟F6:按照所述生成的日志記錄中的第一頁內(nèi)偏移地址,用所述生成的日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應數(shù)據(jù),組織過程結束;
      [0081]本實施例中,步驟F中還包括用新空閑頁的物理頁號替換邏輯頁號物理頁號映射表中所述Flash頁面的物理頁號。
      [0082]步驟G:將組織得到的數(shù)據(jù)寫入新的空閑頁的有效數(shù)據(jù)區(qū),結束。
      [0083]具體地,若本實施例中用非空閑標志標識當前頁面是否為空閑頁時,將待寫入數(shù)據(jù)寫入新的空閑頁的有效數(shù)據(jù)區(qū)時還包括,將所述新的空閑頁中的非空閑標志置位;
      [0084]例如,參見圖3,本實施例中,所述Flash頁面的首地址為0x4000,大小為4KB,所述Flash頁面的有效數(shù)據(jù)區(qū)為地址0x4000—0x5000對應的區(qū)域,大小為3KB,所述Flash頁面的日志區(qū)為地址0x5000—0x5400對應的區(qū)域,有效數(shù)據(jù)區(qū)
      中的數(shù)據(jù)為0x1111111111......(共1024個字節(jié)的11) 2222222222......(共
      1024個字節(jié)的22) 3333333333......(共1024個字節(jié)的33),日志區(qū)中的數(shù)據(jù)為
      0x5AA508000000444444444444—(共 2048 個字節(jié)的 44) 04000800555555555555...(共1024個字節(jié)的55),即日志區(qū)中共兩條記錄:0x08000000444444444444...和0x04000800555555555555...,本次數(shù)據(jù)更新過程中生成的日志記錄為0x00060400313233343536 ;將有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)、日志區(qū)中的日志記錄以及生
      成的日志記錄重新組織得到的數(shù)據(jù)為:0x4444444444......(共1024個字節(jié)的44)
      313233343536444444444444 (共 1018 個字節(jié)的 44) 5555555555......(共 1024 個字節(jié)的
      55),查找到的新空閑頁的首地址為0x6000,將組織得到的數(shù)據(jù)寫入到新空閑頁的有效數(shù)據(jù)區(qū)后,新空閑頁中的數(shù)據(jù)如圖4所示。
      [0085]實施例二
      [0086]參見圖5,本實施例二提供一種基于大頁面Flash的數(shù)據(jù)讀取方法,本方法中大頁面Flash采用實施例中提供的方法進行數(shù)據(jù)更新;當讀取所述大頁面Flash中的數(shù)據(jù)時,調(diào)用讀取函數(shù),向所述寫入函數(shù)中傳入讀取地址(該讀取地址為邏輯地址)和讀取長度,所述讀取函數(shù)根據(jù)所述讀取地址計算出邏輯頁號和第二頁內(nèi)偏移地址,在邏輯頁號物理頁號映射表中查找與所述邏輯頁號對應的物理頁號,執(zhí)行讀取所述物理頁號對應的Flash頁面中的數(shù)據(jù)的操作,所述操作包括以下步驟:
      [0087]步驟a:讀取所述Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù);
      [0088]步驟b:逐條讀取所述Flash頁面的日志區(qū)中的日志記錄,按照各日志記錄中的第一頁內(nèi)偏移地址,用各日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應數(shù)據(jù);[0089]參見圖6,本實施例中,步驟b具體包括:
      [0090]步驟bl:順序讀取所述Flash頁面的日志區(qū)中的一條日志記錄;
      [0091]步驟b2:按照所述日志記錄中的第一頁內(nèi)偏移地址,用所述日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應數(shù)據(jù);
      [0092]例如,本實施例中,從所述Flash頁面的有效數(shù)據(jù)區(qū)中讀取到的有效數(shù)據(jù)
      為 0x111111111111......(共 1024 個字節(jié)的 11) 222222222222......(共 1024 個
      字節(jié)的22) 333333333333......(共1024個字節(jié)的33),若讀取到一條日志記錄為
      0x00060400313233343536,則將有效數(shù)據(jù)中的第1025個字節(jié)至1030個字節(jié)的數(shù)據(jù)更新
      為0x313233343536,更新之后的有效數(shù)據(jù)為0x111111111111......(共1024個字節(jié))
      3132333435362222......(共 1018 個字節(jié)的 22) 333333333333......(共 1024 個字節(jié))。
      [0093]步驟b3:判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄,是則返回步驟bl,否則執(zhí)行步驟C。
      [0094]具體地,判斷所述Flash頁面的日志區(qū)中是否還有日志記錄包括:判斷所述日志記錄之后是否為至少兩個字節(jié)的OxFF,是則所述Flash頁面的日志區(qū)中沒有未讀取的日志記錄,否則所述Flash頁面的日志區(qū)中還有未讀取的日志記錄;
      [0095]步驟c:返回更新得到的數(shù)據(jù)中與所述第二頁內(nèi)偏移地址和所述讀取長度相對應的數(shù)據(jù)。
      [0096]例如,更新得到的數(shù)據(jù)為0x111111111111......(共1024個字節(jié))
      3132333435362222......(共 1018 個字節(jié)的 22) 333333333333......(共 1024 個字節(jié)),
      若所述頁內(nèi)偏移地址為0x0002,讀取長度為8個字節(jié),則將更新得到的數(shù)據(jù)中的第3個字節(jié)至第10個字節(jié)返回。
      [0097]以上所述的實施例只是本發(fā)明較優(yōu)選的【具體實施方式】,本領域的技術人員在本發(fā)明技術方案范圍內(nèi)進行的通常變化和替換都應包含在本發(fā)明的保護范圍內(nèi)。
      【權利要求】
      1.一種基于大頁面Flash的數(shù)據(jù)更新方法,包括:根據(jù)寫入地址得到物理頁號和第一頁內(nèi)偏移地址,向大頁面Flash中寫入待寫入數(shù)據(jù);其特征在于,所述大頁面Flash的每個Flash頁面被劃分為有效數(shù)據(jù)區(qū)和日志區(qū),所述向所述大頁面Flash中寫入所述待寫入數(shù)據(jù)具體包括:步驟S1:判斷與所述物理頁號對應的Flash頁面是否為空閑頁,是則將所述待寫入數(shù)據(jù)寫入到所述Flash頁面的有效數(shù)據(jù)區(qū),結束;否則執(zhí)行步驟S2 ;步驟S2:按照預設格式根據(jù)所述待寫入數(shù)據(jù)、所述待寫入數(shù)據(jù)的長度和所述第一頁內(nèi)偏移地址生成日志記錄;步驟S3:計算所述Flash頁面的日志區(qū)的剩余空間的大小,判斷所述Flash頁面的日志區(qū)的剩余空間是否大于所述日志記錄的長度,是則將所述生成的日志記錄寫入到所述Flash頁面的日志區(qū),結束;否則執(zhí)行步驟S4 ;步驟S4:在所述大頁面Flash中查找新的空閑頁,根據(jù)所述Flash頁面的日志區(qū)中的日志記錄、所述生成的日志記錄和有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)重新組織數(shù)據(jù),將組織得到的數(shù)據(jù)寫入所述新的空閑頁的有效數(shù)據(jù)區(qū),結束。
      2.如權利要求1所述方法,其特征在于,所述判斷與所述物理頁號對應的Flash頁面是否為空閑頁具體包括:檢索所述Flash頁面的日志區(qū),判斷所述Flash頁面的日志區(qū)中的非空閑標志是否置位,是則所述Flash頁面不是空閑頁,否則所述Flash頁面是空閑頁;相應地,所述將組織得到的數(shù)據(jù)寫入所述新的空閑頁的有效數(shù)據(jù)區(qū)之后還包括:置位所述新的空閑頁的日志區(qū)中的非空閑標志。
      3.如權利要求2所述的方法,其特征在于,所述判斷與所述物理頁號對應的Flash頁面是否為空閑頁之前包括:設置各Flash頁面的日志區(qū)的前兩個字節(jié)為非空閑標志,當各Flash頁面的前兩個字節(jié)上的數(shù)據(jù)為預設數(shù)據(jù)時所述非空閑標志置位,否則所述非空閑標志復位;相應地,所述置位所述新的空閑頁日志區(qū)中的非空閑標志:將所述新的空閑頁日志區(qū)的前兩個字節(jié)上的數(shù)據(jù)修改為所述預設數(shù)據(jù)。
      4.如權利要求1所述的方法,其特征在于,所述判斷與所述物理頁號對應的Flash頁面是否為空閑頁具體包括:讀取所述Flash頁面從起始地址開始的預設個字節(jié)的數(shù)據(jù),判斷讀取到的各個字節(jié)是否均為OxFF,是則所述Flash頁面是空閑頁,否則所述Flash頁面不是空閑頁。
      5.如權利要求1所述的方法,其特征在于,所述判斷所述物理頁號對應的Flash頁面是否為空閑頁具體包括:讀取 所述Flash頁面從第一頁內(nèi)偏移地址開始的預設個字節(jié)的數(shù)據(jù),判斷讀取到的各個字節(jié)是否均為OxFF,是則所述Flash頁面是空閑頁,否則所述Flash頁面不是空閑頁。
      6.如權利要求1所述的方法,其特征在于,所述步驟S1與步驟S2之間還包括:判斷所述Flash頁面的日志區(qū)是否寫滿,是則執(zhí)行步驟S4,否則執(zhí)行步驟S2。
      7.如權利要求6所述的方法,其特征在于,所述判斷所述Flash頁面的日志區(qū)是否寫滿具體包括:計算所述Flash頁面的日志區(qū)中已使用的字節(jié)數(shù),判斷所述日志區(qū)已使用的字節(jié)數(shù)是否等于所述Flash頁面的日志區(qū)的大小,是則所述Flash頁面的日志區(qū)寫滿;否則所述Flash頁面的日志區(qū)未寫滿。
      8.如權利要求7所述的方法,其特征在于,所述計算所述Flash頁面的日志區(qū)中已使用的字節(jié)數(shù)具體包括:遍歷所述Flash頁面的日志區(qū),記錄所述Flash頁面的日志區(qū)中各日志記錄的長度,當查找到連續(xù)的至少兩個字節(jié)的OxFF時,計算各日志記錄的長度和,得到所述日志區(qū)中已使用的字節(jié)數(shù)。
      9.如權利要求1所述的方法,其特征在于,所述計算所述Flash頁面的日志區(qū)的剩余空間的大小具體包括:遍歷所述Flash頁面的日志區(qū),記錄所述Flash頁面的日志區(qū)中各日志記錄的長度,當查找到連續(xù)的兩個及以上字節(jié)的OxFF時,計算各日志記錄的長度和,得到所述Flash頁面的日志區(qū)中已使用的字節(jié)數(shù),用所述Flash頁面的日志區(qū)的大小減去所述已使用的字節(jié)數(shù),得到所述Flash頁面的日志區(qū)的剩余空間的大小。
      10.如權利要求1所述的方法,其特征在于,所述根據(jù)所述Flash頁面的日志區(qū)中的日志記錄、所述生成的日志記錄和有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù)重新組織數(shù)據(jù)具體包括:步驟A:讀取所述Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù);步驟B:逐條讀取所述Flash頁面的日志區(qū)中的日志記錄和所述生成的日志記錄,按照日志記錄中的第一頁內(nèi)偏移地址,用日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應的數(shù)據(jù)。
      11.如權利要求10所述的方法,其特征在于,所述步驟B具體包括:步驟B1:順序讀取所述Flash頁面的日志區(qū)中的一條日志記錄;步驟B2:按照讀取到的日志記錄中的第一頁內(nèi)偏移地址,用讀取到的日志記錄中的待寫入數(shù)據(jù)更新所述有效數(shù)據(jù)中的相應數(shù)據(jù);步驟B3:判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄,是則返回執(zhí)行步驟B1,否則執(zhí)行步驟B4;步驟B4:讀取所述生成的日志記錄,按照所述生成的日志記錄中的第一頁內(nèi)偏移地址,用所述生成的日志記錄中的待寫入數(shù)據(jù)更新所述有效數(shù)據(jù)中的相應數(shù)據(jù)。
      12.如權利要求11所述的方法,其特征在于,所述判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄具體為:判斷讀取到的日志記錄之后是否為至少兩個字節(jié)的OxFF,是則所述Flash頁面的日志區(qū)中沒有未讀取的日志記錄,否則所述Flash頁面的日志區(qū)中還有未讀取的日志記錄。
      13.一種基于大頁面Flash的數(shù)據(jù)讀取方法,包括根據(jù)讀取地址得到物理頁號和第二頁內(nèi)偏移地址,讀取大頁面Flash中的數(shù)據(jù);其特征在于,所述讀取大頁面Flash中的數(shù)據(jù)具體包括:步驟T1:讀取與所述物理頁號對應的Flash頁面的有效數(shù)據(jù)區(qū)中的有效數(shù)據(jù);步驟T2:逐條讀取所述Flash頁面的日志區(qū)中的日志記錄,按照日志記錄中的第一頁內(nèi)偏移地址,用日志記錄中的待寫入數(shù)據(jù)更新有效數(shù)據(jù)中的相應的數(shù)據(jù);步驟T3:返回更新得到的數(shù)據(jù)中與所述第二頁內(nèi)偏移地址和讀取長度相對應的數(shù)據(jù)。
      14.如權利要求13所述的方法,其特征在于,所述步驟T2具體包括:步驟a:順序讀取所述Flash頁面的日志區(qū)中的一條日志記錄;步驟b:按照讀取到的日志記錄中的第一頁內(nèi)偏移地址,用讀取到的日志記錄中的待寫入數(shù)據(jù)更新所述有效數(shù)據(jù)中的相應數(shù)據(jù);步驟c:判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄,是則返回執(zhí)行步驟a,否則執(zhí)行步驟T3。
      15.如權利要求14所述的方法,其特征在于,所述判斷所述Flash頁面的日志區(qū)中是否還有未讀取的日志記錄具體為:判斷讀取到的日志記錄之后是否為至少兩個字節(jié)的OxFF,是則所述Flash頁面的日志區(qū)中沒有未讀取的日志記錄,否則所述Flash頁面的日志區(qū)中還有未讀取的日志記錄 。
      【文檔編號】G06F12/02GK103645993SQ201310721756
      【公開日】2014年3月19日 申請日期:2013年12月24日 優(yōu)先權日:2013年12月24日
      【發(fā)明者】陸舟, 于華章 申請人:飛天誠信科技股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1