一種基于大頁(yè)面Flash的數(shù)據(jù)更新和讀取方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種基于大頁(yè)面Flash的數(shù)據(jù)更新和讀取方法,屬于存儲(chǔ)器領(lǐng)域。其中,數(shù)據(jù)更新的方法包括:當(dāng)Flash頁(yè)面為空閑頁(yè)或者不為空閑頁(yè)但剩余空間充足時(shí),根據(jù)更新數(shù)據(jù)生成一條更新日志寫(xiě)入Flash頁(yè)面;當(dāng)所述Flash頁(yè)面不為空閑頁(yè)且剩余空間不足時(shí),組織Flash頁(yè)面中的真實(shí)數(shù)據(jù),并根據(jù)真實(shí)數(shù)據(jù)得到一條更新日志寫(xiě)入新的空閑頁(yè);數(shù)據(jù)讀取的方法包括:組織Flash頁(yè)面中的真實(shí)數(shù)據(jù),返回真實(shí)數(shù)據(jù)中的相應(yīng)數(shù)據(jù)。本發(fā)明的有益效果在于:可以提高數(shù)據(jù)更新的效率,特別是在Flash頁(yè)面較大,每次更新的數(shù)據(jù)量較小的情況下,能夠大幅提升Flash的性能和壽命。
【專(zhuān)利說(shuō)明】—種基于大頁(yè)面Flash的數(shù)據(jù)更新和讀取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲(chǔ)器領(lǐng)域,尤其涉及一種基于大頁(yè)面Flash的數(shù)據(jù)更新和讀取方法。
【背景技術(shù)】
[0002]Flash是存儲(chǔ)芯片的一種,F(xiàn)lash存儲(chǔ)器又稱(chēng)閃存,它結(jié)合了 ROM (只讀存儲(chǔ)器)和RAM (隨機(jī)存儲(chǔ)器)的長(zhǎng)處,不僅具備電子可擦除可編程的性能,還可以快速讀取數(shù)據(jù),使數(shù)據(jù)不會(huì)因?yàn)閿嚯姸鴣G失。
[0003]發(fā)明人在實(shí)現(xiàn)本發(fā)明的過(guò)程中發(fā)現(xiàn),現(xiàn)有技術(shù)中至少存在以下不足:有很多Flash芯片的頁(yè)面非常大,例如2KB/4KB,但是應(yīng)用中每次需要更新的內(nèi)容卻比較少,根據(jù)目前通用的方法,每次即使是更新幾個(gè)字節(jié)的數(shù)據(jù),也要重新查找空閑頁(yè)面,然后將原始頁(yè)面的內(nèi)容在RAM中更新后寫(xiě)入新的Flash頁(yè)面,采用這種方法進(jìn)行數(shù)據(jù)更新,效率低,且會(huì)縮短Flash的壽命。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的缺陷,提出一種基于大頁(yè)面Flash的數(shù)據(jù)更新和讀取方法。
[0005]本發(fā)明方法是通過(guò)下述技術(shù)方案實(shí)現(xiàn)的:
[0006]一方面,本發(fā)明提供了一種基于大頁(yè)面Flash的數(shù)據(jù)更新方法,所述方法包括:
[0007]步驟Al:根據(jù)更新地址計(jì)算邏輯頁(yè)號(hào)和第一頁(yè)內(nèi)偏移地址,根據(jù)更新數(shù)據(jù)、更新數(shù)據(jù)的長(zhǎng)度和所述第一頁(yè)內(nèi)偏移地址生成更新日志,并根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0008]步驟A2:判斷所述Flash頁(yè)面是否是空閑頁(yè),是則將所述生成的更新日志寫(xiě)入所述Flash頁(yè)面,結(jié)束;否則執(zhí)行步驟A3 ;
[0009]步驟A3:計(jì)算所述Flash頁(yè)面的空閑區(qū)的大小,并判斷所述Flash頁(yè)面的空閑區(qū)的大小是否大于所述生成的更新日志的長(zhǎng)度,是則將所述生成的更新日志寫(xiě)入所述Flash頁(yè)面的空閑區(qū),結(jié)束;否則執(zhí)行步驟A4 ;
[0010]步驟A4:在所述Flash中查找新的空閑頁(yè),根據(jù)所述Flash頁(yè)面中的更新日志和所述生成的更新日志組織得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù),根據(jù)所述真實(shí)數(shù)據(jù)得到一條更新日志并寫(xiě)入查找到的新的空閑頁(yè),更新所述邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系,結(jié)束。
[0011]進(jìn)一步地,所述步驟A2和所述步驟A3之間還可以包括:判斷所述Flash頁(yè)面是否寫(xiě)滿(mǎn),是則執(zhí)行步驟A4,否則執(zhí)行步驟A3 ;
[0012]具體地,所述判斷所述Flash頁(yè)面是否寫(xiě)滿(mǎn)具體包括:計(jì)算所述Flash頁(yè)面已使用的字節(jié)數(shù),并判斷所述Flash頁(yè)面已使用的字節(jié)數(shù)是否達(dá)到了所述Flash頁(yè)面的大小,是則所述Flash頁(yè)面寫(xiě)滿(mǎn);否則所述Flash頁(yè)面未寫(xiě)滿(mǎn);其中,所述計(jì)算所述Flash頁(yè)面已使用的字節(jié)數(shù)具體包括:遍歷所述Flash頁(yè)面,記錄所述Flash頁(yè)面中的各更新日志的長(zhǎng)度,當(dāng)查找到連續(xù)不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié)時(shí),計(jì)算各更新日志的長(zhǎng)度和,得到所述Flash頁(yè)面已使用的字節(jié)數(shù)。
[0013]進(jìn)一步地,判斷所述Flash頁(yè)面是否是空閑頁(yè)包括:讀取所述Flash頁(yè)面從起始地址開(kāi)始的第一預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)的數(shù)據(jù),判斷讀取到的各個(gè)字節(jié)數(shù)據(jù)是否均為預(yù)設(shè)值,是則所述Flash頁(yè)面是空閑頁(yè),否則所述Flash頁(yè)面不是空閑頁(yè)。
[0014]進(jìn)一步地,所述計(jì)算所述Flash頁(yè)面的空閑區(qū)的大小具體包括:遍歷所述Flash頁(yè)面,記錄所述Flash頁(yè)面中的各更新日志的長(zhǎng)度,當(dāng)查找到連續(xù)的不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié)時(shí),計(jì)算各更新日志的長(zhǎng)度和,得到所述Flash頁(yè)面已使用的字節(jié)數(shù),用所述Flash頁(yè)面的大小減去所述Flash頁(yè)面已使用的字節(jié)數(shù)得到所述Flash頁(yè)面的空閑區(qū)的大小。
[0015]進(jìn)一步地,所述根據(jù)所述Flash頁(yè)面中的更新日志和所述生成的更新日志組織得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)具體包括:
[0016]步驟B1:初始化大小等于所述Flash頁(yè)面大小的內(nèi)存空間;
[0017]步驟B2:逐條讀取所述Flash頁(yè)面中的更新日志,并根據(jù)讀取到的更新日志中的第一頁(yè)內(nèi)偏移地址,用讀取到的更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù);
[0018]步驟B3:讀取所述生成的更新日志,根據(jù)所述生成的更新日志中的第一頁(yè)內(nèi)偏移地址,用所述生成的更新日志中的更新數(shù)據(jù)替換內(nèi)存空間中的相應(yīng)數(shù)據(jù),得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù);
[0019]具體地,所述步驟B2具體包括:
[0020]步驟Cl:順序讀取一條所述Flash頁(yè)面中的更新日志,作為當(dāng)前更新日志;
[0021]步驟C2:按照當(dāng)前更新日志中的第一頁(yè)內(nèi)偏移地址,用當(dāng)前更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù);
[0022]步驟C3:判斷所述Flash頁(yè)面中是否還有未讀取的更新日志,是則返回步驟Cl,否則執(zhí)行步驟B3 ;
[0023]其中,所述判斷所述Flash頁(yè)面中是否還有未讀取的更新日志具體包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志。
[0024]進(jìn)一步地,所述根據(jù)所述真實(shí)數(shù)據(jù)得到一條更新日志具體包括:根據(jù)所述真實(shí)數(shù)據(jù)的長(zhǎng)度、所述真實(shí)數(shù)據(jù)和所述新的空閑頁(yè)的數(shù)據(jù)起始地址得到一條更新日志。
[0025]進(jìn)一步地,所述根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面具體包括:查找邏輯頁(yè)號(hào)物理頁(yè)號(hào)表,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào),在Flash中查找與所述物理頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)面,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0026]具體地,所述更新邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系具體包括:將所述邏輯頁(yè)號(hào)物理頁(yè)號(hào)表中,與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào)由所述Flash頁(yè)面的頁(yè)號(hào)修改為所述新的空閑頁(yè)的頁(yè)號(hào)。
[0027]另一方面,本發(fā)明還提供了一種基于大頁(yè)面Flash的數(shù)據(jù)讀取方法,所述方法包括:
[0028]步驟Dl:根據(jù)讀取地址計(jì)算邏輯頁(yè)號(hào)和第二頁(yè)內(nèi)偏移地址,根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0029]步驟D2:初始化大小等于所述Flash頁(yè)面大小的內(nèi)存空間,逐條讀取所述Flash頁(yè)面中的更新日志,并根據(jù)讀取到的更新日志中的第一頁(yè)內(nèi)偏移地址,用讀取到的更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù),得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù);
[0030]步驟D3:返回所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)中與所述第二頁(yè)內(nèi)偏移地址和讀取長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù)。
[0031]進(jìn)一步地,所述步驟D2具體包括:
[0032]步驟El:順序讀取一條所述Flash頁(yè)面中的更新日志,作為當(dāng)前更新日志;
[0033]步驟E2:按照當(dāng)前更新日志中的第一頁(yè)內(nèi)偏移地址,用當(dāng)前更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù);
[0034]步驟E3:判斷所述Flash頁(yè)面中是否還有未讀取的更新日志,是則返回步驟El,否則執(zhí)行步驟D3 ;
[0035]優(yōu)選地,所述判斷所述Flash頁(yè)面中是否還有未讀取的更新日志具體包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志。
[0036]進(jìn)一步地,所述判斷所述Flash頁(yè)面中是否還有未讀取的更新日志具體包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志。
[0037]本發(fā)明方法的有益效果在于,采用本發(fā)明提供的方法可以提高數(shù)據(jù)更新的效率,特別是在Flash頁(yè)面較大,每次更新的數(shù)據(jù)量較小的情況下,能夠大幅提升Flash的性能和壽命。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0038]為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1為本發(fā)明實(shí)施例一提供的一種基于大頁(yè)面Flash的數(shù)據(jù)更新方法的流程圖;
[0040]圖2為本發(fā)明實(shí)施例一中所述Flash頁(yè)面為空閑頁(yè)時(shí)的示意圖;
[0041]圖3為向圖2所示的Flash頁(yè)面中寫(xiě)入更新日志后所述Flash頁(yè)面的示意圖;
[0042]圖4為本發(fā)明實(shí)施例一中所述Flash頁(yè)面為空閑頁(yè)時(shí)的一種不意圖;
[0043]圖5為向圖4所示的Flash頁(yè)面中寫(xiě)入更新日志后所述Flash頁(yè)面的示意圖;
[0044]圖6為本發(fā)明實(shí)施例一中所述Flash頁(yè)面為空閑頁(yè)時(shí)的另一種不意圖;
[0045]圖7為本發(fā)明實(shí)施例一中步驟111的細(xì)化流程圖;
[0046]圖8為本發(fā)明實(shí)施例一中步驟111-2的細(xì)化流程圖;
[0047]圖9為本發(fā)明實(shí)施例一中新的空閑頁(yè)的示意圖;
[0048]圖10為向圖9所不的新的空閑頁(yè)與入更新日志后所述新的空閑頁(yè)的不意圖;
[0049]圖11為本發(fā)明實(shí)施例二提供的一種基于大頁(yè)面Flash的數(shù)據(jù)讀取方法的流程圖;[0050]圖12為本發(fā)明實(shí)施例二中步驟204的細(xì)化流程圖。
【具體實(shí)施方式】
[0051]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0052]本發(fā)明提供的一種基于大頁(yè)面Flash的數(shù)據(jù)更新和讀取方法,將Flash的整個(gè)物理頁(yè)面作為日志區(qū)域,用于存儲(chǔ)更新日志,當(dāng)需要更新該物理頁(yè)面中的數(shù)據(jù)時(shí),直接添加一條記錄本次要寫(xiě)入的數(shù)據(jù)或需要更新的內(nèi)容的更新日志到該物理頁(yè)面中,當(dāng)該物理頁(yè)面寫(xiě)滿(mǎn)后,查找新的空閑頁(yè)面,用查找到的空閑頁(yè)面替換該物理頁(yè)面;當(dāng)需要讀取該物理頁(yè)面中的數(shù)據(jù)時(shí),逐條讀取該物理頁(yè)面中的日志,整理得到該物理頁(yè)面中的真實(shí)數(shù)據(jù),返回要讀取的內(nèi)容。
[0053]實(shí)施例一
[0054]參見(jiàn)圖1,本發(fā)明實(shí)施例一提供一種基于大頁(yè)面Flash的數(shù)據(jù)更新方法,包括調(diào)用更新函數(shù),向所述更新函數(shù)中傳入更新數(shù)據(jù)、更新數(shù)據(jù)的長(zhǎng)度和更新地址(該更新地址為邏輯地址),所述更新函數(shù)接收到傳入的更新數(shù)據(jù)、更新數(shù)據(jù)的長(zhǎng)度和更新地址后執(zhí)行以下步驟:
[0055]步驟101:根據(jù)更新地址計(jì)算邏輯頁(yè)號(hào)和頁(yè)內(nèi)偏移地址;
[0056]例如,本實(shí)施例中,物理頁(yè)面和邏輯頁(yè)面的大小均為4KB,更新地址為0x1400,邏輯頁(yè)號(hào)=I 0x1400/0x1000 I =1,頁(yè)內(nèi)偏移地址=0x1400-1*0x1000=0x0400。
[0057]步驟102:查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0058]具體地,本實(shí)施例中,步驟102包括,根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0059]優(yōu)選地,本實(shí)施例中,步驟102包括,查找邏輯頁(yè)號(hào)物理頁(yè)號(hào)表,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào),在Flash中查找與所述物理頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)面,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面。
[0060]步驟103:根據(jù)更新數(shù)據(jù)、更新數(shù)據(jù)的長(zhǎng)度和所述頁(yè)內(nèi)偏移地址生成更新日志;
[0061]具體地,本實(shí)施例中,步驟103包括:按照“更新數(shù)據(jù)的長(zhǎng)度+頁(yè)內(nèi)偏移地址+更新數(shù)據(jù)”的格式生成更新日志;
[0062]優(yōu)選地,本實(shí)施例中,用兩個(gè)字節(jié)的數(shù)據(jù)表示更新數(shù)據(jù)的長(zhǎng)度,用兩個(gè)字節(jié)的數(shù)據(jù)表示頁(yè)內(nèi)偏移地址;
[0063]例如,本實(shí)施例中,若頁(yè)內(nèi)偏移地址為0x0400,更新數(shù)據(jù)為Ox 31 32 33 343536,則生成的更新日志為:0x 00 06 04 00 31 32 33 34 35 36 ;
[0064]更優(yōu)地,本實(shí)施例中,更新日志的最末端還可以設(shè)置校驗(yàn)位;
[0065]進(jìn)一步地,本實(shí)施例中,步驟102和步驟103的順序可調(diào)換。
[0066]步驟104:判斷所述Flash頁(yè)面是否是空閑頁(yè),是則執(zhí)行步驟105,否則執(zhí)行步驟106 ;
[0067]具體地,本實(shí)施例中,判斷所述Flash頁(yè)面是否是空閑頁(yè)包括:讀取所述Flash頁(yè)面從起始地址開(kāi)始的第一預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)的數(shù)據(jù),判斷讀取到的各個(gè)字節(jié)數(shù)據(jù)是否均為預(yù)設(shè)值,是則所述Flash頁(yè)面是空閑頁(yè),否則所述Flash頁(yè)面不是空閑頁(yè);
[0068]優(yōu)選地,本實(shí)施例中,所述第一預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)為兩個(gè)字節(jié);預(yù)設(shè)值為OxFF ;
[0069]例如,本實(shí)施例中,讀取所述Flash頁(yè)面從起始地址開(kāi)始的兩個(gè)字節(jié)的數(shù)據(jù),若讀取到的數(shù)據(jù)為OxFFFF則所述Flash頁(yè)面為空閑頁(yè),否則所述Flash頁(yè)面不為空閑頁(yè)。
[0070]步驟105:將生成的更新日志寫(xiě)入所述Flash頁(yè)面,結(jié)束;
[0071]例如,本實(shí)施例中:所述Flash頁(yè)面為如圖2所示的空閑頁(yè);生成的更新日志為Ox00 06 04 00 31 32 33 34 35 36 ;則將生成的更新日志寫(xiě)入所述Flash頁(yè)面之后,所述Flash頁(yè)面如圖3所示。
[0072]步驟106:判斷所述Flash頁(yè)面是否寫(xiě)滿(mǎn),是則執(zhí)行步驟110,否則執(zhí)行步驟107 ;
[0073]具體地,本實(shí)施例中,判斷所述Flash頁(yè)面是否寫(xiě)滿(mǎn)包括:
[0074]步驟106-1:計(jì)算所述Flash頁(yè)面已使用的字節(jié)數(shù);
[0075]具體地,步驟106-1包括:遍歷所述Flash頁(yè)面,記錄所述Flash頁(yè)面中的各更新日志的長(zhǎng)度,當(dāng)查找到連續(xù)不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié)時(shí),計(jì)算各更新日志的長(zhǎng)度和,得到所述Flash頁(yè)面已使用的字節(jié)數(shù);
[0076]優(yōu)選地,第二預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)為兩個(gè)字節(jié),預(yù)設(shè)值為OxFF ;
[0077]步驟106-2:判斷所述Flash頁(yè)面已使用的字節(jié)數(shù)是否達(dá)到了所述Flash頁(yè)面的大小,是則所述Flash頁(yè)面寫(xiě)滿(mǎn),否則所述Flash頁(yè)面未寫(xiě)滿(mǎn);
[0078]例如,本實(shí)施例中,所述Flash頁(yè)面的大小為4KB,即4096個(gè)字節(jié),當(dāng)所述Flash頁(yè)面已使用的字節(jié)數(shù)達(dá)到4096個(gè)字節(jié)時(shí)表示日志區(qū)寫(xiě)滿(mǎn),當(dāng)所述Flash頁(yè)面已使用的字節(jié)數(shù)未達(dá)到4096字節(jié)時(shí),表示所述Flash頁(yè)面未寫(xiě)滿(mǎn);
[0079]進(jìn)一步地,本實(shí)施例中,可以省略步驟106直接執(zhí)行步驟107。
[0080]步驟107:計(jì)算所述Flash頁(yè)面的空閑區(qū)的大?。?br>
[0081]具體地,本實(shí)施例中,計(jì)算所述Flash頁(yè)面的空閑區(qū)的大小包括:遍歷所述Flash頁(yè)面,記錄所述Flash頁(yè)面中的各更新日志的長(zhǎng)度,當(dāng)查找到連續(xù)的不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié)時(shí),計(jì)算各更新日志的長(zhǎng)度和,得到所述Flash頁(yè)面已使用的字節(jié)數(shù),用所述Flash頁(yè)面的大小減去所述Flash頁(yè)面已使用的字節(jié)數(shù)得到所述Flash頁(yè)面的空閑區(qū)的大小;
[0082]優(yōu)選地,本實(shí)施例中,第二預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)為兩個(gè)字節(jié),預(yù)設(shè)值為OxFF ;
[0083]例如,本實(shí)施例中,若計(jì)算得到的所述Flash頁(yè)面已使用的字節(jié)數(shù)為32個(gè)字節(jié),所述Flash頁(yè)面的大小為4096個(gè)字節(jié),則所述Flash頁(yè)面的空閑區(qū)的大小=4096個(gè)字節(jié)-32個(gè)字節(jié)=4064個(gè)字節(jié)。
[0084]步驟108:判斷所述Flash頁(yè)面的空閑區(qū)的大小是否大于生成的更新日志的長(zhǎng)度,是則執(zhí)行步驟109,否則執(zhí)行步驟110 ;
[0085]步驟109:將生成的更新日志寫(xiě)入到所述Flash頁(yè)面的空閑區(qū),結(jié)束;
[0086]例如,本實(shí)施例中,所述Flash頁(yè)面如圖4所示,包含兩條更新日志,分別為:0x 8000 00 00 44 44 44 44 44 44...(共 2048 個(gè)字節(jié)的 0x44)和 Ox 04 00 80 00 5555 5555 55 55...(共 2048 個(gè)字節(jié)的 0x55),生成的更新日志為 Ox 00 06 04 00 31 3233 34 3536,則將生成的更新日志寫(xiě)入到所述Flash頁(yè)面的空閑區(qū)后,所述Flash頁(yè)面如圖5所示。[0087]步驟110:查找新的空閑頁(yè);
[0088]本實(shí)施例中,若查找不到新的空閑頁(yè)則寫(xiě)入失敗,結(jié)束。
[0089]步驟111:根據(jù)所述Flash頁(yè)面中的更新日志和生成的更新日志組織得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù);
[0090]例如,本實(shí)施例中,所述Flash頁(yè)面如圖6所示,包括三條更新日志:0x 8000 0044 44 44 44 44 44...(共 2048 個(gè)字節(jié)的 0x44)、0x 00 80 00 55 55 55 55 55...(共1024個(gè)字節(jié)的 0x55)和 0x03EE0C 00 66 66 66 66 66 66...(共 1006 個(gè)字節(jié)的 0x66),生成的更新日志為Ox 00 06 04 00 31 32 33 34 35 36,則組織得到的所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)為:0x 44 44 44...(共 1024 個(gè)字節(jié)的 0x44)31 32 33 34 35 36 44 44 44...(共1018 個(gè)字節(jié)的 0x44)55 55 55...(共 1024 個(gè)字節(jié)的 0x55)66 66 66...(共 1006 個(gè)字節(jié)的 0x66);
[0091]如圖7所示,本實(shí)施例中,步驟111具體包括:
[0092]步驟111-1:初始化大小等于所述Flash頁(yè)面大小的內(nèi)存空間;
[0093]具體地,本實(shí)施例中,初始化的內(nèi)存空間中的數(shù)據(jù)均為預(yù)設(shè)值;
[0094]優(yōu)選地,本實(shí)施例中,預(yù)設(shè)值為OxFF ;
[0095]例如,本實(shí)施例中,所述Flash頁(yè)面的大小為4KB,則初始化4KB大小的內(nèi)存空間。
[0096]步驟111-2:逐條讀取所述Flash頁(yè)面中的更新日志,并根據(jù)更新日志中的頁(yè)內(nèi)偏移地址,用更新日志中的更新數(shù)據(jù)替換內(nèi)存空間中的相應(yīng)數(shù)據(jù);
[0097]具體地,如圖8所示,本實(shí)施例中,步驟111-2包括:
[0098]步驟al:順序讀取一條所述Flash頁(yè)面中的更新日志,作為當(dāng)前更新日志;
[0099]步驟a2:按照當(dāng)前更新日志中的頁(yè)內(nèi)偏移地址,用當(dāng)前更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù);
[0100]例如,本實(shí)施例中,若當(dāng)前更新日志為Ox 80 00 00 00 44 44 44...(共2048個(gè)字節(jié)的0x44),則當(dāng)前更新日志中的頁(yè)內(nèi)偏移地址為0x0000,更新數(shù)據(jù)為Ox 444444...(共2048個(gè)字節(jié)的0x44),按照當(dāng)前更新日志中的頁(yè)內(nèi)偏移地址0x0000,將所述內(nèi)存空間中的第I個(gè)字節(jié)至第2048個(gè)字節(jié)的數(shù)據(jù)替換為Ox 44 44 44...(共2048個(gè)字節(jié)的0x44);
[0101]步驟a3:判斷所述Flash頁(yè)面中是否還有未讀取的更新日志,是則返回步驟al,否則執(zhí)行步驟111-3 ;
[0102]具體地,本實(shí)施例中,判斷所述Flash頁(yè)面中是否還有未讀取的更新日志包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志;
[0103]優(yōu)選地,本實(shí)施例中,第二預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)為兩個(gè)字節(jié),預(yù)設(shè)值為OxFF ;
[0104]步驟111-3:讀取生成的更新日志,根據(jù)生成的更新日志中的頁(yè)內(nèi)偏移地址,用生成的更新日志中的更新數(shù)據(jù)替換內(nèi)存空間中的相應(yīng)數(shù)據(jù),得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)。
[0105]例如,本實(shí)施例中,生成的更新日志為Ox 00 06 04 00 31 32 33 34 35 36,則生成的更新日志中的頁(yè)內(nèi)偏移地址為0x0400,更新數(shù)據(jù)為Ox 31 32 33 34 35 36,按照生成的更新日志中的頁(yè)內(nèi)偏移地址0x0400,將所述內(nèi)存空間中的第1025個(gè)字節(jié)至第1030個(gè)字節(jié)的數(shù)據(jù)替換為Ox 31 32 33 34 35 36。
[0106]步驟112:根據(jù)所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)生成一條更新日志,寫(xiě)入新的空閑頁(yè),更新邏輯頁(yè)號(hào)和物理頁(yè)號(hào)對(duì)應(yīng)關(guān)系,結(jié)束;
[0107]具體地,本實(shí)施例中,根據(jù)所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)生成一條更新日志具體包括:將所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)作為更新數(shù)據(jù),按照“更新數(shù)據(jù)的長(zhǎng)度+頁(yè)內(nèi)偏移地址+更新數(shù)據(jù)”的格式生成更新日志;
[0108]優(yōu)選地,本實(shí)施例中,用兩個(gè)字節(jié)的數(shù)據(jù)表示更新數(shù)據(jù)的長(zhǎng)度,用兩個(gè)字節(jié)的數(shù)據(jù)表示頁(yè)內(nèi)偏移地址;
[0109]例如,本實(shí)施例中,所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)為Ox 44 44 44...(共1024個(gè)字節(jié)的 0x44)31 32 33 34 35 36 44 44 44...(共 1018 個(gè)字節(jié)的 0x44)55 55 55...(共1024個(gè)字節(jié)的0x55) 66 66 66...(共1006個(gè)字節(jié)的0x66),則生成的更新日志為Ox OFEE 00 00 44 44 44...(共 1024 個(gè)字節(jié)的 0x44) 31 32 33 34 35 36 44 44 44...(共1018 個(gè)字節(jié)的 0x44)55 55 55...(共 1024 個(gè)字節(jié)的 0x55)66 66 66...(共 1006 個(gè)字節(jié)的0x66);本實(shí)施例中新的空閑頁(yè)如圖9所示,將根據(jù)所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)生成的更新日志寫(xiě)入所述新的空閑頁(yè)之后,所示新的空閑頁(yè)如圖10所示;
[0110]更優(yōu)地,本實(shí)施例中,更新日志的最末端還可以設(shè)置校驗(yàn)位;
[0111]具體地,本實(shí)施例中,更新邏輯頁(yè)號(hào)和物理頁(yè)號(hào)對(duì)應(yīng)關(guān)系具體包括:將邏輯頁(yè)號(hào)物理頁(yè)號(hào)表中,與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào)由所述Flash頁(yè)面的頁(yè)號(hào)修改為所述新的空閑頁(yè)的頁(yè)號(hào);
[0112]本實(shí)施例中,步驟112之后,對(duì)所述Flash頁(yè)面的處理流程不在本專(zhuān)利范疇內(nèi),其中,對(duì)所述Flash頁(yè)面的處理流程包括但不限于,清除所述Flash頁(yè)面中的數(shù)據(jù),使之成為空閑頁(yè);進(jìn)一步地,還可以設(shè)置掉電保護(hù)機(jī)制,即在步驟112之前,先將所述Flash頁(yè)面更新成備份頁(yè),然后執(zhí)行步驟112,待執(zhí)行完步驟112后再清除所述Flash頁(yè)面中的數(shù)據(jù),使之成為空閑頁(yè)。
[0113]實(shí)施例二
[0114]參見(jiàn)圖11,本實(shí)施例二提供一種基于大頁(yè)面Flash的數(shù)據(jù)讀取方法,本實(shí)施例二中的大頁(yè)面Flash采用實(shí)施例一中提供的方法進(jìn)行數(shù)據(jù)更新;所述方法包括調(diào)用讀取函數(shù),向所述讀取函數(shù)中傳入讀取地址(該讀取地址為邏輯地址)和讀取長(zhǎng)度,所述讀取函數(shù)接收到傳入的讀取地址和讀取長(zhǎng)度后執(zhí)行以下步驟:
[0115]步驟201:根據(jù)讀取地址計(jì)算邏輯頁(yè)號(hào)和頁(yè)內(nèi)偏移地址;
[0116]例如,本實(shí)施例中,物理頁(yè)面和邏輯頁(yè)面的大小均為4KB,讀取地址為0x1400,邏輯頁(yè)號(hào)=I 0x1400/0x1000 I =1,頁(yè)內(nèi)偏移地址=0x1400-1*0x1000=0x0400。
[0117]步驟202:查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0118]具體地,本實(shí)施例中,步驟202包括,根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面;
[0119]優(yōu)選地,本實(shí)施例中,步驟202包括,查找邏輯頁(yè)號(hào)物理頁(yè)號(hào)表,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào),在Flash中查找與所述物理頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)面,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面。
[0120]步驟203:初始化大小等于所述Flash頁(yè)面大小的內(nèi)存空間;[0121]優(yōu)選地,本實(shí)施例中,初始化的內(nèi)存空間中的數(shù)據(jù)均為OxFF ;
[0122]例如,本實(shí)施例中,所述Flash頁(yè)面的大小為4KB,則初始化4KB大小的內(nèi)存空間。
[0123]步驟204:逐條讀取所述Flash頁(yè)面中的更新日志,并根據(jù)更新日志中的頁(yè)內(nèi)偏移地址,用更新日志中的更新數(shù)據(jù)替換內(nèi)存空間中的相應(yīng)數(shù)據(jù),得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù);
[0124]例如,本實(shí)施例中,所述Flash頁(yè)面中包括三條更新日志:0x 80 00 00 44 444444 44 44...(共 2048 個(gè)字節(jié)的 0x44)、0x 00 80 00 55 55 55 55 55...(共 1024 個(gè)字節(jié)的 0x55)和 Ox 03 EE OC 00 66 66 66 66 66 66...(共 1006 個(gè)字節(jié)的 0x66),生成的更新日志為Ox 00 06 04 00 31 32 33 34 35 36,則組織得到的所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)為:0x 44 44 44...(共 1024 個(gè)字節(jié)的 0x44) 31 32 33 34 35 36 44 44 44...(共1018 個(gè)字節(jié)的 0x44)55 55 55...(共 1024 個(gè)字節(jié)的 0x55)66 66 66...(共 1006 個(gè)字節(jié)的 0x66);
[0125]具體地,如圖12所示,本實(shí)施例中,步驟204包括:
[0126]步驟204-1:順序讀取一條所述Flash頁(yè)面中的更新日志,作為當(dāng)前更新日志;
[0127]步驟204-2:按照當(dāng)前更新日志中的頁(yè)內(nèi)偏移地址,用當(dāng)前更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù);
[0128]例如,本實(shí)施例中,若當(dāng)前更新日志為Ox 80 00 00 00 44 44 44...(共2048個(gè)字節(jié)的0x44),則當(dāng)前更新日志中的頁(yè)內(nèi)偏移地址為0x0000,更新數(shù)據(jù)為Ox 444444...(共2048個(gè)字節(jié)的0x44),按照當(dāng)前更新日志中的頁(yè)內(nèi)偏移地址0x0000,將所述內(nèi)存空間中的第I個(gè)字節(jié)至第2048個(gè)字節(jié)的數(shù)據(jù)替換為Ox 44 44 44...(共2048個(gè)字節(jié)的0x44);
[0129]步驟204-3:判斷所述Flash頁(yè)面中是否還有未讀取的更新日志,是則返回步驟204-1,否則得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù),執(zhí)行步驟205 ;
[0130]具體地,本實(shí)施例中,判斷所述Flash頁(yè)面中是否還有未讀取的更新日志包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志;
[0131]優(yōu)選地,本實(shí)施例中,第二預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)為兩個(gè)字節(jié),預(yù)設(shè)值為OxFF。
[0132]步驟205:返回所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)中與所述頁(yè)內(nèi)偏移地址和所述讀取長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù),結(jié)束。
[0133]例如,所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)為:0x 44 44 44...(共1024個(gè)字節(jié)的0x44)31 32 33 34 35 36 44 44 44...(共 1018 個(gè)字節(jié)的 0x44) 55 55 55...(共 1024 個(gè)字節(jié)的0x55)66 66 66...(共1006個(gè)字節(jié)的0x66),所述頁(yè)內(nèi)偏移地址為0x0400,讀取長(zhǎng)度為8個(gè)字節(jié),則將所述Flash頁(yè)面中的第1025個(gè)字節(jié)至第1032個(gè)字節(jié)(0x31 32 33 34 35 3644 44)返回。
[0134]以上所述的實(shí)施例只是本發(fā)明較優(yōu)選的【具體實(shí)施方式】,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種基于大頁(yè)面Flash的數(shù)據(jù)更新方法,其特征在于,包括: 步驟Al:根據(jù)更新地址計(jì)算邏輯頁(yè)號(hào)和第一頁(yè)內(nèi)偏移地址,根據(jù)更新數(shù)據(jù)、更新數(shù)據(jù)的長(zhǎng)度和所述第一頁(yè)內(nèi)偏移地址生成更新日志,并根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面; 步驟A2:判斷所述Flash頁(yè)面是否是空閑頁(yè),是則將所述生成的更新日志寫(xiě)入所述Flash頁(yè)面,結(jié)束;否則執(zhí)行步驟A3 ; 步驟A3:計(jì)算所述Flash頁(yè)面的空閑區(qū)的大小,并判斷所述Flash頁(yè)面的空閑區(qū)的大小是否大于所述生成的更新日志的長(zhǎng)度,是則將所述生成的更新日志寫(xiě)入所述Flash頁(yè)面的空閑區(qū),結(jié)束;否則執(zhí)行步驟A4 ; 步驟A4:在所述Flash中查找新的空閑頁(yè),根據(jù)所述Flash頁(yè)面中的更新日志和所述生成的更新日志組織得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù),根據(jù)所述真實(shí)數(shù)據(jù)得到一條更新日志并寫(xiě)入查找到的新的空閑頁(yè),更新所述邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系,結(jié)束。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,判斷所述Flash頁(yè)面是否是空閑頁(yè)具體包括:讀取所述Flash頁(yè)面從起始地址開(kāi)始的第一預(yù)設(shè)個(gè)數(shù)個(gè)字節(jié)的數(shù)據(jù),判斷讀取到的各個(gè)字節(jié)數(shù)據(jù)是否均為預(yù)設(shè)值,是則所述Flash頁(yè)面是空閑頁(yè),否則所述Flash頁(yè)面不是空閑頁(yè)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A2和所述步驟A3之間還包括:判斷所述Flash頁(yè)面是否寫(xiě)滿(mǎn),是則執(zhí)行步驟A4,否則執(zhí)行步驟A3。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述判斷所述Flash頁(yè)面是否寫(xiě)滿(mǎn)具體包括:計(jì)算所述Flash頁(yè)面已使用的字節(jié)數(shù),并判斷所述Flash頁(yè)面已使用的字節(jié)數(shù)是否達(dá)到了所述Flash頁(yè)面的大小,是則所述Flash頁(yè)面寫(xiě)滿(mǎn);否則所述Flash頁(yè)面未寫(xiě)滿(mǎn)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述計(jì)算所述Flash頁(yè)面已使用的字節(jié)數(shù)具體包括:遍歷所述Flash頁(yè)面,記錄所述Flash頁(yè)面中的各更新日志的長(zhǎng)度,當(dāng)查找到連續(xù)不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié)時(shí),計(jì)算各更新日志的長(zhǎng)度和,得到所述Flash頁(yè)面已使用的字節(jié)數(shù)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述計(jì)算所述Flash頁(yè)面的空閑區(qū)的大小具體包括:遍歷所述Flash頁(yè)面,記錄所述Flash頁(yè)面中的各更新日志的長(zhǎng)度,當(dāng)查找到連續(xù)的不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié)時(shí),計(jì)算各更新日志的長(zhǎng)度和,得到所述Flash頁(yè)面已使用的字節(jié)數(shù),用所述Flash頁(yè)面的大小減去所述Flash頁(yè)面已使用的字節(jié)數(shù)得到所述Flash頁(yè)面的空閑區(qū)的大小。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述Flash頁(yè)面中的更新日志和所述生成的更新日志組織得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)具體包括: 步驟B1:初始化大小等于所述Flash頁(yè)面大小的內(nèi)存空間; 步驟B2:逐條讀取所述Flash頁(yè)面中的更新日志,并根據(jù)讀取到的更新日志中的第一頁(yè)內(nèi)偏移地址,用讀取到的更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù); 步驟B3:讀取所述生成的更新日志,根據(jù)所述生成的更新日志中的第一頁(yè)內(nèi)偏移地址,用所述生成的更新日志中的更新數(shù)據(jù)替換內(nèi)存空間中的相應(yīng)數(shù)據(jù),得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟B2具體包括:步驟Cl:順序讀取一條所述Flash頁(yè)面中的更新日志,作為當(dāng)前更新日志; 步驟C2:按照當(dāng)前更新日志中的第一頁(yè)內(nèi)偏移地址,用當(dāng)前更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù); 步驟C3:判斷所述Flash頁(yè)面中是否還有未讀取的更新日志,是則返回步驟Cl,否則執(zhí)行步驟B3。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述判斷所述Flash頁(yè)面中是否還有未讀取的更新日志具體包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述真實(shí)數(shù)據(jù)得到一條更新日志具體包括:根據(jù)所述真實(shí)數(shù)據(jù)的長(zhǎng)度、所述真實(shí)數(shù)據(jù)和所述新的空閑頁(yè)的數(shù)據(jù)起始地址得到一條更新日志。
11.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面具體包括:查找邏輯頁(yè)號(hào)物理頁(yè)號(hào)表,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的`物理頁(yè)號(hào),在Flash中查找與所述物理頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)面,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述更新邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系具體包括:將所述邏輯頁(yè)號(hào)物理頁(yè)號(hào)表中,與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào)由所述Flash頁(yè)面的頁(yè)號(hào)修改為所述新的空閑頁(yè)的頁(yè)號(hào)。
13.一種基于大頁(yè)面Flash的數(shù)據(jù)讀取方法,包括: 步驟Dl:根據(jù)讀取地址計(jì)算邏輯頁(yè)號(hào)和第二頁(yè)內(nèi)偏移地址,根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面; 步驟D2:初始化大小等于所述Flash頁(yè)面大小的內(nèi)存空間,逐條讀取所述Flash頁(yè)面中的更新日志,并根據(jù)讀取到的更新日志中的第一頁(yè)內(nèi)偏移地址,用讀取到的更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù),得到所述Flash頁(yè)面中的真實(shí)數(shù)據(jù); 步驟D3:返回所述Flash頁(yè)面中的真實(shí)數(shù)據(jù)中與所述第二頁(yè)內(nèi)偏移地址和讀取長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù)。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述步驟D2具體包括: 步驟El:順序讀取一條所述Flash頁(yè)面中的更新日志,作為當(dāng)前更新日志; 步驟E2:按照當(dāng)前更新日志中的第一頁(yè)內(nèi)偏移地址,用當(dāng)前更新日志中的更新數(shù)據(jù)替換所述內(nèi)存空間中的相應(yīng)數(shù)據(jù); 步驟E3:判斷所述Flash頁(yè)面中是否還有未讀取的更新日志,是則返回步驟E1,否則執(zhí)行步驟D3。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于,所述判斷所述Flash頁(yè)面中是否還有未讀取的更新日志具體包括:判斷當(dāng)前更新日志之后是否為不少于第二預(yù)設(shè)個(gè)數(shù)個(gè)值為預(yù)設(shè)值的字節(jié),是則所述Flash頁(yè)面中沒(méi)有未讀取的更新日志,否則所述Flash頁(yè)面中有未讀取的更新日志。
16.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述根據(jù)邏輯頁(yè)號(hào)和物理頁(yè)號(hào)的對(duì)應(yīng)關(guān)系在Flash中查找與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面具體包括:查找邏輯頁(yè)號(hào)物理頁(yè)號(hào)表,得到與所 述邏輯頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)號(hào),在Flash中查找與所述物理頁(yè)號(hào)對(duì)應(yīng)的物理頁(yè)面,得到與所述邏輯頁(yè)號(hào)對(duì)應(yīng)的Flash頁(yè)面。
【文檔編號(hào)】G06F12/00GK103645990SQ201310718814
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年12月24日 優(yōu)先權(quán)日:2013年12月24日
【發(fā)明者】陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司