数据储存方法及嵌入式系统的制作方法

文档序号:10624509阅读:272来源:国知局
数据储存方法及嵌入式系统的制作方法
【专利摘要】一种数据储存方法及嵌入式系统。数据储存方法用于将更新数据写入闪存模块以更新原始数据,闪存模块至少包括区块,区块包括多个扇区,每一扇区包括多个位,每一位可被识别为第一储存状态或第二储存状态,每一扇区记录一标记,数据储存方法包括:获取扇区之中的第一扇区,其中第一扇区的标记的所有位为第二储存状态;将更新数据写入至第一扇区,并将第一扇区的标记的至少一位程序化为第一储存状态且至少一位程序化为第二储存状态;识别扇区之中储存原始数据的第二扇区,其中第二扇区的标记的至少一位为第一储存状态且至少一其他位为第二储存状态;以及将第二扇区的所有位程序化为第一储存状态。本发明可延长闪存的寿命。
【专利说明】
数据储存方法及嵌入式系统
技术领域
[0001]本发明涉及一种数据储存方法及嵌入式系统,且特别涉及一种具有高写入次数的数据储存方法及嵌入式系统。
【背景技术】
[0002]一般来说,传统的嵌入式系统通常使用电可擦除只读存储器(EEPR0M,Electrically Erasable Programmable Read Only Memory)作为小量数据的储存媒体,其具有可以字节为单位写入及清除的优势,因此在写入多笔小量数据时十分的方便。但随着闪存的容量越来越大及价格越来越便宜,EEPROM变得相对昂贵并在嵌入式系统中逐渐地被便宜的闪存所取代。
[0003]然而,由于闪存在执行清除指令时必须一次清除(erase) —整个区块(block),无法像EERPOM以字节为单位进行清除。若将一个数据量较小的文件,例如系统的引导装载程序(bootloader)或是网络设定配置等,储存于闪存的区块中,当更新此文件时,系统必须清除文件所在的整个区块,再将更新的文件储存于原本的区块中,这使得闪存的重新写入次数远小于EEPROM。
[0004]因此,需要提供一种数据储存方法及嵌入式系统来解决上述问题。

【发明内容】

[0005]本公开提出一种数据储存方法及嵌入式系统,其能有效地延长闪存的寿命。
[0006]本公开提出一种数据储存方法,该数据储存方法用于将一更新数据写入一闪存模块以更新一原始数据,该闪存模块至少包括一区块,该区块包括多个扇区,每一该些扇区包括多个位,每一该些位可被识别为一第一储存状态或一第二储存状态,每一该些扇区记录一标记,该数据储存方法包括:获取该些扇区之中的一第一扇区,其中该第一扇区的该标记的所有位为该第二储存状态;将该更新数据写入至该第一扇区,并将该第一扇区的该标记的至少一位程序化为该第一储存状态且至少一位程序化为该第二储存状态;识别该些扇区之中储存该原始数据的一第二扇区,其中该第二扇区的该标记的至少一位为该第一储存状态且该第二扇区的该标记的至少一其他位为该第二储存状态;以及将该第二扇区的所有位程序化为该第一储存状态。
[0007]在本公开的一范例实施例中,上述数据储存方法还包括若在上述区块中不存在所有位为第二储存状态的标记,将上述区块的所有位程序化为第二储存状态。
[0008]在本公开的一范例实施例中,上述数据储存方法还包括为储存于第一扇区的更新数据产生对应错误校正码。
[0009]在本公开的一范例实施例中,其中若储存于第一扇区的更新数据的所有位为第一储存状态时,对应错误校正码的所有位为第一储存状态。
[0010]在本公开的一范例实施例中,上述数据储存方法还包括根据更新数据及原始数据的大小决定这些扇区的大小。
[0011]在本公开的一范例实施例中,其中第一储存状态为O且第二储存状态为I。
[0012]本公开提出一种嵌入式系统,该嵌入式系统包括:一闪存模块以及一微控制单元;该闪存模块储存一原始数据且至少包括一区块,该区块包括多个扇区,每一该些扇区包括多个位,每一该些位可被识别为一第一储存状态或一第二储存状态,每一该些扇区记录一标记;该微控制单元耦接于该闪存模块,其中该微控制单元执行一程序代码以执行下列步骤:获取该些扇区之中的一第一扇区,其中该第一扇区的该标记的所有位为该第二储存状态;将一更新数据写入至该第一扇区,并将该第一扇区的该标记的至少一位程序化为该第一储存状态且至少一位程序化为该第二储存状态;识别该些扇区之中储存该原始数据的一第二扇区,其中该第二扇区的该标记的至少一位为该第一储存状态且该第二扇区的该标记的至少一其他位为该第二储存状态;以及将该第二扇区的所有位程序化为该第一储存状
??τ O
[0013]在本公开的一范例实施例中,其中若在上述区块中不存在所有位为第二储存状态的标记,微控制单元将上述区块的所有位程序化为第二储存状态。
[0014]在本公开的一范例实施例中,上述微控制单元还为储存于该第一扇区的该更新数据产生一对应错误校正码。
[0015]在本公开的一范例实施例中,其中若储存于第一扇区的更新数据的所有位为第一储存状态时,对应错误校正码的所有位为第一储存状态。
[0016]在本公开的一范例实施例中,其中上述微控制单元根据更新数据及原始数据的大小决定这些扇区的大小。
[0017]在本发明的一范例实施例中,其中第一储存状态为O且第二储存状态为I。
[0018]基于上述,本公开的数据写入方法及嵌入式系统可以根据标记寻找未写入的扇区写入更新数据,并将储存原始数据的扇区的所有位(bit)设定为第一储存状态。如此一来,在每次更新数据时可逐一使用区块中的扇区写入更新数据,只有当所有扇区都被使用过,也就是上述区块不具有未写入的扇区时,才需要清除整个区块,从而延长闪存的寿命。
[0019]为让本公开的上述特征和优点能更明显易懂,下文特举实施例,并配合所附附图作详细说明如下。
【附图说明】
[0020]图1为根据本公开范例实施例所绘示的嵌入式系统的方框图。
[0021 ]图2A-图2C为根据本公开范例实施例的存取闪存模块扇区的示意图。
[0022]图3为根据本公开一范例实施例所绘示的数据储存方法的流程图。
[0023]图4为根据本公开一范例实施例所绘示的数据读取的流程图。
[0024]图5为根据本公开另一范例实施例的存取闪存模块扇区的示意图。
[0025]图6为根据本公开另一范例实施例的存取闪存模块扇区的示意图。
[0026]主要组件符号说明:
[0027]100嵌入式系统
[0028]102控制器
[0029]104闪存模块
[0030]201、202区块
[0031]211a、211b、…、211h、211i数据
[0032]221数据区
[0033]231带外区
[0034]241、242、…、247、248标记
[0035]S302、S304、S306、S308、S310、S312数据储存方法的步骤
[0036]S402.S404.S406读取数据的步骤
【具体实施方式】
[0037]为了使本公开的范例实施例更容易理解,以下将使用一个大小为256MB的与非门闪存(NAND flash)作为范例说明。此闪存可包括2048个区块,每一区块可包括64个页面(page),因此每一区块的大小为128KB,且每一页面的大小为2KB。
[0038]闪存会将错误校正码(ECC,Error Correct1n Code)储存在每一个页面的带外(00B,Out Of Band)区域,并利用错误校正码来修正数据错误。一个页面还可以分成四个512字节(Byte)的小块(chunk),错误校正码的计算是以小块为单位,因此每次修改一小块的数据时,系统会计算对应该小块的错误校正码(其大小为16字节),并储存于该小块所属页面的带外区域。由于一个2KB页面包括四小块,因此一个2KB页面会包含64字节的带外区域。因此,一个页面的实际大小可为(2K+64)字节,也就是数据区域加上带外区域,而一个区块的实际大小可为64x(2K+64)字节=(128Κ+4Κ)字节。值得一提的是,带外区域是系统用来存取对应页面的错误校正码,因此使用者并无法存取带外区域。另外,在写入数据时,闪存的最小写入单位为一个字节,而在清除数据时,闪存的最小清除单位为一个区块。
[0039]以上所述的闪存的区块、页面、小块、带外区域的数量及大小仅用于使本公开的范例实施例更加容易理解。必须了解的是,本公开并不以此为限。本公开的闪存的区块、页面、小块、带外区域的数量及大小也可具有其他配置,而闪存也可为或非门闪存(NOR flash)或其他种类的闪存。
[0040]图1为根据本公开范例实施例所绘示的嵌入式系统的方框图并且图2A-图2C为根据本公开范例实施例的存取闪存模块扇区的示意图。
[0041]请参照图1及图2A,本公开范例实施例的嵌入式系统100包括控制器102及闪存模块104,其中控制器102耦接于闪存模块104且用以执行写入操作以将数据写入至闪存模块104或者执行读取操作以从闪存模块104中读取数据。
[0042]假设目前要将一个16KB的数据211a存入闪存模块104的区块201中,控制器102会先判断数据211a的大小,也就是说,控制器102会判断出16KB的数据211a可储存于8个大小为2KB的页面中,因此控制器102会将区块201的页面I到页面64分成八个扇区(sector),其中扇区I对应页面I到页面8,扇区2对应页面9到页面16,以此类推。在此,数据可为嵌入式系统100的引导装载程序、网络设定配置(例如IP地址、网络屏蔽、网关器地址)、嵌入式系统100的系统配置文件等。
[0043]在此假设区块201从未被写入数据,因此所有的页面的字节皆记录为OxFF。在此,控制器102会将扇区I的第一个字节,也就是页面I的第一个字节辨识为标记241。由于区块201所有页面的字节皆为OxFF,因此标记241当然也为OxFF。在本范例实施例中,标记241为OxFF代表对应标记的扇区I为未写入扇区。同理可知,扇区2到扇区8的标记,也就是扇区2到扇区8的第一个字节在此时也都为OxFF。虽然以上说明了使用每个扇区的第一个字节作为标记,但本发明并不以此为限。在另一范例实施例中,也可利用扇区中的任一字节作为标记,或者也可利用扇区中的任意多个字节作为标记。
[0044]当控制器102将数据211a写入区块201之前,控制器102会根据区块201中所有扇区的标记寻找扇区中未写入的扇区。也就是说,控制器102会寻找标记241到标记248中数值为OxFF的标记,并把数据211a写入此标记对应的扇区中。由于此时标记241到标记248的数值都是OxFF,因此控制器102会选择第一个扇区I (或第一扇区)写入数据211a。
[0045]在控制器102将数据211a写入扇区I时,控制器102会将扇区I的标记241,也就是扇区I的第一个字节(或是页面I的第一个字节),修改为0x01,以表示目前扇区I存有有效数据(valid data)。此时,数据211a是储存于页面I到页面8的数据区221中。虽然以上说明了将标记241修改为0x01以表示其对应扇区存有有效数据,但本公开并不以此为限。标记241也可修改为0x02、0x03、…、OxFE等0x00及OxFF以外的值,用以表示其对应的扇区存有有效数据。
[0046]值得一提的是,将数据211a写入至页面I到页面8的数据区221时,控制器102会分别计算页面I到页面8的错误校正码ECCl到ECC8,并将ECCl到ECC8分别写入到对应页面I到页面8的带外区231中。在此,ECCl到ECC8可利用BCH、RS或汉明码等错误校正算法产生。值得注意的是,在一个完全未写入的区块中,其所有页面对应的ECC值都是OxFF。
[0047]请继续参照图2B,数据211b可为数据211a的更新文件或其他类型的文件。当控制器102要将数据211b写入区块201之前,控制器102会根据区块201中所有扇区的标记寻找扇区中未写入的扇区。也就是说,控制器102会寻找标记241到标记248中数值为OxFF的标记,并把数据211a写入此标记对应的扇区中。由于此时标记241的数值为0x01,而标记242到标记248的数值都是OxFF,因此控制器102会选择扇区2到扇区8的第一个扇区2(或第一扇区)写入数据211b。
[0048]在控制器102将数据211b写入扇区2时,控制器102会将扇区2的标记242,也就是扇区2的第一个字节(或是页面9的第一个字节),修改为0x01,以表示目前扇区2存有有效数据。此时,数据211b是储存于页面9到页面16的数据区221中。
[0049]同样地,在将数据211b写入页面9到页面16的数据区221时,控制器102会分别计算页面9到页面16的错误校正码ECC9到ECC16,并将ECC9到ECC16分别写入到对应页面9到页面16的带外区231中。
[0050]除了将ECC9到ECC16分别写入到对应页面9到页面16的带外区231中,由于扇区2的上一个扇区,也就是扇区I中的数据211a已属于无效数据,控制器102还会将扇区I (或第二扇区)的数据区221的所有字节修改为0x00,这也包含了将扇区I的标记241修改为0x00,表示此扇区I处于被写入过且目前不具有有效数据。
[0051]在控制器102将扇区I (或第二扇区)的数据区221的所有字节修改为0x00时,控制器102会分别计算页面I到页面8的错误校正码ECCl到ECC8,由于所有字节皆为0x00的数据所产生的错误校正码也是所有字节皆为0x00,控制器102会将页面I到页面8的带外区231全部的字节写入0x00。
[0052]请继续参照图2C,当数据利用图2A及图2B的方法写入数次,使得区块201的扇区8存有数据时,此时扇区I到扇区7的数据区221的全部字节已都被修改为0x00,且扇区I到扇区7的标记241到标记247也都被修改为0x00。若此时控制器102要将数据211i写入至区块201时,控制器102会先检查区块201中扇区I到扇区8的标记241到标记248。由于标记241到标记247的数值皆为0x00且标记248的数值为0x01,所以控制器102找不到标记值为OxFF的扇区,其代表区块201中已经没有未写入的扇区。此时,控制器102便需要擦除整个区块201,也就是把扇区I到扇区8的所有字节擦除为OxFF。接着再利用与图2A的相同方法,就可将数据211i写入扇区1,也就是页面I到页面8的数据区221中。
[0053]由于本公开只有在区块201所有扇区都进行过写入操作之后才会擦除整个区块201,也就是在区块201的八个扇区都储存过数据之后才会擦除区块201,因此相比于一般在闪存中更新一个扇区就必须清除整个区块的状况,本发明的写入方法在同样次数的扇区数据更新中,擦除区块201的次数只有一般闪存的八分之一,因此闪存写入数据的次数也可提升为原本的八倍,从而延长闪存的寿命。
[0054]值得注意的是,本范例实施例中控制器102可为逻辑运算电路,以在写入数据时进行扇区分配、寻找未写入扇区及设定扇区标记等运算。然而,本公开并不以此为限,在另一实施例中,上述控制器102所执行的功能亦可以固件或软件的程序代码来实际操作,并且当嵌入式系统100上电时,这些程序代码会被载入至存储器中,由微控制器单元(MCU,Mirco Controller Unit)来执行以完成上述控制器102所执行的功能。
[0055]图3为根据本公开一范例实施例所绘示的数据储存方法的流程图。
[0056]在步骤S302中,控制器102会依序检查区块中每一扇区的标记,寻找具有标记数值为OxFF的未写入扇区,也就是在区块被擦除之后尚未被写入过的扇区。
[0057]若区块中没有标记数值为OxFF的未写入扇区,则在步骤S304中,控制器102会擦除区块,将区块中所有字节修改为OxFF。
[0058]若区块中具有标记数值为OxFF的未写入扇区时,则在步骤S306中,控制器102会将更新数据写入标记数值为OxFF的未写入扇区,并且将对应的标记设定为有效状态,例如OxOl0同时,在写入更新数据到扇区时,控制器102会更新对应页面的错误校正码。
[0059]在步骤S308中,控制器102会判断写入是否成功。
[0060]若写入不成功时,则在步骤S310中,控制器102会将目前扇区的所有字节填入0x00,并产生对应的错误校正码(其中错误校正码的所有字节也都会是0x00),接着执行步骤S302,以寻找未写入的扇区重新写入数据。
[0061]若写入成功时,则控制器102会将储存原始数据(亦称为旧数据)扇区的所有字节填入0x00 (包含扇区的标记),并产生对应的错误校正码(也全为0x00)。如此一来,控制器102可以藉由标记0x00判断先前的扇区所储存的数据已变成无效数据。
[0062]图4为根据本公开一范例实施例所绘示的数据读取的流程图。
[0063]在步骤S402中,若控制器102要读取数据,控制器102会在区块中寻找有效扇区,也就是标记不为0x00及OxFF的扇区。若区块中没有有效扇区时,则在步骤S404中,控制器102会传送读取失败的信息。
[0064]若区块中具有有效扇区时,则控制器102会从有效扇区的数据区读取数据,例如读取嵌入式系统100的引导装载程序、网络设定配置(例如IP地址、网络屏蔽、网关器地址)、嵌入式系统100的系统配置文件等。
[0065]图5为根据本公开另一范例实施例的存取闪存模块扇区的示意图。
[0066]请参照图5,相比于在图2A到图2C中使用单个区块201储存数据,在图5中,也可使用两个区块,也就是区块201及区块202来储存数据。
[0067]相同于图2A的第一步骤,在区块201及区块202都无数据储存时,扇区I到扇区16的数据区跟带外区的所有字节都是OxFF,当然每个扇区的标记也都是OxFF,代表了每个扇区在目前都处于未写入状态。当有第一笔数据要写入之前,控制器102会根据扇区I到扇区16的标记寻找出处于未写入状态的扇区1,把数据写入扇区I并将扇区I的标记修改为0x01,代表扇区I目前储存了有效数据。在写入数据到扇区I时,控制器102也会计算扇区I每个页面的ECC并将其储存于扇区I的带外区,此操作相同于图2A的第2步骤。
[0068]当要写入更新数据时,控制器102会将数据写入扇区2,并重新程序化扇区I的数据区及带外区,也就是,将扇区I的数据区及带外区的所有字节重新程序化为0x00。
[0069]以此类推,每一笔更新数据会依序写入到扇区3至扇区16,且控制器102会分别重新程序化扇区2到扇区15的数据区及带外区。之后,若要写入下一笔更新数据且控制器102目前具有标记值为0x01的扇区16的下一个扇区(S卩,扇区I)的标记值为0x00时,控制器102会擦除区块201,以将区块201的所有字节设定为OxFF。同理,当扇区8的标记值为0x01且其他所有扇区的标记值均为0x00时,控制器102会擦除区块202,以将区块202的所有字节设定为OxFF。
[0070]在另一范例实施例中,控制器102也可在写完每一笔数据之后检查区块的所有标记值,若一区块所有标记值皆为0x00,则清除该区块。也就是说,控制器102亦可在更新数据写入扇区9之后识别区块201的所有标记值都为0x00,并擦除区块201。
[0071]虽然以上说明了使用两个区块来储存数据,但本公开并不以此为限。本公开也可使用三个或更多个区块来储存数据,以防止运行时间坏区块的产生,或是用于满足更大数据量的储存需求。
[0072]图6为根据本公开另一范例实施例的存取闪存模块扇区的示意图。
[0073]请参照图6,相比于在以上范例实施例中,扇区大小都是页面大小的倍数,然而,扇区大小亦可被设定为页面大小2KB的四分之一,也就是小块的大小512字节。
[0074]相同于以上范例实施例,当有第一笔数据要写入之前,控制器102会寻找出处于未写入状态的扇区1,把数据写入扇区I并将扇区I的标记修改为0x01,以代表扇区I目前储存了有效数据。在写入数据到扇区I时,控制器102也会计算扇区I的ECCl并将其储存于扇区I的带外区。由于目前扇区I的大小是相当于小块的大小,因此其ECCl的大小为一个页面ECC大小64字节的四分之一,也就是16字节。
[0075]接着,可重复图5的操作,直到扇区256储存了有效数据,也就是扇区256的标记为0x01。此时,扇区I到扇区255的所有字节都为0x00,若有新的数据要写入时,控制器102会将区块201清除,并将新的数据写入扇区I。
[0076]在本公开的闪存中,小块的大小为512字节,而小块是执行ECC运算的最小单位,因此扇区大小必须以小块的大小512字节为单位。虽然以上说明了以一个小块作为扇区大小,但本公开并不以此为限。本公开也可使用两个或更多小块作为扇区大小。
[0077]综上所述,上述范例实施例提出了一种数据储存方法,将闪存的区块分为多个扇区,每个扇区具有一个标记,标记值为OxFF代表扇区为未写入状态、0x00代表扇区为空白状态、OxFF及0x00以外的数值代表扇区具有有效数据。由于在闪存中I到O的操作可以字节为单位进行,但O到I的操作需要以区块为单位进行,因此本范例实施例以OxOO来表示此扇区曾经具有有效数据,但目前属于擦除状态。在本范例实施例中,数据可以依序储存于区块的未写入扇区中,并在数据成功储存之后将之前储存有效数据的扇区重新程序化为OxOO0只有当整个区块中已经没有标记为OxFF的扇区时,才必须擦除区块。相比于传统使用闪存储存系统的引导装载程序或是网络设定配置时,在每次更新数据时都要擦除整个区块,本范例实施例可在一个区块的全部扇区都使用过后才擦除区块,因此可大幅增进使用于嵌入式系统中的闪存的使用寿命。
[0078]虽然本公开已以实施例公开如上,然而其并非用以限定本公开,任何所属技术领域中的普通技术人员,在不脱离本公开的精神和范围的情况下,应当可作些许的更动与润饰,故本公开的保护范围应当视所附的权利要求书的范围所界定者为准。
【主权项】
1.一种数据储存方法,该数据储存方法用于将一更新数据写入一闪存模块以更新一原始数据,该闪存模块至少包括一区块,该区块包括多个扇区,每一该些扇区包括多个位,每一该些位可被识别为一第一储存状态或一第二储存状态,每一该些扇区记录一标记,该数据储存方法包括: 获取该些扇区之中的一第一扇区,其中该第一扇区的该标记的所有位为该第二储存状态; 将该更新数据写入至该第一扇区,并将该第一扇区的该标记的至少一位程序化为该第一储存状态且至少一位程序化为该第二储存状态; 识别该些扇区之中储存该原始数据的一第二扇区,其中该第二扇区的该标记的至少一位为该第一储存状态且该第二扇区的该标记的至少一其他位为该第二储存状态;以及将该第二扇区的所有位程序化为该第一储存状态。2.如权利要求1所述的数据储存方法,还包括: 若在该区块中不存在所有位为该第二储存状态的该标记,将该区块的所有位程序化为该第二储存状态。3.如权利要求1所述的数据储存方法,还包括: 为储存于该第一扇区的该更新数据产生一对应错误校正码。4.如权利要求3所述的数据储存方法,其中若储存于该第一扇区的该更新数据的所有位为该第一储存状态时,该对应错误校正码的所有位为该第一储存状态。5.如权利要求1所述的数据储存方法,还包括: 根据该更新数据及该原始数据的大小决定该些扇区的大小。6.如权利要求1所述的数据储存方法,其中该第一储存状态为O且该第二储存状态为17.一种嵌入式系统,该嵌入式系统包括: 一闪存模块,该闪存模块储存一原始数据且至少包括一区块,该区块包括多个扇区,每一该些扇区包括多个位,每一该些位可被识别为一第一储存状态或一第二储存状态,每一该些扇区记录一标记;以及 一微控制单元,该微控制单元耦接于该闪存模块, 其中该微控制单元执行一程序代码以执行下列步骤: 获取该些扇区之中的一第一扇区,其中该第一扇区的该标记的所有位为该第二储存状态; 将一更新数据写入至该第一扇区,并将该第一扇区的该标记的至少一位程序化为该第一储存状态且至少一位程序化为该第二储存状态; 识别该些扇区之中储存该原始数据的一第二扇区,其中该第二扇区的该标记的至少一位为该第一储存状态且该第二扇区的该标记的至少一其他位为该第二储存状态;以及将该第二扇区的所有位程序化为该第一储存状态。8.如权利要求7所述的嵌入式系统,其中若在该区块中不存在所有位为该第二储存状态的该标记,该微控制单元将该区块的所有位程序化为该第二储存状态。9.如权利要求7所述的嵌入式系统,其中该微控制单元还为储存于该第一扇区的该更新数据产生一对应错误校正码。10.如权利要求9所述的嵌入式系统,其中若储存于该第一扇区的该更新数据的所有位为该第一储存状态时,该对应错误校正码的所有位为该第一储存状态。11.如权利要求7所述的嵌入式系统,其中该微控制单元根据该更新数据及该原始数据的大小决定该些扇区的大小。12.如权利要求7所述的嵌入式系统,其中该第一储存状态为O且该第二储存状态为1
【文档编号】G06F11/10GK105988722SQ201510071871
【公开日】2016年10月5日
【申请日】2015年2月11日
【发明人】林书毅
【申请人】纬创资通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1