两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

數(shù)據(jù)儲存方法及嵌入式系統(tǒng)的制作方法

文檔序號:10624509閱讀:316來源:國知局
數(shù)據(jù)儲存方法及嵌入式系統(tǒng)的制作方法
【專利摘要】一種數(shù)據(jù)儲存方法及嵌入式系統(tǒng)。數(shù)據(jù)儲存方法用于將更新數(shù)據(jù)寫入閃存模塊以更新原始數(shù)據(jù),閃存模塊至少包括區(qū)塊,區(qū)塊包括多個扇區(qū),每一扇區(qū)包括多個位,每一位可被識別為第一儲存狀態(tài)或第二儲存狀態(tài),每一扇區(qū)記錄一標記,數(shù)據(jù)儲存方法包括:獲取扇區(qū)之中的第一扇區(qū),其中第一扇區(qū)的標記的所有位為第二儲存狀態(tài);將更新數(shù)據(jù)寫入至第一扇區(qū),并將第一扇區(qū)的標記的至少一位程序化為第一儲存狀態(tài)且至少一位程序化為第二儲存狀態(tài);識別扇區(qū)之中儲存原始數(shù)據(jù)的第二扇區(qū),其中第二扇區(qū)的標記的至少一位為第一儲存狀態(tài)且至少一其他位為第二儲存狀態(tài);以及將第二扇區(qū)的所有位程序化為第一儲存狀態(tài)。本發(fā)明可延長閃存的壽命。
【專利說明】
數(shù)據(jù)儲存方法及嵌入式系統(tǒng)
技術領域
[0001]本發(fā)明涉及一種數(shù)據(jù)儲存方法及嵌入式系統(tǒng),且特別涉及一種具有高寫入次數(shù)的數(shù)據(jù)儲存方法及嵌入式系統(tǒng)。
【背景技術】
[0002]一般來說,傳統(tǒng)的嵌入式系統(tǒng)通常使用電可擦除只讀存儲器(EEPR0M,Electrically Erasable Programmable Read Only Memory)作為小量數(shù)據(jù)的儲存媒體,其具有可以字節(jié)為單位寫入及清除的優(yōu)勢,因此在寫入多筆小量數(shù)據(jù)時十分的方便。但隨著閃存的容量越來越大及價格越來越便宜,EEPROM變得相對昂貴并在嵌入式系統(tǒng)中逐漸地被便宜的閃存所取代。
[0003]然而,由于閃存在執(zhí)行清除指令時必須一次清除(erase) —整個區(qū)塊(block),無法像EERPOM以字節(jié)為單位進行清除。若將一個數(shù)據(jù)量較小的文件,例如系統(tǒng)的引導裝載程序(bootloader)或是網(wǎng)絡設定配置等,儲存于閃存的區(qū)塊中,當更新此文件時,系統(tǒng)必須清除文件所在的整個區(qū)塊,再將更新的文件儲存于原本的區(qū)塊中,這使得閃存的重新寫入次數(shù)遠小于EEPROM。
[0004]因此,需要提供一種數(shù)據(jù)儲存方法及嵌入式系統(tǒng)來解決上述問題。

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

[0005]本公開提出一種數(shù)據(jù)儲存方法及嵌入式系統(tǒng),其能有效地延長閃存的壽命。
[0006]本公開提出一種數(shù)據(jù)儲存方法,該數(shù)據(jù)儲存方法用于將一更新數(shù)據(jù)寫入一閃存模塊以更新一原始數(shù)據(jù),該閃存模塊至少包括一區(qū)塊,該區(qū)塊包括多個扇區(qū),每一該些扇區(qū)包括多個位,每一該些位可被識別為一第一儲存狀態(tài)或一第二儲存狀態(tài),每一該些扇區(qū)記錄一標記,該數(shù)據(jù)儲存方法包括:獲取該些扇區(qū)之中的一第一扇區(qū),其中該第一扇區(qū)的該標記的所有位為該第二儲存狀態(tài);將該更新數(shù)據(jù)寫入至該第一扇區(qū),并將該第一扇區(qū)的該標記的至少一位程序化為該第一儲存狀態(tài)且至少一位程序化為該第二儲存狀態(tài);識別該些扇區(qū)之中儲存該原始數(shù)據(jù)的一第二扇區(qū),其中該第二扇區(qū)的該標記的至少一位為該第一儲存狀態(tài)且該第二扇區(qū)的該標記的至少一其他位為該第二儲存狀態(tài);以及將該第二扇區(qū)的所有位程序化為該第一儲存狀態(tài)。
[0007]在本公開的一范例實施例中,上述數(shù)據(jù)儲存方法還包括若在上述區(qū)塊中不存在所有位為第二儲存狀態(tài)的標記,將上述區(qū)塊的所有位程序化為第二儲存狀態(tài)。
[0008]在本公開的一范例實施例中,上述數(shù)據(jù)儲存方法還包括為儲存于第一扇區(qū)的更新數(shù)據(jù)產(chǎn)生對應錯誤校正碼。
[0009]在本公開的一范例實施例中,其中若儲存于第一扇區(qū)的更新數(shù)據(jù)的所有位為第一儲存狀態(tài)時,對應錯誤校正碼的所有位為第一儲存狀態(tài)。
[0010]在本公開的一范例實施例中,上述數(shù)據(jù)儲存方法還包括根據(jù)更新數(shù)據(jù)及原始數(shù)據(jù)的大小決定這些扇區(qū)的大小。
[0011]在本公開的一范例實施例中,其中第一儲存狀態(tài)為O且第二儲存狀態(tài)為I。
[0012]本公開提出一種嵌入式系統(tǒng),該嵌入式系統(tǒng)包括:一閃存模塊以及一微控制單元;該閃存模塊儲存一原始數(shù)據(jù)且至少包括一區(qū)塊,該區(qū)塊包括多個扇區(qū),每一該些扇區(qū)包括多個位,每一該些位可被識別為一第一儲存狀態(tài)或一第二儲存狀態(tài),每一該些扇區(qū)記錄一標記;該微控制單元耦接于該閃存模塊,其中該微控制單元執(zhí)行一程序代碼以執(zhí)行下列步驟:獲取該些扇區(qū)之中的一第一扇區(qū),其中該第一扇區(qū)的該標記的所有位為該第二儲存狀態(tài);將一更新數(shù)據(jù)寫入至該第一扇區(qū),并將該第一扇區(qū)的該標記的至少一位程序化為該第一儲存狀態(tài)且至少一位程序化為該第二儲存狀態(tài);識別該些扇區(qū)之中儲存該原始數(shù)據(jù)的一第二扇區(qū),其中該第二扇區(qū)的該標記的至少一位為該第一儲存狀態(tài)且該第二扇區(qū)的該標記的至少一其他位為該第二儲存狀態(tài);以及將該第二扇區(qū)的所有位程序化為該第一儲存狀
??τ O
[0013]在本公開的一范例實施例中,其中若在上述區(qū)塊中不存在所有位為第二儲存狀態(tài)的標記,微控制單元將上述區(qū)塊的所有位程序化為第二儲存狀態(tài)。
[0014]在本公開的一范例實施例中,上述微控制單元還為儲存于該第一扇區(qū)的該更新數(shù)據(jù)產(chǎn)生一對應錯誤校正碼。
[0015]在本公開的一范例實施例中,其中若儲存于第一扇區(qū)的更新數(shù)據(jù)的所有位為第一儲存狀態(tài)時,對應錯誤校正碼的所有位為第一儲存狀態(tài)。
[0016]在本公開的一范例實施例中,其中上述微控制單元根據(jù)更新數(shù)據(jù)及原始數(shù)據(jù)的大小決定這些扇區(qū)的大小。
[0017]在本發(fā)明的一范例實施例中,其中第一儲存狀態(tài)為O且第二儲存狀態(tài)為I。
[0018]基于上述,本公開的數(shù)據(jù)寫入方法及嵌入式系統(tǒng)可以根據(jù)標記尋找未寫入的扇區(qū)寫入更新數(shù)據(jù),并將儲存原始數(shù)據(jù)的扇區(qū)的所有位(bit)設定為第一儲存狀態(tài)。如此一來,在每次更新數(shù)據(jù)時可逐一使用區(qū)塊中的扇區(qū)寫入更新數(shù)據(jù),只有當所有扇區(qū)都被使用過,也就是上述區(qū)塊不具有未寫入的扇區(qū)時,才需要清除整個區(qū)塊,從而延長閃存的壽命。
[0019]為讓本公開的上述特征和優(yōu)點能更明顯易懂,下文特舉實施例,并配合所附附圖作詳細說明如下。
【附圖說明】
[0020]圖1為根據(jù)本公開范例實施例所繪示的嵌入式系統(tǒng)的方框圖。
[0021 ]圖2A-圖2C為根據(jù)本公開范例實施例的存取閃存模塊扇區(qū)的示意圖。
[0022]圖3為根據(jù)本公開一范例實施例所繪示的數(shù)據(jù)儲存方法的流程圖。
[0023]圖4為根據(jù)本公開一范例實施例所繪示的數(shù)據(jù)讀取的流程圖。
[0024]圖5為根據(jù)本公開另一范例實施例的存取閃存模塊扇區(qū)的示意圖。
[0025]圖6為根據(jù)本公開另一范例實施例的存取閃存模塊扇區(qū)的示意圖。
[0026]主要組件符號說明:
[0027]100嵌入式系統(tǒng)
[0028]102控制器
[0029]104閃存模塊
[0030]201、202區(qū)塊
[0031]211a、211b、…、211h、211i數(shù)據(jù)
[0032]221數(shù)據(jù)區(qū)
[0033]231帶外區(qū)
[0034]241、242、…、247、248標記
[0035]S302、S304、S306、S308、S310、S312數(shù)據(jù)儲存方法的步驟
[0036]S402.S404.S406讀取數(shù)據(jù)的步驟
【具體實施方式】
[0037]為了使本公開的范例實施例更容易理解,以下將使用一個大小為256MB的與非門閃存(NAND flash)作為范例說明。此閃存可包括2048個區(qū)塊,每一區(qū)塊可包括64個頁面(page),因此每一區(qū)塊的大小為128KB,且每一頁面的大小為2KB。
[0038]閃存會將錯誤校正碼(ECC,Error Correct1n Code)儲存在每一個頁面的帶外(00B,Out Of Band)區(qū)域,并利用錯誤校正碼來修正數(shù)據(jù)錯誤。一個頁面還可以分成四個512字節(jié)(Byte)的小塊(chunk),錯誤校正碼的計算是以小塊為單位,因此每次修改一小塊的數(shù)據(jù)時,系統(tǒng)會計算對應該小塊的錯誤校正碼(其大小為16字節(jié)),并儲存于該小塊所屬頁面的帶外區(qū)域。由于一個2KB頁面包括四小塊,因此一個2KB頁面會包含64字節(jié)的帶外區(qū)域。因此,一個頁面的實際大小可為(2K+64)字節(jié),也就是數(shù)據(jù)區(qū)域加上帶外區(qū)域,而一個區(qū)塊的實際大小可為64x(2K+64)字節(jié)=(128Κ+4Κ)字節(jié)。值得一提的是,帶外區(qū)域是系統(tǒng)用來存取對應頁面的錯誤校正碼,因此使用者并無法存取帶外區(qū)域。另外,在寫入數(shù)據(jù)時,閃存的最小寫入單位為一個字節(jié),而在清除數(shù)據(jù)時,閃存的最小清除單位為一個區(qū)塊。
[0039]以上所述的閃存的區(qū)塊、頁面、小塊、帶外區(qū)域的數(shù)量及大小僅用于使本公開的范例實施例更加容易理解。必須了解的是,本公開并不以此為限。本公開的閃存的區(qū)塊、頁面、小塊、帶外區(qū)域的數(shù)量及大小也可具有其他配置,而閃存也可為或非門閃存(NOR flash)或其他種類的閃存。
[0040]圖1為根據(jù)本公開范例實施例所繪示的嵌入式系統(tǒng)的方框圖并且圖2A-圖2C為根據(jù)本公開范例實施例的存取閃存模塊扇區(qū)的示意圖。
[0041]請參照圖1及圖2A,本公開范例實施例的嵌入式系統(tǒng)100包括控制器102及閃存模塊104,其中控制器102耦接于閃存模塊104且用以執(zhí)行寫入操作以將數(shù)據(jù)寫入至閃存模塊104或者執(zhí)行讀取操作以從閃存模塊104中讀取數(shù)據(jù)。
[0042]假設目前要將一個16KB的數(shù)據(jù)211a存入閃存模塊104的區(qū)塊201中,控制器102會先判斷數(shù)據(jù)211a的大小,也就是說,控制器102會判斷出16KB的數(shù)據(jù)211a可儲存于8個大小為2KB的頁面中,因此控制器102會將區(qū)塊201的頁面I到頁面64分成八個扇區(qū)(sector),其中扇區(qū)I對應頁面I到頁面8,扇區(qū)2對應頁面9到頁面16,以此類推。在此,數(shù)據(jù)可為嵌入式系統(tǒng)100的引導裝載程序、網(wǎng)絡設定配置(例如IP地址、網(wǎng)絡屏蔽、網(wǎng)關器地址)、嵌入式系統(tǒng)100的系統(tǒng)配置文件等。
[0043]在此假設區(qū)塊201從未被寫入數(shù)據(jù),因此所有的頁面的字節(jié)皆記錄為OxFF。在此,控制器102會將扇區(qū)I的第一個字節(jié),也就是頁面I的第一個字節(jié)辨識為標記241。由于區(qū)塊201所有頁面的字節(jié)皆為OxFF,因此標記241當然也為OxFF。在本范例實施例中,標記241為OxFF代表對應標記的扇區(qū)I為未寫入扇區(qū)。同理可知,扇區(qū)2到扇區(qū)8的標記,也就是扇區(qū)2到扇區(qū)8的第一個字節(jié)在此時也都為OxFF。雖然以上說明了使用每個扇區(qū)的第一個字節(jié)作為標記,但本發(fā)明并不以此為限。在另一范例實施例中,也可利用扇區(qū)中的任一字節(jié)作為標記,或者也可利用扇區(qū)中的任意多個字節(jié)作為標記。
[0044]當控制器102將數(shù)據(jù)211a寫入?yún)^(qū)塊201之前,控制器102會根據(jù)區(qū)塊201中所有扇區(qū)的標記尋找扇區(qū)中未寫入的扇區(qū)。也就是說,控制器102會尋找標記241到標記248中數(shù)值為OxFF的標記,并把數(shù)據(jù)211a寫入此標記對應的扇區(qū)中。由于此時標記241到標記248的數(shù)值都是OxFF,因此控制器102會選擇第一個扇區(qū)I (或第一扇區(qū))寫入數(shù)據(jù)211a。
[0045]在控制器102將數(shù)據(jù)211a寫入扇區(qū)I時,控制器102會將扇區(qū)I的標記241,也就是扇區(qū)I的第一個字節(jié)(或是頁面I的第一個字節(jié)),修改為0x01,以表示目前扇區(qū)I存有有效數(shù)據(jù)(valid data)。此時,數(shù)據(jù)211a是儲存于頁面I到頁面8的數(shù)據(jù)區(qū)221中。雖然以上說明了將標記241修改為0x01以表示其對應扇區(qū)存有有效數(shù)據(jù),但本公開并不以此為限。標記241也可修改為0x02、0x03、…、OxFE等0x00及OxFF以外的值,用以表示其對應的扇區(qū)存有有效數(shù)據(jù)。
[0046]值得一提的是,將數(shù)據(jù)211a寫入至頁面I到頁面8的數(shù)據(jù)區(qū)221時,控制器102會分別計算頁面I到頁面8的錯誤校正碼ECCl到ECC8,并將ECCl到ECC8分別寫入到對應頁面I到頁面8的帶外區(qū)231中。在此,ECCl到ECC8可利用BCH、RS或漢明碼等錯誤校正算法產(chǎn)生。值得注意的是,在一個完全未寫入的區(qū)塊中,其所有頁面對應的ECC值都是OxFF。
[0047]請繼續(xù)參照圖2B,數(shù)據(jù)211b可為數(shù)據(jù)211a的更新文件或其他類型的文件。當控制器102要將數(shù)據(jù)211b寫入?yún)^(qū)塊201之前,控制器102會根據(jù)區(qū)塊201中所有扇區(qū)的標記尋找扇區(qū)中未寫入的扇區(qū)。也就是說,控制器102會尋找標記241到標記248中數(shù)值為OxFF的標記,并把數(shù)據(jù)211a寫入此標記對應的扇區(qū)中。由于此時標記241的數(shù)值為0x01,而標記242到標記248的數(shù)值都是OxFF,因此控制器102會選擇扇區(qū)2到扇區(qū)8的第一個扇區(qū)2(或第一扇區(qū))寫入數(shù)據(jù)211b。
[0048]在控制器102將數(shù)據(jù)211b寫入扇區(qū)2時,控制器102會將扇區(qū)2的標記242,也就是扇區(qū)2的第一個字節(jié)(或是頁面9的第一個字節(jié)),修改為0x01,以表示目前扇區(qū)2存有有效數(shù)據(jù)。此時,數(shù)據(jù)211b是儲存于頁面9到頁面16的數(shù)據(jù)區(qū)221中。
[0049]同樣地,在將數(shù)據(jù)211b寫入頁面9到頁面16的數(shù)據(jù)區(qū)221時,控制器102會分別計算頁面9到頁面16的錯誤校正碼ECC9到ECC16,并將ECC9到ECC16分別寫入到對應頁面9到頁面16的帶外區(qū)231中。
[0050]除了將ECC9到ECC16分別寫入到對應頁面9到頁面16的帶外區(qū)231中,由于扇區(qū)2的上一個扇區(qū),也就是扇區(qū)I中的數(shù)據(jù)211a已屬于無效數(shù)據(jù),控制器102還會將扇區(qū)I (或第二扇區(qū))的數(shù)據(jù)區(qū)221的所有字節(jié)修改為0x00,這也包含了將扇區(qū)I的標記241修改為0x00,表示此扇區(qū)I處于被寫入過且目前不具有有效數(shù)據(jù)。
[0051]在控制器102將扇區(qū)I (或第二扇區(qū))的數(shù)據(jù)區(qū)221的所有字節(jié)修改為0x00時,控制器102會分別計算頁面I到頁面8的錯誤校正碼ECCl到ECC8,由于所有字節(jié)皆為0x00的數(shù)據(jù)所產(chǎn)生的錯誤校正碼也是所有字節(jié)皆為0x00,控制器102會將頁面I到頁面8的帶外區(qū)231全部的字節(jié)寫入0x00。
[0052]請繼續(xù)參照圖2C,當數(shù)據(jù)利用圖2A及圖2B的方法寫入數(shù)次,使得區(qū)塊201的扇區(qū)8存有數(shù)據(jù)時,此時扇區(qū)I到扇區(qū)7的數(shù)據(jù)區(qū)221的全部字節(jié)已都被修改為0x00,且扇區(qū)I到扇區(qū)7的標記241到標記247也都被修改為0x00。若此時控制器102要將數(shù)據(jù)211i寫入至區(qū)塊201時,控制器102會先檢查區(qū)塊201中扇區(qū)I到扇區(qū)8的標記241到標記248。由于標記241到標記247的數(shù)值皆為0x00且標記248的數(shù)值為0x01,所以控制器102找不到標記值為OxFF的扇區(qū),其代表區(qū)塊201中已經(jīng)沒有未寫入的扇區(qū)。此時,控制器102便需要擦除整個區(qū)塊201,也就是把扇區(qū)I到扇區(qū)8的所有字節(jié)擦除為OxFF。接著再利用與圖2A的相同方法,就可將數(shù)據(jù)211i寫入扇區(qū)1,也就是頁面I到頁面8的數(shù)據(jù)區(qū)221中。
[0053]由于本公開只有在區(qū)塊201所有扇區(qū)都進行過寫入操作之后才會擦除整個區(qū)塊201,也就是在區(qū)塊201的八個扇區(qū)都儲存過數(shù)據(jù)之后才會擦除區(qū)塊201,因此相比于一般在閃存中更新一個扇區(qū)就必須清除整個區(qū)塊的狀況,本發(fā)明的寫入方法在同樣次數(shù)的扇區(qū)數(shù)據(jù)更新中,擦除區(qū)塊201的次數(shù)只有一般閃存的八分之一,因此閃存寫入數(shù)據(jù)的次數(shù)也可提升為原本的八倍,從而延長閃存的壽命。
[0054]值得注意的是,本范例實施例中控制器102可為邏輯運算電路,以在寫入數(shù)據(jù)時進行扇區(qū)分配、尋找未寫入扇區(qū)及設定扇區(qū)標記等運算。然而,本公開并不以此為限,在另一實施例中,上述控制器102所執(zhí)行的功能亦可以固件或軟件的程序代碼來實際操作,并且當嵌入式系統(tǒng)100上電時,這些程序代碼會被載入至存儲器中,由微控制器單元(MCU,Mirco Controller Unit)來執(zhí)行以完成上述控制器102所執(zhí)行的功能。
[0055]圖3為根據(jù)本公開一范例實施例所繪示的數(shù)據(jù)儲存方法的流程圖。
[0056]在步驟S302中,控制器102會依序檢查區(qū)塊中每一扇區(qū)的標記,尋找具有標記數(shù)值為OxFF的未寫入扇區(qū),也就是在區(qū)塊被擦除之后尚未被寫入過的扇區(qū)。
[0057]若區(qū)塊中沒有標記數(shù)值為OxFF的未寫入扇區(qū),則在步驟S304中,控制器102會擦除區(qū)塊,將區(qū)塊中所有字節(jié)修改為OxFF。
[0058]若區(qū)塊中具有標記數(shù)值為OxFF的未寫入扇區(qū)時,則在步驟S306中,控制器102會將更新數(shù)據(jù)寫入標記數(shù)值為OxFF的未寫入扇區(qū),并且將對應的標記設定為有效狀態(tài),例如OxOl0同時,在寫入更新數(shù)據(jù)到扇區(qū)時,控制器102會更新對應頁面的錯誤校正碼。
[0059]在步驟S308中,控制器102會判斷寫入是否成功。
[0060]若寫入不成功時,則在步驟S310中,控制器102會將目前扇區(qū)的所有字節(jié)填入0x00,并產(chǎn)生對應的錯誤校正碼(其中錯誤校正碼的所有字節(jié)也都會是0x00),接著執(zhí)行步驟S302,以尋找未寫入的扇區(qū)重新寫入數(shù)據(jù)。
[0061]若寫入成功時,則控制器102會將儲存原始數(shù)據(jù)(亦稱為舊數(shù)據(jù))扇區(qū)的所有字節(jié)填入0x00 (包含扇區(qū)的標記),并產(chǎn)生對應的錯誤校正碼(也全為0x00)。如此一來,控制器102可以藉由標記0x00判斷先前的扇區(qū)所儲存的數(shù)據(jù)已變成無效數(shù)據(jù)。
[0062]圖4為根據(jù)本公開一范例實施例所繪示的數(shù)據(jù)讀取的流程圖。
[0063]在步驟S402中,若控制器102要讀取數(shù)據(jù),控制器102會在區(qū)塊中尋找有效扇區(qū),也就是標記不為0x00及OxFF的扇區(qū)。若區(qū)塊中沒有有效扇區(qū)時,則在步驟S404中,控制器102會傳送讀取失敗的信息。
[0064]若區(qū)塊中具有有效扇區(qū)時,則控制器102會從有效扇區(qū)的數(shù)據(jù)區(qū)讀取數(shù)據(jù),例如讀取嵌入式系統(tǒng)100的引導裝載程序、網(wǎng)絡設定配置(例如IP地址、網(wǎng)絡屏蔽、網(wǎng)關器地址)、嵌入式系統(tǒng)100的系統(tǒng)配置文件等。
[0065]圖5為根據(jù)本公開另一范例實施例的存取閃存模塊扇區(qū)的示意圖。
[0066]請參照圖5,相比于在圖2A到圖2C中使用單個區(qū)塊201儲存數(shù)據(jù),在圖5中,也可使用兩個區(qū)塊,也就是區(qū)塊201及區(qū)塊202來儲存數(shù)據(jù)。
[0067]相同于圖2A的第一步驟,在區(qū)塊201及區(qū)塊202都無數(shù)據(jù)儲存時,扇區(qū)I到扇區(qū)16的數(shù)據(jù)區(qū)跟帶外區(qū)的所有字節(jié)都是OxFF,當然每個扇區(qū)的標記也都是OxFF,代表了每個扇區(qū)在目前都處于未寫入狀態(tài)。當有第一筆數(shù)據(jù)要寫入之前,控制器102會根據(jù)扇區(qū)I到扇區(qū)16的標記尋找出處于未寫入狀態(tài)的扇區(qū)1,把數(shù)據(jù)寫入扇區(qū)I并將扇區(qū)I的標記修改為0x01,代表扇區(qū)I目前儲存了有效數(shù)據(jù)。在寫入數(shù)據(jù)到扇區(qū)I時,控制器102也會計算扇區(qū)I每個頁面的ECC并將其儲存于扇區(qū)I的帶外區(qū),此操作相同于圖2A的第2步驟。
[0068]當要寫入更新數(shù)據(jù)時,控制器102會將數(shù)據(jù)寫入扇區(qū)2,并重新程序化扇區(qū)I的數(shù)據(jù)區(qū)及帶外區(qū),也就是,將扇區(qū)I的數(shù)據(jù)區(qū)及帶外區(qū)的所有字節(jié)重新程序化為0x00。
[0069]以此類推,每一筆更新數(shù)據(jù)會依序?qū)懭氲缴葏^(qū)3至扇區(qū)16,且控制器102會分別重新程序化扇區(qū)2到扇區(qū)15的數(shù)據(jù)區(qū)及帶外區(qū)。之后,若要寫入下一筆更新數(shù)據(jù)且控制器102目前具有標記值為0x01的扇區(qū)16的下一個扇區(qū)(S卩,扇區(qū)I)的標記值為0x00時,控制器102會擦除區(qū)塊201,以將區(qū)塊201的所有字節(jié)設定為OxFF。同理,當扇區(qū)8的標記值為0x01且其他所有扇區(qū)的標記值均為0x00時,控制器102會擦除區(qū)塊202,以將區(qū)塊202的所有字節(jié)設定為OxFF。
[0070]在另一范例實施例中,控制器102也可在寫完每一筆數(shù)據(jù)之后檢查區(qū)塊的所有標記值,若一區(qū)塊所有標記值皆為0x00,則清除該區(qū)塊。也就是說,控制器102亦可在更新數(shù)據(jù)寫入扇區(qū)9之后識別區(qū)塊201的所有標記值都為0x00,并擦除區(qū)塊201。
[0071]雖然以上說明了使用兩個區(qū)塊來儲存數(shù)據(jù),但本公開并不以此為限。本公開也可使用三個或更多個區(qū)塊來儲存數(shù)據(jù),以防止運行時間壞區(qū)塊的產(chǎn)生,或是用于滿足更大數(shù)據(jù)量的儲存需求。
[0072]圖6為根據(jù)本公開另一范例實施例的存取閃存模塊扇區(qū)的示意圖。
[0073]請參照圖6,相比于在以上范例實施例中,扇區(qū)大小都是頁面大小的倍數(shù),然而,扇區(qū)大小亦可被設定為頁面大小2KB的四分之一,也就是小塊的大小512字節(jié)。
[0074]相同于以上范例實施例,當有第一筆數(shù)據(jù)要寫入之前,控制器102會尋找出處于未寫入狀態(tài)的扇區(qū)1,把數(shù)據(jù)寫入扇區(qū)I并將扇區(qū)I的標記修改為0x01,以代表扇區(qū)I目前儲存了有效數(shù)據(jù)。在寫入數(shù)據(jù)到扇區(qū)I時,控制器102也會計算扇區(qū)I的ECCl并將其儲存于扇區(qū)I的帶外區(qū)。由于目前扇區(qū)I的大小是相當于小塊的大小,因此其ECCl的大小為一個頁面ECC大小64字節(jié)的四分之一,也就是16字節(jié)。
[0075]接著,可重復圖5的操作,直到扇區(qū)256儲存了有效數(shù)據(jù),也就是扇區(qū)256的標記為0x01。此時,扇區(qū)I到扇區(qū)255的所有字節(jié)都為0x00,若有新的數(shù)據(jù)要寫入時,控制器102會將區(qū)塊201清除,并將新的數(shù)據(jù)寫入扇區(qū)I。
[0076]在本公開的閃存中,小塊的大小為512字節(jié),而小塊是執(zhí)行ECC運算的最小單位,因此扇區(qū)大小必須以小塊的大小512字節(jié)為單位。雖然以上說明了以一個小塊作為扇區(qū)大小,但本公開并不以此為限。本公開也可使用兩個或更多小塊作為扇區(qū)大小。
[0077]綜上所述,上述范例實施例提出了一種數(shù)據(jù)儲存方法,將閃存的區(qū)塊分為多個扇區(qū),每個扇區(qū)具有一個標記,標記值為OxFF代表扇區(qū)為未寫入狀態(tài)、0x00代表扇區(qū)為空白狀態(tài)、OxFF及0x00以外的數(shù)值代表扇區(qū)具有有效數(shù)據(jù)。由于在閃存中I到O的操作可以字節(jié)為單位進行,但O到I的操作需要以區(qū)塊為單位進行,因此本范例實施例以OxOO來表示此扇區(qū)曾經(jīng)具有有效數(shù)據(jù),但目前屬于擦除狀態(tài)。在本范例實施例中,數(shù)據(jù)可以依序儲存于區(qū)塊的未寫入扇區(qū)中,并在數(shù)據(jù)成功儲存之后將之前儲存有效數(shù)據(jù)的扇區(qū)重新程序化為OxOO0只有當整個區(qū)塊中已經(jīng)沒有標記為OxFF的扇區(qū)時,才必須擦除區(qū)塊。相比于傳統(tǒng)使用閃存儲存系統(tǒng)的引導裝載程序或是網(wǎng)絡設定配置時,在每次更新數(shù)據(jù)時都要擦除整個區(qū)塊,本范例實施例可在一個區(qū)塊的全部扇區(qū)都使用過后才擦除區(qū)塊,因此可大幅增進使用于嵌入式系統(tǒng)中的閃存的使用壽命。
[0078]雖然本公開已以實施例公開如上,然而其并非用以限定本公開,任何所屬技術領域中的普通技術人員,在不脫離本公開的精神和范圍的情況下,應當可作些許的更動與潤飾,故本公開的保護范圍應當視所附的權利要求書的范圍所界定者為準。
【主權項】
1.一種數(shù)據(jù)儲存方法,該數(shù)據(jù)儲存方法用于將一更新數(shù)據(jù)寫入一閃存模塊以更新一原始數(shù)據(jù),該閃存模塊至少包括一區(qū)塊,該區(qū)塊包括多個扇區(qū),每一該些扇區(qū)包括多個位,每一該些位可被識別為一第一儲存狀態(tài)或一第二儲存狀態(tài),每一該些扇區(qū)記錄一標記,該數(shù)據(jù)儲存方法包括: 獲取該些扇區(qū)之中的一第一扇區(qū),其中該第一扇區(qū)的該標記的所有位為該第二儲存狀態(tài); 將該更新數(shù)據(jù)寫入至該第一扇區(qū),并將該第一扇區(qū)的該標記的至少一位程序化為該第一儲存狀態(tài)且至少一位程序化為該第二儲存狀態(tài); 識別該些扇區(qū)之中儲存該原始數(shù)據(jù)的一第二扇區(qū),其中該第二扇區(qū)的該標記的至少一位為該第一儲存狀態(tài)且該第二扇區(qū)的該標記的至少一其他位為該第二儲存狀態(tài);以及將該第二扇區(qū)的所有位程序化為該第一儲存狀態(tài)。2.如權利要求1所述的數(shù)據(jù)儲存方法,還包括: 若在該區(qū)塊中不存在所有位為該第二儲存狀態(tài)的該標記,將該區(qū)塊的所有位程序化為該第二儲存狀態(tài)。3.如權利要求1所述的數(shù)據(jù)儲存方法,還包括: 為儲存于該第一扇區(qū)的該更新數(shù)據(jù)產(chǎn)生一對應錯誤校正碼。4.如權利要求3所述的數(shù)據(jù)儲存方法,其中若儲存于該第一扇區(qū)的該更新數(shù)據(jù)的所有位為該第一儲存狀態(tài)時,該對應錯誤校正碼的所有位為該第一儲存狀態(tài)。5.如權利要求1所述的數(shù)據(jù)儲存方法,還包括: 根據(jù)該更新數(shù)據(jù)及該原始數(shù)據(jù)的大小決定該些扇區(qū)的大小。6.如權利要求1所述的數(shù)據(jù)儲存方法,其中該第一儲存狀態(tài)為O且該第二儲存狀態(tài)為17.一種嵌入式系統(tǒng),該嵌入式系統(tǒng)包括: 一閃存模塊,該閃存模塊儲存一原始數(shù)據(jù)且至少包括一區(qū)塊,該區(qū)塊包括多個扇區(qū),每一該些扇區(qū)包括多個位,每一該些位可被識別為一第一儲存狀態(tài)或一第二儲存狀態(tài),每一該些扇區(qū)記錄一標記;以及 一微控制單元,該微控制單元耦接于該閃存模塊, 其中該微控制單元執(zhí)行一程序代碼以執(zhí)行下列步驟: 獲取該些扇區(qū)之中的一第一扇區(qū),其中該第一扇區(qū)的該標記的所有位為該第二儲存狀態(tài); 將一更新數(shù)據(jù)寫入至該第一扇區(qū),并將該第一扇區(qū)的該標記的至少一位程序化為該第一儲存狀態(tài)且至少一位程序化為該第二儲存狀態(tài); 識別該些扇區(qū)之中儲存該原始數(shù)據(jù)的一第二扇區(qū),其中該第二扇區(qū)的該標記的至少一位為該第一儲存狀態(tài)且該第二扇區(qū)的該標記的至少一其他位為該第二儲存狀態(tài);以及將該第二扇區(qū)的所有位程序化為該第一儲存狀態(tài)。8.如權利要求7所述的嵌入式系統(tǒng),其中若在該區(qū)塊中不存在所有位為該第二儲存狀態(tài)的該標記,該微控制單元將該區(qū)塊的所有位程序化為該第二儲存狀態(tài)。9.如權利要求7所述的嵌入式系統(tǒng),其中該微控制單元還為儲存于該第一扇區(qū)的該更新數(shù)據(jù)產(chǎn)生一對應錯誤校正碼。10.如權利要求9所述的嵌入式系統(tǒng),其中若儲存于該第一扇區(qū)的該更新數(shù)據(jù)的所有位為該第一儲存狀態(tài)時,該對應錯誤校正碼的所有位為該第一儲存狀態(tài)。11.如權利要求7所述的嵌入式系統(tǒng),其中該微控制單元根據(jù)該更新數(shù)據(jù)及該原始數(shù)據(jù)的大小決定該些扇區(qū)的大小。12.如權利要求7所述的嵌入式系統(tǒng),其中該第一儲存狀態(tài)為O且該第二儲存狀態(tài)為1
【文檔編號】G06F11/10GK105988722SQ201510071871
【公開日】2016年10月5日
【申請日】2015年2月11日
【發(fā)明人】林書毅
【申請人】緯創(chuàng)資通股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
察哈| 瑞丽市| 建宁县| 海安县| 祁连县| 西和县| 黔西县| 临漳县| 清新县| 大庆市| 舒兰市| 彰化县| 洛阳市| 襄汾县| 儋州市| 鄱阳县| 钟山县| 麻江县| 辉南县| 东城区| 湖南省| 西青区| 肇州县| 墨江| 肥乡县| 深水埗区| 商都县| 玉龙| 曲沃县| 册亨县| 金寨县| 塘沽区| 三门峡市| 麦盖提县| 饶河县| 南华县| 清新县| 阿拉尔市| 庆元县| 砚山县| 乌海市|