CN109947369A - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN109947369A CN109947369A CN201910223411.XA CN201910223411A CN109947369A CN 109947369 A CN109947369 A CN 109947369A CN 201910223411 A CN201910223411 A CN 201910223411A CN 109947369 A CN109947369 A CN 109947369A
- Authority
- CN
- China
- Prior art keywords
- storage
- sector
- memory space
- unit memory
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请实施例提供一种数据存储方法及装置,应用于存储器,涉及计算机技术领域。存储器包括多个存储扇区,每个存储扇区的数据保存区域包括多个容量相同的子区域,子区域的数量与目标数据的字节数量相同,子区域包括多个用于存储一个单位字节数据的单位存储空间。在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区,然后在第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间,最后将目标数据的各个字节数据依次写入第一目标单位存储空间。由此,实现了数据的字节写入,并且每个存储扇区写入目标数据的次数增多。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据存储方法及装置。
背景技术
在物联网智能水表、智能燃气表、智能热力表、智能电表等设备中,一般都会使用小容量的存储器对使用量、配置参数等信息进行掉电存储。在上述设备中使用的存储器需要具有以下特点:容量不大,一般为几十字节(Byte)的存储空间;擦写次数多,由于需要对累计使用量进行存储,通常一个计量单位需要存储一次(比如,累计使用量每变化0.1个单位(比如,L)就要存储一次),累计存储次数需要几十万甚至上百万。
目前上述设备中使用的存储器一般为Flash,Flash通常不具有独立的、可以可靠擦写百万次以上的存储区域,并且仅支持页写。在仅支持页写的情况下,若向Flash的一个存储扇区写入一次数据后,再向该存储扇区写入数据则需要先执行擦除操作。
发明内容
本申请实施例的目的在于提供一种数据存储方法及装置,其能够通过设计特定的规则,实现数据的字节写入,从而能够在不执行擦除操作的情况下,向一个存储扇区多次写入目标数据,充分利用存储器的存储空间,避免每写入一次数据就需要对已写入过一次数据的存储扇区进行一次擦除操作,进而延长存储器的使用寿命,并大大提高存储器的可靠读写次数。
第一方面,本申请实施例提供一种数据存储方法,应用于存储器,所述存储器包括多个存储扇区,每个存储扇区包括数据保存区域及用于保存该存储扇区的存储状态的状态保存区域,所述数据保存区域包括多个容量相同的子区域,所述子区域的数量与目标数据的字节数量相同,所述子区域包括多个用于存储一个单位字节数据的单位存储空间,所述方法包括:
在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区;
在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间;
将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。
第二方面,本申请实施例提供一种数据存储装置,应用于存储器,所述存储器包括多个存储扇区,每个存储扇区包括数据保存区域及用于保存该存储扇区的存储状态的状态保存区域,所述数据保存区域包括多个容量相同的子区域,所述子区域的数量与目标数据的字节数量相同,所述子区域包括多个用于存储一个单位字节数据的单位存储空间,所述装置包括:
查找模块,用于在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区;
所述查找模块,还用于在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间;
写入模块,用于将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。
相对于现有技术而言,本申请具有以下有益效果:
本申请实施例提供一种数据存储方法及装置,用于提高存储器的可靠读写次数及使用寿命。该存储器包括多个存储扇区,每个存储扇区包括状态保存区域及数据保存区域。其中,状态保存区域用于保存该存储扇区的存储状态。数据保存区域包括多个容量相同的子区域,子区域的数据与目标数据的字节数量相同,各个子区域包括多个用于存储一个单位字节数量的单位存储空间。在接收到写入目标数据的指令时,首先根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区,然后在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间,最后将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。由此,通过设计特定的规则,实现数据的字节写入,从而能够在不执行擦除操作的情况下,向一个存储扇区多次写入目标数据,充分利用存储器的存储空间,避免每写入一次数据就需要对已写入过一次数据的存储扇区进行一次擦除操作,进而延长存储器的使用寿命,并大大提高存储器的可靠读写次数。并且,由于通过上述方式使得存储器可存储大量的目标数据,因此上述方式还具有便于进行数据历史追溯的特点。
为使申请的上述目的、特征和优点能更明显易懂,下文特举本申请较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本申请实施例提供的电子设备的方框示意图;
图2是本申请实施例提供的数据存储方法的流程示意图之一;
图3是本申请实施例提供的存储扇区的结构示意图;
图4是图2中步骤S110包括的子步骤的流程示意图;
图5是图2中步骤S120包括的子步骤的流程示意图;
图6是图2中步骤S130包括的子步骤的流程示意图;
图7是本申请实施例提供的数据存储方法的流程示意图之二;
图8是本申请实施例提供的数据存储方法的流程示意图之三;
图9是图8中步骤S190包括的子步骤的流程示意图;
图10是本申请实施例提供的数据存储装置的方框示意图之一;
图11是本申请实施例提供的数据存储装置的方框示意图之二。
图标:100-电子设备;110-存储器;120-存储控制器;130-处理器;200-数据存储装置;210-查找模块;220-写入模块;230-读取模块。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
请参照图1,图1是本申请实施例提供的电子设备100的方框示意图。所述电子设备100可以是,但不限于,物联网智能水表、智能燃气表、智能热力表等。所述电子设备100可以包括:存储器110、存储控制器120、处理器130以及数据存储装置200。
所述存储器110、存储控制器120及处理器130各元件之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。可选地,该存储器110可为Flash闪存(Flash Memory),该存储器110包括多个即可用于存储目标数据的存储扇区。该存储器110中存储有数据存储装置200,所述数据存储装置200包括至少一个可以软件或固件(firmware)的形式存储于所述存储器110中的软件功能模块。所述处理器130通过运行存储在存储器110内的软件程序以及模块,如本申请实施例中的数据存储装置200,从而执行各种功能应用以及数据处理,即实现本申请实施例中的数据存储方法,从而可提高存储器110有效读写次数,使得使用Flash的电子设备100在不外扩EEPROM(Electric Erasable Programmable Read-Only Memory,电可擦除只读存储器)或者铁电存储器等的情况下,具有的可靠读写次数大于Flash一般具有的10万次左右的可靠读写次数,并且不会增加成本。
其中,存储器110用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。所述处理器130以及其他可能的组件对存储器110的访问可在所述存储控制器120的控制下进行。
所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器130可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等。还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
可以理解,图1所示的结构仅为示意,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
请参照图2,图2是本申请实施例提供的数据存储方法的流程示意图之一。该方法应用于存储器110,所述存储器110包括多个存储扇区。下面对数据存储方法的具体流程进行详细阐述。
步骤S110,在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区。
下面首先结合图3对存储扇区的结构进行说明。
每个存储扇区包括状态保存区域及数据保存区域。其中,每个存储扇区的容量为512字节(Byte)。
所述状态保存区域用于保存该存储扇区的存储状态,存储状态分为未写满状态(STATE_ERASED)、已写满状态(STATE_FULL)。可选地,未写满状态可以用0xFF表示,表明该存储扇区是刚擦除过且没有被写满的,可以进行数据存储;已写满状态可以用0x11表示,表明该存储扇区已经被存储满,需要擦除后才可以进行数据存储。
所述数据保存区域用于保存目标数据,该目标数据是电子设备100需要一直保存的数据,由此可知目标数据的字节数量是确定的,不会变化。比如,若电子设备100为物联网智能水表,目标数据则可以包括当前用水累计量及当前温度两个参数,当前用水累计量、当前温度各对应一个字节,目标数据为两个字节。所述数据保存区域包括多个容量相同的子区域,所述子区域的数量与目标字节数量相同,所述子区域包括多个用于存储一个单位字节数据的单位存储空间。每个子区域仅用于存储目标数据的一个参数,比如,子区域1一直用于存储当前用水累计量,子区域2用于存储当前温度。
可选地,子区域的划分方式如下:首先计算存储扇区除状态保存区域以外的剩余容量,然后根据目标数据的字节数量将剩余容量平均划分为N个子区域。其中,N为正整数,若不能经整除运算得到N,则保留余数。在划分完成后,还可以根据子区域的容量计算得到每个子区域的起始地址ADDR_PARAMETERS和结束地址ADDR_PARAMETERE。
下面对子区域的划分方式进行举例说明。假如每个存储扇区保留4个字节作为状态存储区域,目标数据有16字节。存储扇区除状态保存区域以外的剩余容量为508字节,由于目标数据有16字节,因此子区域的总数量为16,每个子区域的容量为508/16,“/”为整除操作,也就是说每个子区域的容量为31字节,有12字节作为保留区域。此时,子区域1的ADDR_PARAMETERS1=0,ADDR_PARAMETERE1=30;第二个子区域ADDR_PARAMETERS2=31,ADDR_PARAMETERE2=61……其中,若存储状态所需的容量不需要4字节,剩余的字节则保留。
可选地,状态保存区域可以位于数据保存区域之前,也可以位于数据保存区域之后。优选地,如图3所示,状态保存区域可以位于数据保存区域之前,即存储扇区前面4个字节保留作为状态保存区域。
电子设备100在接收到向存储器110写入目标数据的命令时,首先根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区。
可选地,在本实施例的一种实施方式中,可以先从各个存储扇区的状态区域中读取该区域中保存的存储状态,以获得各个存储扇区的存储状态。接着从至少一个存储状态为未写满状态的存储扇区中选择一个存储扇区作为第一目标扇区。在后续再次需要写入目标数据时,若此次选出的存储扇区仍为未写满状态,则此次选出的存储扇区可作为下一次存储目标数据的第一目标扇区。
可选地,在本实施例的另一种实施方式中,请参照图4,图4是图2中步骤S110包括的子步骤的流程示意图。步骤S110可以包括子步骤S111及子步骤S112。
子步骤S111,按照存储扇区的排列顺序依次获取各个存储扇区的状态保存区域中保存的存储状态。
子步骤S112,在查找到存储扇区的存储状态为未写满状态时,将查找到的未写满状态的存储扇区作为所述第一目标扇区。
在需要保存目标数据时,可按照存储扇区的排列顺序依次读取各个存储扇区得到状态保存区域中保存的存储状态,以查找存储状态为未写满状态的存储扇区。在获取过程中,若某个存储扇区的存储状态为未写满状态,则停止获取存储状态,并将查找到的未写满状态的存储扇区作为所述第一目标扇区。此时查找到的未写满状态的存储扇区作,是查找过程中首个未写满状态的存储扇区。按照存储扇区的排列顺序进行查找以确定第一目标扇区的方式,便于执行,同时便于快速确定所述第一目标扇区。
步骤S120,在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间。
在确定所述第一目标扇区后,在该第一目标扇区包括的各个子区域中确定一个单位存储空间作为所述第一目标单位存储空间。所述第一目标单位存储空间的数量与所述目标数据的字节数量相同,每个子区域中有一个第一目标单位存储空间。
请参照图5,图5是图2中步骤S120包括的子步骤的流程示意图。步骤S120可以包括子步骤S121及子步骤S122。
子步骤S121,在所述第一目标扇区的首个子区域内按照单位存储空间的位置顺序依次获取各个单位存储空间的数据写入状态。
子步骤S122,在查找到单位存储空间的数据写入状态为可写入状态时,将查找到的可写入状态的单位存储空间作为首个第一目标单位存储空间,并将其他各个子区域中与首个第一目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第一目标单位存储空间。
在本实施例中,数据写入状态分为:可写入状态、不可写入状态。若某个单位存储空间的数据为0xFF,则表示该单位存储空间的数据写入状态为可写入状态,可以写入数据;若某个单位存储空间的数据不为0xFF,则表示该单位存储空间的数据写入状态为不可写入状态,不可以写入数据。
在确定所述第一目标扇区PAGESx时,可确定所述第一目标扇区的起始物理地址ADDRPHY_PAGESx。接下来则根据存储状态区域与数据保存区域的位置关系确定数据保存区域的首个子区域的起始物理地址ADDRPHY_PARAMETERS1。比如,若如图3所示,状态保存区域为4个字节,且位于数据保存区域之前,则第一目标扇区的首次子区域的起始物理地址为:ADDRPHY_PARAMETERS1=ADDRPHY_PAGESx+4+ADDR_PARAMETERS1。
在得到第一目标扇区的首个子区域的起始物理地址ADDRPHY_PARAMETERS1后,在首个子区域内从起始物理地址ADDRPHY_PARAMETERS1开始,并按照单位存储空间的位置顺序,依次获取各个单位存储空间的数据写入状态,以查找数据写入状态为可写入状态的单位存储空间。在获取过程中,若某个单位存储空间的数据写入状态为可写入状态,则停止获取数据写入状态,并将查找到的可写入状态的单位存储空间作为在首个子区域中确定的第一目标单位存储空间,即首个第一目标单位存储空间。此时查找到的可写入状态的单位存储空间,是查找过程中首个可写入状态的单位存储空间。在确定首个的第一目标单位存储空间后,将其他各个子区域中与首个第一目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第一目标单位存储空间,也就是说,每个第一目标单位存储空间在所属子区域的位置相同。比如,如图3所示,子区域1单位存储空间1是子区域1中的第二个单位存储空间,若子区域1单位存储空间1是首个第一目标单位存储空间,则子区域1中的第二个单位存储空间子区域1单位存储空间1也是第一目标单位存储空间,其他的子区域以此类推。
步骤S130,将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。
其中,每个第一目标单位存储空间可存储目标数据的一个字节数据。
请参照图6,图6是图2中步骤S130包括的子步骤的流程示意图。步骤S130可以包括子步骤S131、子步骤S132及子步骤S133。
子步骤S131,根据所述第一目标扇区的起始物理地址、状态保存区域的容量计算得到首个第一目标单位存储空间的物理地址。
子步骤S132,根据首个第一目标单位存储空间的物理地址、目标数据的字节数量及每个子区域的容量计算得到其他的第一目标单位存储空间的物理地址。
子步骤S133,根据各个第一目标单位存储空间的物理地址,将所述目标数据的各个字节数据按照字节顺序依次写入所述第一目标单位存储空间。
在本实施例中,在根据第一目标扇区的首个子区域的起始物理地址ADDRPHY_PARAMETERS1开始查找确定首个第一目标单位存储空间时,即可确定首个第一目标单位存储空间的物理地址ADDRPHY_ACT_PARAMETER1。接下来则在根据首个第一目标单位存储空间确定其他的第一目标单位存储空间时,同时确定其他的每个第一目标单位存储空间的物理地址ADDRPHY_ACT_PARAMETER1+M/N×(参数编号-1)。其中,M表示每个存储扇区除状态保存区域外的总容量,N表示数据存储区域包括的子区域的总数量。参数编号用于区分每个参数在目标数据中的位置,比如,目标数据包括3个参数,参数编号分别为1、2、3,子区域1用于存储参数编号1的数值,子区域2用于存储参数编号2的数值。
在获得各第一目标单位存储空间的物理地址后,按照目标数据的各个字节数据的顺序,依次向对应的第一单位存储空间内写入各个字节数据。比如,如图3所示,若目标数据包括两个参数,参数编号分别为1、2,查找到的第一目标存储空间分别为子区域1单位存储空间1、子区域2单位存储空间2,则将参数编号1对应的参数值写入子区域1单位存储空间1,将参数编号2对应的参数值写入子区域2单位存储空间1。
根据存储扇区的排列顺序选择第一目标扇区,并在第一目标扇区内的首个子区域内按照单位存储空间的位置顺序选择首个第一目标单位存储空间,进而确定其他的各个第一单位存储空间,最后将目标数据的各个字节数据依次写入所述第一目标单位存储空间。该方式便于快速确定第一目标扇区及第一目标单位存储空间,同时根据首个子区域内单位存储空间的数据写入状态即可判定该第一目标扇区是否确实可以写入目标数据。并且,由于查找过程及写入过程均是按照存储器110中单位存储空间的位置顺序进行,因此还可以保证后续读取目标数据时,不会出现字节数据混乱的情况。
请参照图7,图7是本申请实施例提供的数据存储方法的流程示意图之二。所述方法还可以包括步骤S140。
步骤S140,若所述第一目标扇区的首个子区域内各个单位存储空间均为不可写入状态,则将所述第一目标扇区的状态保存区域中的存储状态修改为已写满状态,并根据每个存储扇区的状态保存区域中保存的存储状态重新选择一个未写满状态的存储扇区作为第一目标扇区。
在本实施例中,在通过步骤S110确定所述第一目标扇区后,若在所述第一目标扇区的首个子区域内按照单位存储空间的位置顺序依次获取各个单位存储空间的数据写入状态的过程中,直到获取到最后一个单位存储空间的数据写入状态,仍未查找到单位存储空间的数据写入状态为可写入状态,即所述第一目标扇区的首个子区域内各个单位存储空间均为不可写入状态。此时则可将第一目标扇区的状态保存区域中的存储状态由未写满状态修改为已写满状态。
在修改后存储状态后,可根据其他的每个存储扇区的状态保存区域中保存的存储状态,重新选择一个未写满状态的存储扇区作为第一目标扇区。
其中,重新选择第一目标扇区的方式可以为从剩余的未写满状态的存储扇区中任意选择一个;或按照存储扇区的排列顺序获取下一个存储扇区的存储状态,若下一个存储扇区的存储状态为未写满状态,则可以将下一个存储扇区作为新的第一目标扇区。优选地,按照存储扇区的排列顺序重新选择第一目标扇区,该方式易于操作,不会出现在已经查找过的存储扇区中重新执行查找操作。
请再次参照图7,所述方法还可以包括步骤S150。
步骤S150,若所有存储扇区均为已写满状态,则对其中一个存储扇区进行擦除操作,并将数据被擦除的存储扇区的存储状态修改为未写满状态,及将数据被擦除的存储扇区确定为所述第一目标扇区。
在本实施例中,若在查找第一目标扇区的过程中发现各个存储扇区均为已写满状态,则可以任意选择一个存储扇区或按照扇区的排列顺选择下一个存储扇区进行擦除操作。在完成擦除后,将数据被擦除的存储扇区的存储状态由已写满状态修改为未写满状态,并将该数据被擦除的存储扇区确定为所述第一目标扇区。优选地,所述对其中一个存储扇区进行擦除操作的方式为:按照存储扇区的排列顺序选择一个存储扇区进行擦除操作。
假如有多个存储扇区,按照存储扇区的排列顺序依次标记为PAGE0,PAGE1,PAGE2……PAGEY,若当前选择的存储扇区为PAGE1,则按照存储扇区的排列顺序,PAGE1的下一个存储扇区为PAGE2,其他依次类推,PAGEY的下一个存储扇区为PAGE0。
请参照图8,图8是本申请实施例提供的数据存储方法的流程示意图之三。所述方法还可以包括步骤S160~步骤S190,步骤S160~步骤S190可用于实现数据的读取。
步骤S160,在接收到读取最后一次写入的目标数据的指令时,按照存储扇区的排列顺序依次获取每个存储扇区的状态保存区域中保存的存储状态。
步骤S170,在查找到存储扇区的存储状态为未写满状态时,将查找到的未写满状态的存储扇区作为第二目标扇区。
步骤S180,在所述第二目标扇区的首个子区域内按照单位存储空间的位置顺序查找最后一个数据写入状态为不可写入状态的单位存储空间,并将查找到的最后一个不可写入状态的单位存储空间作为首个第二目标单位存储空间,将其他各个子区域中与首个第二目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第二目标单位存储空间。
步骤S190,从所述第二目标单位存储空间中依次读取最后一次写入的目标数据的各个字节数据,以获得最后一次写入的目标数据。
请参照图9,图9是图8中步骤S190包括的子步骤的流程示意图。步骤S190可以包括子步骤S191、子步骤S192及子步骤S193。
子步骤S191,根据所述第二目标扇区的起始物理地址、状态保存区域的容量计算得到首个第二目标单位存储空间的物理地址。
子步骤S192,根据首个第二目标单位存储空间的物理地址、目标数据的字节数量及每个子区域的容量计算得到其他的第二目标单位存储空间的物理地址。
子步骤S193,根据各个第二目标单位存储空间的物理地址,依次从各个第二目标单位存储空间读取最后一次写入的目标数据的各个字节数据。
在本实施例中,在接收到读取最后一次写入的目标数据(即最新的目标数据)的指令时,按照存储扇区的排列顺序依次获取每个存储扇区的存储状态。若查找到存储扇区的存储状态为未写满状态时,停止获取存储状态,并将查找到的未写满状态的存储扇区作为第二目标扇区。此时查找到的未写满状态的存储扇区,是查找过程中首个未写满状态的存储扇区。
在确定所述第二目标扇区后,在所述第二目标扇区的首个子区域内按照单位存储空间的位置顺序,依次获得每个单位存储空间的数据写入状态。在查找到单位存储空间的数据写入状态为可写入状态时,停止获取数据写入状态,并将可写入状态的单位存储空间前的单位存储空间(即,最后一个不写入状态的单位存储空间)作为首个第二目标单位存储空间。然后将其他各个子区域中与首个第二目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第二目标单位存储空间,也就是说,每个第二目标单位存储空间在所属子区域的位置相同。在确定第二目标单位存储空间时,同时获取各个第二目标单位存储空间的物理地址。最后按照各个第二目标单位存储空间的物理地址的顺序,从各个第二目标单位存储空间的物理地址对应的第二目标单位存储空间中读取字节数据,以实现最新目标数据的读取。
在本实施例中,数据读取过程与写入数据过程类似,在此不再赘述。
通过上述方法,使得存储器110实现了字节读写,并且大大提高了读写次数。在存储器110为Flash且状态保存区域为4个字节时,如果Flash的物理读写次数为Times_FlashPhysic,那么采用该方法后的实际读写次数为Times_FlashPhysic×(508/N)×(Y+1),将有效读写次数整整扩大了(508/N)×(X+1)倍。具体地,如果Flash的物理读写次数为2万次,定义Y=99,N=16,那么采用该方法的实际读写次数为6200万次,由此可看出该方法极大地提高了频繁数据读取的可靠性。
同时,由于存储器110可存储大量的目标数据,因此该方法还便于进行数据历史追溯。该方法本质上是一种以物理空间换取可靠性存储的方法,目标数据在实际的Flash存储区中有多个备份数据,具体的备份数据数量为(508/N)×(Y+1),也就是说,可以追溯数据的(508/N)×(Y+1)-1次数据备份。具体地,如果定义Y=99,N=16,那么可以追溯数据备份的数量为3099次。
可选地,能够实现上述方法的电子装置可以包括:时钟、电源电路及包括大容量Flash的微控制器,或者包括:时钟、电源电路及采用外扩大容量Flash的微控制器。当然可以理解的是,上述仅为举例说明,也可以采用其他器件组合得到可实现上述方法的电子装置。
请参照图10,图10是本申请实施例提供的数据存储装置200的方框示意图之一。所述数据存储装置200应用于存储器110。所述存储器110包括多个存储扇区,每个存储扇区包括数据保存区域及用于保存该存储扇区的存储状态的状态保存区域。所述数据保存区域包括多个容量相同的子区域,所述子区域的数量与目标数据的字节数量相同,所述子区域包括多个用于存储一个单位字节数据的单位存储空间。所述数据存储装置200可以包括查找模块210及写入模块220。
所述查找模块210,用于在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区。
可选地,所述查找模块210具体用于:
在所述第一目标扇区的首个子区域内按照单位存储空间的位置顺序依次获取各个单位存储空间的数据写入状态;
在查找到单位存储空间的数据写入状态为可写入状态时,将查找到的可写入状态的单位存储空间作为首个第一目标单位存储空间,并将其他各个子区域中与首个第一目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第一目标单位存储空间。
所述查找模块210,还用于在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间。
在本实施例中,所述查找模块210用于执行图2中的步骤S110~步骤S120及图7中的步骤S140~步骤S150,关于所述查找模块210的具体描述可以参照上文对图2中的步骤S110~步骤S120及图7中的步骤S140~步骤S150。
所述写入模块220,用于将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。
在本实施例中,所述写入模块220用于执行图2中的步骤S130,关于所述写入模块220的具体描述可以参照上文对图2中的步骤S130的描述。
请参照图11,图11是本申请实施例提供的数据存储装置200的方框示意图之二。所述数据存储装置200还可以包括读取模块230。
所述查找模块210,还用于在接收到读取最后一次写入的目标数据的指令时,按照存储扇区的排列顺序依次获取每个存储扇区的状态保存区域中保存的存储状态。
所述查找模块210,还在查找到存储扇区的存储状态为未写满状态时,将查找到的未写满状态的存储扇区作为第二目标扇区。
所述查找模块210,还在所述第二目标扇区的首个子区域内按照单位存储空间的位置顺序查找最后一个数据写入状态为不可写入状态的单位存储空间,并将查找到的最后一个不可写入状态的单位存储空间作为首个第二目标单位存储空间,将其他各个子区域中与首个第二目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第二目标单位存储空间。
在本实施例中,所述查找模块210还用于执行图8中的步骤S160~步骤S180,关于所述查找模块210的具体描述还可以参照上文对图8中的步骤S160~步骤S180的描述。
所述读取模块230,用于从所述第二目标单位存储空间中依次读取最后一次写入的目标数据的各个字节数据,以获得最后一次写入的目标数据。
在本实施例中,所述读取模块230用于执行图8中的步骤S190,关于所述读取模块230的具体描述可以参照上文对图8中的步骤S190的描述。
综上所述,本申请实施例提供一种数据存储方法及装置,用于提高存储器的可靠读写次数及使用寿命。该存储器包括多个存储扇区,每个存储扇区包括状态保存区域及数据保存区域。其中,状态保存区域用于保存该存储扇区的存储状态。数据保存区域包括多个容量相同的子区域,子区域的数据与目标数据的字节数量相同,各个子区域包括多个用于存储一个单位字节数量的单位存储空间。在接收到写入目标数据的指令时,首先根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区,然后在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间,最后将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。由此,通过设计特定的规则,实现数据的字节写入,从而能够在不执行擦除操作的情况下,向一个存储扇区多次写入目标数据,充分利用存储器的存储空间,避免每写入一次数据就需要对已写入过一次数据的存储扇区进行一次擦除操作,进而延长存储器的使用寿命,并大大提高存储器的可靠读写次数。并且,由于通过上述方式使得存储器可存储大量的目标数据,因此上述方式还具有便于进行数据历史追溯的特点。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据存储方法,其特征在于,应用于存储器,所述存储器包括多个存储扇区,每个存储扇区包括数据保存区域及用于保存该存储扇区的存储状态的状态保存区域,所述数据保存区域包括多个容量相同的子区域,所述子区域的数量与目标数据的字节数量相同,所述子区域包括多个用于存储一个单位字节数据的单位存储空间,所述方法包括:
在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区;
在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间;
将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间,包括:
在所述第一目标扇区的首个子区域内按照单位存储空间的位置顺序依次获取各个单位存储空间的数据写入状态;
在查找到单位存储空间的数据写入状态为可写入状态时,将查找到的可写入状态的单位存储空间作为首个第一目标单位存储空间,并将其他各个子区域中与首个第一目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第一目标单位存储空间。
3.根据权利要求2所述的方法,其特征在于,所述将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间,包括:
根据所述第一目标扇区的起始物理地址、状态保存区域的容量计算得到首个第一目标单位存储空间的物理地址;
根据首个第一目标单位存储空间的物理地址、目标数据的字节数量及每个子区域的容量计算得到其他的第一目标单位存储空间的物理地址;
根据各个第一目标单位存储空间的物理地址,将所述目标数据的各个字节数据按照字节顺序依次写入所述第一目标单位存储空间。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述第一目标扇区的首个子区域内各个单位存储空间均为不可写入状态,则将所述第一目标扇区的状态保存区域中的存储状态修改为已写满状态,并根据每个存储扇区的状态保存区域中保存的存储状态重新选择一个未写满状态的存储扇区作为第一目标扇区。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所有存储扇区均为已写满状态,则对其中一个存储扇区进行擦除操作,并将数据被擦除的存储扇区的存储状态修改为未写满状态,及将数据被擦除的存储扇区确定为所述第一目标扇区。
6.根据权利要求5所述的方法,其特征在于,所述根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区,包括:
按照存储扇区的排列顺序依次获取各个存储扇区的状态保存区域中保存的存储状态;
在查找到存储扇区的存储状态为未写满状态时,将查找到的未写满状态的存储扇区作为所述第一目标扇区;
所述对其中一个存储扇区进行擦除操作,包括:
按照存储扇区的排列顺序选择一个存储扇区,并对选择的存储扇区进行擦除操作。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在接收到读取最后一次写入的目标数据的指令时,按照存储扇区的排列顺序依次获取每个存储扇区的状态保存区域中保存的存储状态;
在查找到存储扇区的存储状态为未写满状态时,将查找到的未写满状态的存储扇区作为第二目标扇区;
在所述第二目标扇区的首个子区域内按照单位存储空间的位置顺序查找最后一个数据写入状态为不可写入状态的单位存储空间,并将查找到的最后一个不可写入状态的单位存储空间作为首个第二目标单位存储空间,将其他各个子区域中与首个第二目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第二目标单位存储空间;
从所述第二目标单位存储空间中依次读取最后一次写入的目标数据的各个字节数据,以获得最后一次写入的目标数据。
8.根据权利要求7所述的方法,其特征在于,所述从所述第二目标单位存储空间中依次读取最后一次写入的目标数据的各个字节数据,包括:
根据所述第二目标扇区的起始物理地址、状态保存区域的容量计算得到首个第二目标单位存储空间的物理地址;
根据首个第二目标单位存储空间的物理地址、目标数据的字节数量及每个子区域的容量计算得到其他的第二目标单位存储空间的物理地址;
根据各个第二目标单位存储空间的物理地址,依次从各个第二目标单位存储空间读取最后一次写入的目标数据的各个字节数据。
9.一种数据存储装置,其特征在于,应用于存储器,所述存储器包括多个存储扇区,每个存储扇区包括数据保存区域及用于保存该存储扇区的存储状态的状态保存区域,所述数据保存区域包括多个容量相同的子区域,所述子区域的数量与目标数据的字节数量相同,所述子区域包括多个用于存储一个单位字节数据的单位存储空间,所述装置包括:
查找模块,用于在接收到写入目标数据的指令时,根据各个存储扇区的状态保存区域中保存的存储状态选择一个未写满状态的存储扇区作为第一目标扇区;
所述查找模块,还用于在所述第一目标扇区的各个子区域内确定一个单位存储空间作为第一目标单位存储空间;
写入模块,用于将所述目标数据的各个字节数据依次写入所述第一目标单位存储空间。
10.根据权利要求9所述的装置,其特征在于,所述查找模块具体用于:
在所述第一目标扇区的首个子区域内按照单位存储空间的位置顺序依次获取各个单位存储空间的数据写入状态;
在查找到单位存储空间的数据写入状态为可写入状态时,将查找到的可写入状态的单位存储空间作为首个第一目标单位存储空间,并将其他各个子区域中与首个第一目标单位存储空间在首个子区域的位置相同的单位存储空间作为其他的第一目标单位存储空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910223411.XA CN109947369A (zh) | 2019-03-22 | 2019-03-22 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910223411.XA CN109947369A (zh) | 2019-03-22 | 2019-03-22 | 数据存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109947369A true CN109947369A (zh) | 2019-06-28 |
Family
ID=67011373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910223411.XA Pending CN109947369A (zh) | 2019-03-22 | 2019-03-22 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947369A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764702A (zh) * | 2019-10-16 | 2020-02-07 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
CN112817527A (zh) * | 2021-01-21 | 2021-05-18 | 深圳市显控科技股份有限公司 | 掉电数据存储方法、单片机及计算机可读存储介质 |
CN113704028A (zh) * | 2021-07-21 | 2021-11-26 | 奥比中光科技集团股份有限公司 | 一种存储器、数据存储方法以及门锁系统 |
CN114527934A (zh) * | 2022-01-12 | 2022-05-24 | 珠海泰芯半导体有限公司 | 闪存的控制方法、装置、存储介质和电子设备 |
CN117785073A (zh) * | 2024-02-28 | 2024-03-29 | 深圳市智岩科技有限公司 | 物联网设备及其时序数据存取方法和相应的装置与介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101184155A (zh) * | 2007-12-18 | 2008-05-21 | 中国电子科技集团公司第五十四研究所 | 安全接收芯片存储台名的方法 |
CN101551780A (zh) * | 2008-12-29 | 2009-10-07 | 深圳创维-Rgb电子有限公司 | 一种电视机及其数据存储方法、装置 |
CN102073592A (zh) * | 2009-11-19 | 2011-05-25 | 中兴通讯股份有限公司 | 一种闪存快速读写方法和装置 |
CN104794065A (zh) * | 2015-05-04 | 2015-07-22 | 常州工学院 | 一种多分组定长数据循环存取方法 |
CN104978148A (zh) * | 2014-04-09 | 2015-10-14 | 瑞萨电子(中国)有限公司 | 数据写入方法及装置、数据读取方法及装置 |
-
2019
- 2019-03-22 CN CN201910223411.XA patent/CN109947369A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101184155A (zh) * | 2007-12-18 | 2008-05-21 | 中国电子科技集团公司第五十四研究所 | 安全接收芯片存储台名的方法 |
CN101551780A (zh) * | 2008-12-29 | 2009-10-07 | 深圳创维-Rgb电子有限公司 | 一种电视机及其数据存储方法、装置 |
CN102073592A (zh) * | 2009-11-19 | 2011-05-25 | 中兴通讯股份有限公司 | 一种闪存快速读写方法和装置 |
CN104978148A (zh) * | 2014-04-09 | 2015-10-14 | 瑞萨电子(中国)有限公司 | 数据写入方法及装置、数据读取方法及装置 |
CN104794065A (zh) * | 2015-05-04 | 2015-07-22 | 常州工学院 | 一种多分组定长数据循环存取方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110764702A (zh) * | 2019-10-16 | 2020-02-07 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
CN110764702B (zh) * | 2019-10-16 | 2022-07-29 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
CN112817527A (zh) * | 2021-01-21 | 2021-05-18 | 深圳市显控科技股份有限公司 | 掉电数据存储方法、单片机及计算机可读存储介质 |
CN112817527B (zh) * | 2021-01-21 | 2024-06-04 | 深圳市显控科技股份有限公司 | 掉电数据存储方法、单片机及计算机可读存储介质 |
CN113704028A (zh) * | 2021-07-21 | 2021-11-26 | 奥比中光科技集团股份有限公司 | 一种存储器、数据存储方法以及门锁系统 |
CN114527934A (zh) * | 2022-01-12 | 2022-05-24 | 珠海泰芯半导体有限公司 | 闪存的控制方法、装置、存储介质和电子设备 |
CN117785073A (zh) * | 2024-02-28 | 2024-03-29 | 深圳市智岩科技有限公司 | 物联网设备及其时序数据存取方法和相应的装置与介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109947369A (zh) | 数据存储方法及装置 | |
US5987478A (en) | Virtual small block file manager for flash memory array | |
US6170066B1 (en) | Power-off recovery management for sector based flash media managers | |
CN101763309B (zh) | 非易失性存储装置、信息记录系统及信息记录方法 | |
TWI470429B (zh) | 記憶體裝置及記憶體存取方法 | |
US8050106B2 (en) | Fast writing non-volatile memory with main and auxiliary memory areas | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
US7925821B2 (en) | Nonvolatile semiconductor storage device and method of managing the same | |
JP2008059228A (ja) | ファイルシステム | |
TW201117218A (en) | Methods for measuring usable lifespan and replacing an in-system programming code of a memory device, and data storage system using the same | |
US5978941A (en) | Semiconductor memory device having deterioration determining function | |
CN101398765A (zh) | 用于更新固件的方法以及固件更新装置 | |
EP2977907B1 (en) | Data storage device, method for storing data, and onboard control device | |
US9786373B2 (en) | EEPROM backup method and device | |
CN108733517A (zh) | Ssd固件升级保护方法及装置 | |
CN114296634B (zh) | 存储器资源使用率检测及存储分配方法及装置 | |
CN107590081B (zh) | 数据管理方法以及具有快闪存储器的装置 | |
JP5660521B2 (ja) | 不揮発性半導体記憶装置およびメモリ管理方法 | |
JPH113287A (ja) | 記憶装置およびそれに用いられる記憶領域管理方法 | |
US9424176B2 (en) | Robust sector ID scheme for tracking dead sectors to automate search and copydown | |
US6223311B1 (en) | Semiconductor memory device having deterioration determining function | |
KR102072351B1 (ko) | 플래시 메모리를 관리하기 위한 방법 | |
CN108694129B (zh) | 确定Flash存储器的存储区中最后写入位置的方法 | |
CN115237819A (zh) | 一种数据存储、数据读取方法及装置 | |
CN114514511A (zh) | 帮助识别微控制器的非易失性存储器的空白扇区的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190628 |