一種機頂盒數(shù)據(jù)存儲方法及裝置制造方法
【專利摘要】本發(fā)明適用于數(shù)據(jù)存儲【技術(shù)領(lǐng)域】,提供了一種機頂盒數(shù)據(jù)存儲方法及裝置,所述方法包括:在Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū);分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;在寫入機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊;對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入。本發(fā)明通過將兩個存儲區(qū)進行分為數(shù)據(jù)塊,將數(shù)據(jù)進行交替寫入不同存儲區(qū)的數(shù)據(jù)塊,解決了現(xiàn)有技術(shù)存在的,F(xiàn)lash空間浪費、Flash頻繁擦寫容易損壞和在擦寫Flash時斷電丟失數(shù)據(jù)的問題。
【專利說明】一種機頂盒數(shù)據(jù)存儲方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)存儲【技術(shù)領(lǐng)域】,尤其涉及一種機頂盒數(shù)據(jù)存儲方法及裝置。
【背景技術(shù)】
[0002]機頂盒在運行過程中,需要動態(tài)更新一些數(shù)據(jù),并且存儲到閃存(英文:Flash)中,例如動態(tài)更新、系統(tǒng)的加密密鑰(英文:Key)、用戶的設(shè)置數(shù)據(jù)等。傳統(tǒng)的方法是將這些數(shù)據(jù)以一定的數(shù)據(jù)類型(一般為自定義)存儲到Flash中的某個固定的地址,并且用特定的接口對這個地址進行讀寫訪問。Flash是有一定的壽命的,當(dāng)超出某個擦除和寫入的次數(shù)后,F(xiàn)lash就會壞掉,所以持續(xù)的對某個固定的地址進行讀寫訪問,會增大該區(qū)域損壞的概率,在某種程度上會減少機頂盒的使用壽命。
[0003]Flash的擦除一般是以塊(英文:Block)為單位的,這樣,不同類型的數(shù)據(jù)就不能放到同一個Block上。否則,在更新一種數(shù)據(jù)時,需要首先備份另一種數(shù)據(jù),這樣會增加操作的難度和出錯的概率。而對于不同數(shù)據(jù)類型占用不同的Block塊,每種類型的數(shù)據(jù)總的大小又比Block小很多,這樣就造成了 Flash空間的嚴重浪費。
[0004]另外,如果擦除Flash的過程中斷電,那么所有的數(shù)據(jù)就會丟失。有些數(shù)據(jù)是機頂盒正常運行必須的,如果丟失就會影響機頂盒的正常工作甚至不能工作。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于提供一種機頂盒數(shù)據(jù)存儲方法及裝置,以解決現(xiàn)有技術(shù)存在的,F(xiàn)lash空間浪費、Flash因為頻繁擦寫容易損壞和在擦寫時斷電丟失數(shù)據(jù)導(dǎo)致機頂盒工作不正常的問題。
[0006]本發(fā)明是這樣實現(xiàn)的,一種機頂盒數(shù)據(jù)存儲方法,所述方法包括以下步驟:
[0007]在閃存Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū);
[0008]根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;
[0009]在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊;
[0010]對第一存儲區(qū)當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)當(dāng)前數(shù)據(jù)塊交替進行寫入。
[0011]本發(fā)明的另一目的在于提供一種機頂盒數(shù)據(jù)存儲裝置,所述裝置包括:
[0012]第一分區(qū)單元,用于在閃存Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū);
[0013]第二分區(qū)單元,用于根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;
[0014]確定單元,用于在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊;[0015]存儲單元,用于對第一存儲區(qū)當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)當(dāng)前數(shù)據(jù)塊交替進行寫入。
[0016]本發(fā)明通過將兩個存儲區(qū)進行分為數(shù)據(jù)塊,將數(shù)據(jù)進行交替寫入不同存儲區(qū)的數(shù)據(jù)塊,解決了現(xiàn)有技術(shù)存在的,F(xiàn)lash空間浪費、Flash因為頻繁擦寫容易損壞和在擦寫Flash時斷電丟失數(shù)據(jù)導(dǎo)致機頂盒工作不正常的問題,提高了 Flash使用壽命和Flash利用率,并且即使擦寫Flash時斷電也不會丟失數(shù)據(jù)而影響機頂盒工作。
【專利附圖】
【附圖說明】
[0017]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0018]圖1是本發(fā)明一實施例提供的機頂盒數(shù)據(jù)存儲方法的實現(xiàn)流程圖;
[0019]圖2是本發(fā)明一實施例提供的機頂盒中塊數(shù)據(jù)結(jié)構(gòu)圖;
[0020]圖3是本發(fā)明另一實施例提供的機頂盒數(shù)據(jù)讀取方法的實現(xiàn)流程圖;
[0021]圖4是本發(fā)明另一實施例提供的機頂盒數(shù)據(jù)存儲裝置的模塊結(jié)構(gòu)圖;
[0022]圖5是本發(fā)明另一實施例提供的機頂盒數(shù)據(jù)讀取裝置的模塊結(jié)構(gòu)圖。
【具體實施方式】
[0023]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0024]本發(fā)明一實施例提供了機頂盒數(shù)據(jù)存儲方法,所述方法如圖1所示,具體步驟包括:
[0025]在步驟SlOl中,在Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū)。
[0026]在本實施例中,第一存儲區(qū)和第二存儲區(qū)都是Block,當(dāng)然第一存儲區(qū)和第二存儲區(qū)根據(jù)不同的使用場合,也可以是其它的存儲形式。
[0027]在步驟S102中,根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊。
[0028]需要說明的是,數(shù)據(jù)類型大小是指數(shù)據(jù)類型需要的最小存儲空間大小,不同的數(shù)據(jù)類型對數(shù)據(jù)塊的數(shù)據(jù)存儲容量需求不一樣,根據(jù)數(shù)據(jù)類型大小對第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量依次進行劃分,可以劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊。若第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量是數(shù)據(jù)類型大小的整數(shù)倍則可完全劃分,否則最后一塊數(shù)據(jù)塊與數(shù)據(jù)類型大小不同,則舍棄。例如,假定第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量都是64K,若數(shù)據(jù)類型大小為8K,那么第一存儲區(qū)和第二存儲區(qū)分別被完整劃分成8個8K的數(shù)據(jù)塊;但是若數(shù)據(jù)類型對應(yīng)數(shù)據(jù)塊的數(shù)據(jù)存儲容量為9K,也就是數(shù)據(jù)類型大小為9K,那么第一存儲區(qū)和第二存儲區(qū)分別被劃分成7個9K的數(shù)據(jù)塊和I個IK的數(shù)據(jù)塊,該IK的數(shù)據(jù)塊將不用于存儲數(shù)據(jù)。[0029]在步驟S103中,在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊。
[0030]需要說明的是,當(dāng)前數(shù)據(jù)塊是指已經(jīng)存儲數(shù)據(jù)的數(shù)據(jù)塊的后一數(shù)據(jù)塊,以第一存儲區(qū)為例,假定第一存儲區(qū)被劃分為7個9K和I個IK的數(shù)據(jù)塊,如果前3個9K的數(shù)據(jù)塊都已經(jīng)存儲了數(shù)據(jù),但是第4個9K的數(shù)據(jù)塊沒有存儲數(shù)據(jù),那么第4個數(shù)據(jù)塊就是第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊,如果7個9K的數(shù)據(jù)塊都已經(jīng)存儲了數(shù)據(jù),而I個IK的數(shù)據(jù)塊不能存儲該類型的數(shù)據(jù),那么第一存儲區(qū)就沒有當(dāng)前數(shù)據(jù)塊,或者表述為第一存儲區(qū)都被寫滿,沒有寫入空間。
[0031]具體地,實現(xiàn)確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊方法為:
[0032]從第一存儲區(qū)的起始地址,根據(jù)從左到右的順序讀取數(shù)據(jù)塊的數(shù)據(jù);
[0033]對所述數(shù)據(jù)塊的數(shù)據(jù)進行每個字節(jié)遍歷校驗;
[0034]校驗得到第一個全是OxfT的數(shù)據(jù)塊為當(dāng)前數(shù)據(jù)塊。
[0035]需要說明的是,以第一存儲區(qū)為例進行說明,假定第一存儲區(qū)從左到右有A、B、C、D、E共5個數(shù)據(jù)塊,首先讀取數(shù)據(jù)塊A的數(shù)據(jù),進行遍歷校驗,如果數(shù)據(jù)塊A的數(shù)據(jù)存在不是Oxff的數(shù)據(jù),說明數(shù)據(jù)塊A中寫有有效數(shù)據(jù),繼續(xù)讀取數(shù)據(jù)塊B中的數(shù)據(jù)進行遍歷校驗,如果數(shù)據(jù)塊B的數(shù)據(jù)存在不是OxfT的數(shù)據(jù),說明數(shù)據(jù)塊B寫有有效數(shù)據(jù),繼續(xù)讀取數(shù)據(jù)塊C中的數(shù)據(jù)進行遍歷校驗,如果數(shù)據(jù)塊C的數(shù)據(jù)不存在不是Oxff的數(shù)據(jù),那么說明數(shù)據(jù)塊C就是當(dāng)前數(shù)據(jù)塊。
[0036]在步驟S104中,對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入。
[0037]具體地,實現(xiàn)步驟S104的方法具體為:
[0038]根據(jù)控制數(shù)據(jù)(英文:Control Data)中的奇偶標(biāo)志(英文:Index),將需要存儲的機頂盒數(shù)據(jù)寫入奇偶Index對應(yīng)的存儲區(qū)的當(dāng)前數(shù)據(jù)塊;
[0039]在所述奇偶Index對應(yīng)的存儲區(qū)寫入所述機頂盒數(shù)據(jù)時,為所述機頂盒數(shù)據(jù)添加包頭(英文:Head),所述Head包括序列號(英文:Identity,簡稱:ID)、版本(英文:Version)和所述機頂盒數(shù)據(jù)的循環(huán)冗余校驗(英文:Cyclic Redundancy Check,簡稱:CRC),所述 Version 與 Control Data 中的奇偶 Index 相等;
[0040]將Control Data 中的奇偶 Index 加 I。
[0041]需要說明的是,控制數(shù)據(jù)存儲在內(nèi)存中,奇偶Index用來控制機頂盒數(shù)據(jù)寫入哪一個存儲區(qū)。奇偶Index為偶數(shù)時,奇偶Index對應(yīng)的存儲區(qū)為第一存儲區(qū),奇偶Index為奇數(shù)時,奇偶Index對應(yīng)的存儲區(qū)為第二存儲區(qū)。當(dāng)控制數(shù)據(jù)中的奇偶Index為偶數(shù)時,機頂盒數(shù)據(jù)會被寫入第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊,然后奇偶Index加1,變?yōu)槠鏀?shù);當(dāng)控制數(shù)據(jù)中的奇偶Index為奇數(shù)時,機頂盒數(shù)據(jù)會被寫入第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊,然后奇偶Index加1,變?yōu)榕紨?shù),這樣交替寫入第一存儲區(qū)和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊。對于兩個存儲區(qū)中還沒有數(shù)據(jù)的時候,奇偶Index會被初始化為0,這個時候如果需要寫入機頂盒數(shù)據(jù)時,會寫入第一個存儲區(qū)的第一個數(shù)據(jù)塊,或者成為第一個存儲區(qū)的起始數(shù)據(jù)塊,在第一個存儲區(qū)的第一個數(shù)據(jù)塊被寫入機頂盒數(shù)據(jù)后,Control Data中的奇偶Index通過在O的基礎(chǔ)上加I改變了奇偶屬性,當(dāng)再次有機頂盒數(shù)據(jù)需要寫入時,會寫入第二存儲區(qū)的第一個數(shù)據(jù)塊。可以確定的是,通過其他方法或者其他參數(shù)也可以控制,實現(xiàn)將需要存儲的機頂盒數(shù)據(jù)交替寫入第一存儲區(qū)和第二存儲區(qū)。
[0042]參考圖2,Head包括標(biāo)識ID、CRC和Version共3個字段,ID是固定的,CRC是把數(shù)據(jù)塊中的數(shù)據(jù)做CRC32校驗得到的值,在寫入數(shù)據(jù)時,將Control Data中的奇偶Index寫入Version,因此Version與奇偶Index相等。
[0043]在本實施例中,通過對兩個存儲區(qū)進行分區(qū),將機頂盒數(shù)據(jù)交替寫入兩個存儲區(qū)的數(shù)據(jù)塊,使得寫入新數(shù)據(jù)時候不用頻繁擦掉存儲區(qū)上的數(shù)據(jù),保證了 Flash的使用壽命和利用效率,而且交替對兩個存儲區(qū)寫入,即使在寫入時斷電,導(dǎo)致某一存儲區(qū)上新寫入的數(shù)據(jù)不成功,但另一存儲區(qū)還保存有數(shù)據(jù),不會導(dǎo)致影響機頂盒工作的情況出現(xiàn)。
[0044]可選的,所述方法還包括:
[0045]當(dāng)?shù)谝淮鎯^(qū)沒有寫入空間時,擦除第一存儲區(qū),將需要存儲的機頂盒數(shù)據(jù)寫入第一存儲區(qū)的起始數(shù)據(jù)塊;
[0046]當(dāng)?shù)诙鎯^(qū)沒有寫入空間時,擦除第二存儲區(qū),將需要存儲的機頂盒數(shù)據(jù)寫入第二存儲區(qū)的起始數(shù)據(jù)塊。
[0047]需要說明的是,假設(shè)第一存儲區(qū)沒有寫入空間時,執(zhí)行寫操作時,擦除第一存儲區(qū),機頂盒數(shù)據(jù)會被寫入到第一存儲區(qū)的第一個數(shù)據(jù)塊,或者稱為第一個存儲區(qū)的起始數(shù)據(jù)塊,對于第二個存儲區(qū)也是同樣的道理;擦除第一存儲區(qū)并不擦除分區(qū),僅僅是將里面存儲的機頂盒數(shù)據(jù)擦除。
[0048]可選的,所述步驟S104之后還包括:
[0049]當(dāng)機頂盒重新啟動時,分別從第一存儲區(qū)和第二存儲區(qū)讀取所有數(shù)據(jù)塊;
[0050]將第一存儲區(qū)和第二存儲區(qū)中的數(shù)據(jù)塊分別從右到左查找有效數(shù)據(jù)塊;
[0051]將有效數(shù)據(jù)塊中的Version進行比較,Version值最大的為最有效數(shù)據(jù)塊;
[0052]將最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)讀入內(nèi)存;
[0053]根據(jù)所述最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)的Head中的Version重置Control Data中的奇偶Index ;
[0054]擦除所述奇偶Index對應(yīng)的存儲區(qū),將所述最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)復(fù)制到所述奇偶Index對應(yīng)的存儲區(qū)的起始數(shù)據(jù)塊;
[0055]將所述奇偶Index加I后,將所述奇偶Index對應(yīng)的存儲區(qū)擦除。
[0056]需要說明的是,根據(jù)所述最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)的Head中的Version重置Control Data中的奇偶Index具體為:
[0057]當(dāng)Head中的Version為奇數(shù)時,將Control Data中的奇偶Index重置為O,當(dāng)Head中的Version為偶數(shù)時,將Control Data中的奇偶Index重置為I。
[0058]在本實施例中,在機頂盒重新啟動時,通過重置Control Data中的奇偶Index,避免奇偶Index數(shù)據(jù)過大,造成數(shù)據(jù)溢出。
[0059]本發(fā)明另一實施例提供了機頂盒數(shù)據(jù)讀取方法,所述方法如圖3所示,具體步驟包括:
[0060]在步驟S301中,在Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū)。
[0061]在步驟S302中,根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊。[0062]在步驟S303中,在讀取機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊。
[0063]在步驟S304中,確定讀取哪個存儲區(qū)的數(shù)據(jù)。
[0064]具體地,實現(xiàn)步驟S304具體為:
[0065]根據(jù)控制數(shù)據(jù)Control Data中的奇偶標(biāo)志Index,確定讀取奇偶Index不對應(yīng)的存儲區(qū)的數(shù)據(jù)。
[0066]需要說明的是,奇偶Index不對應(yīng)的存儲區(qū)是與奇偶Index對應(yīng)的存儲區(qū)相反的概念,奇偶Index為偶數(shù)時,奇偶Index對應(yīng)的存儲區(qū)為第一存儲區(qū),奇偶不對應(yīng)的存儲區(qū)就是第二存儲區(qū),奇偶Index為奇數(shù)時,奇偶Index對應(yīng)的存儲區(qū)為第二存儲區(qū),奇偶Index不對應(yīng)的存儲區(qū)就是第一存儲區(qū)。
[0067]在步驟S305中,從確定的存儲區(qū)的當(dāng)前數(shù)據(jù)塊的前一數(shù)據(jù)塊中讀取數(shù)據(jù)。
[0068]需要說明的是,例如奇偶Index對應(yīng)的為第一存儲區(qū),那么不對應(yīng)的存儲區(qū)為第二存儲區(qū),如果第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊為第3個數(shù)據(jù)塊,那么確定的存儲區(qū)的當(dāng)前數(shù)據(jù)塊的前一數(shù)據(jù)塊是第二存儲區(qū)的第2個數(shù)據(jù)塊。
[0069]可選的,實現(xiàn)所述步驟S303中,在讀取機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊具體為:
[0070]從第一存儲區(qū)的起始地址,根據(jù)從左到右的順序讀取數(shù)據(jù)塊的數(shù)據(jù);
[0071]對所述數(shù)據(jù)塊的數(shù)據(jù)進行每個字節(jié)遍歷校驗;
[0072]校驗得到第一個全是Oxff的數(shù)據(jù)塊為當(dāng)前數(shù)據(jù)塊。
[0073]本發(fā)明另一實施例提供了機頂盒數(shù)據(jù)存儲裝置,所述裝置的模塊結(jié)構(gòu)如圖4所示,具體包括:
[0074]第一分區(qū)單元41,用于在Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū);
[0075]第二分區(qū)單元42,用于根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;
[0076]確定單元43,用于在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊;
[0077]存儲單元44,用于對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入。
[0078]可選的,所述確定單元43在確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊時,具體用于:
[0079]從第一存儲區(qū)的起始地址,根據(jù)從左到右的順序讀取數(shù)據(jù)塊的數(shù)據(jù);
[0080]對所述數(shù)據(jù)塊的數(shù)據(jù)進行每個字節(jié)遍歷校驗;
[0081]校驗得到第一個全是Oxff的數(shù)據(jù)塊為當(dāng)前數(shù)據(jù)塊。
[0082]可選的,所述存儲單元44具體用于:
[0083]根據(jù)控制數(shù)據(jù)Control Data中的奇偶標(biāo)志Index,將需要存儲的機頂盒數(shù)據(jù)寫入奇偶Index對應(yīng)的存儲區(qū)的當(dāng)前數(shù)據(jù)塊;
[0084]在所述奇偶Index對應(yīng)的存儲區(qū)寫入所述機頂盒數(shù)據(jù)時,為所述機頂盒數(shù)據(jù)添加包頭Head,所述Head包括序列號ID、版本Version和所述機頂盒數(shù)據(jù)的循環(huán)冗余校驗CRC,所述Version與Control Data中的奇偶Index相等;
[0085]將Control Data 中的奇偶 Index 加 I。
[0086]可選的,所述裝置還包括:
[0087]擦除單元,用于當(dāng)?shù)谝淮鎯^(qū)沒有寫入空間時,擦除第一存儲區(qū),通知存儲單元44將需要存儲的機頂盒數(shù)據(jù)寫入第一存儲區(qū)的起始數(shù)據(jù)塊;
[0088]當(dāng)?shù)诙鎯^(qū)沒有寫入空間時,擦除第二存儲區(qū),通知存儲單元44將需要存儲的機頂盒數(shù)據(jù)寫入第二存儲區(qū)的起始數(shù)據(jù)塊。
[0089]可選的,所述裝置還包括:
[0090]重啟處理單元,用于當(dāng)機頂盒重新啟動時,分別從第一存儲區(qū)和第二存儲區(qū)讀取所有數(shù)據(jù)塊;
[0091]將第一存儲區(qū)和第二存儲區(qū)中的數(shù)據(jù)塊分別從右到左查找有效數(shù)據(jù)塊;
[0092]將有效數(shù)據(jù)塊中的Version進行比較,Version值最大的為最有效數(shù)據(jù)塊;
[0093]將最有效數(shù)據(jù)塊中的數(shù)據(jù)讀入內(nèi)存;
[0094]根據(jù)所述最有效數(shù)據(jù)塊中的數(shù)據(jù)的Head中的Version重置Control Block中的奇偶Index ;
[0095]擦除所述奇偶Index對應(yīng)的存儲區(qū),將所述最有效數(shù)據(jù)塊中的數(shù)據(jù)復(fù)制到所述奇偶Index對應(yīng)的存儲區(qū)的起始數(shù)據(jù)塊;
[0096]將所述奇偶Index加I后,將所述奇偶Index對應(yīng)的存儲區(qū)擦除。
[0097]本發(fā)明另一實施例提供了機頂盒數(shù)據(jù)讀取裝置,所述裝置的模塊結(jié)構(gòu)如圖5所示,具體包括:
[0098]第一分區(qū)單元51,用于在Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū);
[0099]第二分區(qū)單元52,用于根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;
[0100]第一確定單元53,用于在讀取機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊;
[0101]第二確定單元54,用于確定讀取哪個存儲區(qū)的數(shù)據(jù);
[0102]讀取單元55,用于從確定的存儲區(qū)的當(dāng)前數(shù)據(jù)塊的前一數(shù)據(jù)塊中讀取數(shù)據(jù)。
[0103]可選的,所述第一確定單元53具體用于:
[0104]從第一存儲區(qū)的起始地址,根據(jù)從左到右的順序讀取數(shù)據(jù)塊的數(shù)據(jù);
[0105]對所述數(shù)據(jù)塊的數(shù)據(jù)進行每個字節(jié)遍歷校驗;
[0106]校驗得到第一個全是Oxff的數(shù)據(jù)塊為當(dāng)前數(shù)據(jù)塊。
[0107]可選的,所述第二確定單元54具體用于:
[0108]根據(jù)控制數(shù)據(jù)Control Data中的奇偶標(biāo)志Index,確定讀取奇偶Index不對應(yīng)的存儲區(qū)的數(shù)據(jù)。
[0109]本領(lǐng)域普通技術(shù)人員可以理解為上述實施例所包括的各個模塊只是按照功能邏輯進行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能模塊的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護范圍。[0110]本領(lǐng)域普通技術(shù)人員還可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以在存儲于可讀取存儲介質(zhì)中,所述的存儲介質(zhì),包括R0M/RAM等。
[0111]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種機頂盒數(shù)據(jù)存儲方法,其特征在于,所述方法包括: 在閃存Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū); 根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊; 在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊; 對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入。
2.如權(quán)利要求1所述的方法,其特征在于,所述在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊具體為: 從第一存儲區(qū)的起始地址,根據(jù)從左到右的順序讀取數(shù)據(jù)塊的數(shù)據(jù); 對所述數(shù)據(jù)塊的數(shù)據(jù)進行每個字節(jié)遍歷校驗; 校驗得到第一個全是Oxff的數(shù)據(jù)塊為當(dāng)前數(shù)據(jù)塊。
3.如權(quán)利要求1所述的方法,其特征在于,所述對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入具體為: 根據(jù)控制數(shù)據(jù)Control Data中的奇偶標(biāo)志Index,將需要存儲的機頂盒數(shù)據(jù)寫入奇偶Index對應(yīng)的存儲區(qū)的當(dāng)前數(shù)據(jù)塊; 在所述奇偶Index對應(yīng)的存儲區(qū)寫入所述機頂盒數(shù)據(jù)時,為所述機頂盒數(shù)據(jù)添加包頭Head,所述Head包括序 列號ID、版本Version和所述機頂盒數(shù)據(jù)的循環(huán)冗余校驗CRC,所述Version 與 Control Data 中的奇偶 Index 相等; 將Control Data中的奇偶Index加I。
4.如權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 當(dāng)?shù)谝淮鎯^(qū)沒有寫入空間時,擦除第一存儲區(qū),將需要存儲的機頂盒數(shù)據(jù)寫入第一存儲區(qū)的起始數(shù)據(jù)塊; 當(dāng)?shù)诙鎯^(qū)沒有寫入空間時,擦除第二存儲區(qū),將需要存儲的機頂盒數(shù)據(jù)寫入第二存儲區(qū)的起始數(shù)據(jù)塊。
5.如權(quán)利要求1所述的方法,其特征在于,所述對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入之后還包括: 當(dāng)機頂盒重新啟動時,分別從第一存儲區(qū)和第二存儲區(qū)讀取所有數(shù)據(jù)塊; 將第一存儲區(qū)和第二存儲區(qū)中的數(shù)據(jù)塊分別從右到左查找有效數(shù)據(jù)塊; 將有效數(shù)據(jù)塊中的Version進行比較,Version值最大的為最有效數(shù)據(jù)塊; 將最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)讀入內(nèi)存; 根據(jù)所述最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)的Head中的Version重置Control Data中的奇偶Index ; 擦除所述奇偶Index對應(yīng)的存儲區(qū),將所述最有效數(shù)據(jù)塊中的機頂盒數(shù)據(jù)復(fù)制到所述奇偶Index對應(yīng)的存儲區(qū)的起始數(shù)據(jù)塊; 將所述奇偶Index加I后,將所述奇偶Index對應(yīng)的存儲區(qū)擦除。
6.一種機頂盒數(shù)據(jù)讀取方法,其特征在于,所述方法包括: 在閃存Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū); 根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊; 在讀取機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊; 確定讀取哪個存儲區(qū)的數(shù)據(jù); 從確定的存儲區(qū)的當(dāng)前數(shù)據(jù)塊的前一數(shù)據(jù)塊中讀取數(shù)據(jù)。
7.如權(quán)利要求6所述的方法,其特征在于,所述在讀取機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊具體為: 從第一存儲區(qū)的起始地址,根據(jù)從左到右的順序讀取數(shù)據(jù)塊的數(shù)據(jù); 對所述數(shù)據(jù)塊的數(shù)據(jù)進行每個字節(jié)遍歷校驗; 校驗得到第一個全是Oxff的數(shù)據(jù)塊為當(dāng)前數(shù)據(jù)塊。
8.如權(quán)利要求6所述的方法,其特征在于,所述確定讀取哪個存儲區(qū)的數(shù)據(jù)具體為: 根據(jù)控制數(shù)據(jù)Control Data中的奇偶標(biāo)志Index,確定讀取奇偶Index不對應(yīng)的存儲區(qū)的數(shù)據(jù)。
9.一種機頂盒數(shù)據(jù)存儲裝置,其特征在于,所述裝置包括: 第一分區(qū)單元,用于在 閃存Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū); 第二分區(qū)單元,用于根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;確定單元,用于在寫入需要存儲的機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊; 存儲單元,用于對第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊交替進行寫入。
10.一種機頂盒數(shù)據(jù)讀取裝置,其特征在于,所述裝置包括: 第一分區(qū)單元,用于在閃存Flash中劃分出數(shù)據(jù)存儲容量相等的第一存儲區(qū)和第二存儲區(qū); 第二分區(qū)單元,用于根據(jù)需要存儲的機頂盒數(shù)據(jù)的數(shù)據(jù)類型大小,分別對所述第一存儲區(qū)和第二存儲區(qū)的數(shù)據(jù)存儲容量進行劃分,劃分出多個與數(shù)據(jù)類型大小相同的數(shù)據(jù)塊;第一確定單元,用于在讀取機頂盒數(shù)據(jù)時,確定第一存儲區(qū)的當(dāng)前數(shù)據(jù)塊和第二存儲區(qū)的當(dāng)前數(shù)據(jù)塊; 第二確定單元,用于確定讀取哪個存儲區(qū)的數(shù)據(jù); 讀取單元,用于從確定的存儲區(qū)的當(dāng)前數(shù)據(jù)塊的前一數(shù)據(jù)塊中讀取數(shù)據(jù)。
【文檔編號】G06F12/06GK103440205SQ201310367010
【公開日】2013年12月11日 申請日期:2013年8月21日 優(yōu)先權(quán)日:2013年8月21日
【發(fā)明者】張迎偉 申請人:深圳市九洲電器有限公司