CN115826869A - 嵌入式芯片Flash防掉电方法、设备及系统 - Google Patents
嵌入式芯片Flash防掉电方法、设备及系统 Download PDFInfo
- Publication number
- CN115826869A CN115826869A CN202211650125.XA CN202211650125A CN115826869A CN 115826869 A CN115826869 A CN 115826869A CN 202211650125 A CN202211650125 A CN 202211650125A CN 115826869 A CN115826869 A CN 115826869A
- Authority
- CN
- China
- Prior art keywords
- data
- backup area
- data block
- block
- segment
- 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
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明涉及一种嵌入式芯片Flash防掉电方法、设备及系统,属于数据存储技术领域,该方法、设备及系统,不再采用双数据区的备份方案,数据大小、数据块数量、备份区对应关系完全能灵活设置,可以将原数据和更新数据写入新数据块中,由于不同的数据块按照排列顺序依次被写入数据,因此可以逐数据块进行数据写入,仅仅对一个数据块内容进行更新,无需整体数据拷贝,解决了传统大数据量更新备份时需要占用同等量级RAM,导致资源浪费的问题。另外,设置了备份区,只有在备份区存在有效数据时,才会对数据块进行擦除,减少了擦除次数,解决现有防掉电技术中Flash寿命偏低的问题。
Description
技术领域
本发明涉及数据存储技术领域,具体涉及一种嵌入式芯片Flash防掉电方法、设备及系统。
背景技术
现有嵌入式芯片的存储介质基本都为Flash介质。Flash的特性为页擦除,即需要修改已写入数据的地址数据时必须要将该页数据都擦除后再将新数据和原数据一起反写回去。若Flash写操作过程中如果出现电压不稳有很大几率造成数据异常。因此对嵌入式芯片中加入防掉电保证原数据不丢失是十分有必要的。
相关技术中,通常通过以下方法进行防掉电保护:一个数据区一个备份区或双区交替使用。但是,这样的设置方式使得即使更新数据量不大也会占用成块的扇区,并且所使用的存储原数据的RAM空间也比较大,至使不能够在一些RAM资源紧张的芯片上实现大数量的更新和备份。
因此,相关技术中存在掉电保护中存在内存资源浪费的技术问题。
发明内容
有鉴于此,本发明的目的在于提供一种嵌入式芯片Flash防掉电方法、设备及系统,以克服目前嵌入式芯片Flash在掉电保护中存在内存资源浪费的技术问题。
为实现以上目的,本发明采用如下技术方案:
一方面,一种嵌入式芯片Flash防掉电方法,应用于目标芯片的数据写入过程,所述目标芯片包括至少两个数据块和一个备份区,其中所述数据块依次写入数据;所述方法包括:
基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块,记为原数据块;其中,所述原数据块中存储有原数据、地址标志和校验标志;
基于所述原数据块,根据所述目标写入数据计算数据更新的偏移量,得到起始偏移位置和对应的结束偏移位置,并将所述起始偏移位置存入所述地址标志的标志位位置,得到更新数据段和不发生变化的原数据段;其中,所述更新数据段中的数据内容为所述目标写入数据;
将所述原数据段、更新数据段和地址标志进行循环冗余校验,将最终的循环冗余检验值写入所述校验标志的校验标志位;
当所述起始偏移位置的偏移量和对应的结束偏移位置的偏移量均与所述目标芯片的写方式对齐时,将所述原数据段内的数据进行内存拷贝,复制到新数据块中的对应地址位置;以及,将所述更新数据段、更新后的地址标志、更新后的校验标志写入所述新数据块中的对应位置,得到写入完成的新数据块。
可选的,还包括:
当所述起始偏移位置的偏移量和对应的结束偏移位置的偏移量中任一与所述目标芯片的写方式不对齐时,通过与所述更新数据段相邻的原数据段对所述更新数据段进行补齐;
所述通过与所述更新数据段相邻的原数据段对所述更新数据段进行补齐,包括:
按照原数据段和更新数据段的排列顺序,依次确定排在所述更新数据段之前的原数据段的最大可对齐写入长度对应的数据,作为单一原数据段,将该原数据段内除所述单一原数据段外的数据段剩余的数据段作为剩余数据段;
将所述剩余数据段与所述更新数据段中的部分数据组成与所述目标芯片的写方式对齐的数据段,作为单一数据段;并将所述更新数据段中除去所述部分数据后剩余数据的最大可对齐写入长度对应的数据,作为单一数据段;
将所述更新数据段中除去所述部分数据和单一数据段对应的数据后,剩余的数据与所述更新数据段之后的原数据段的部分数据组成的最小可对齐写入长度对应的数据,作为单一数据段;
将所述单一原数据段内的数据进行内存拷贝,复制到新数据块中对应的地址位置;以及,依次将所述单一数据段内的数据、更新后的地址标志、更新后的校验标志写入到所述新数据块中。
可选的,在所述基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块之前,还包括:
创建所述注册表,所述注册表为二维数据注册表;所述二维数据注册表内注册有用户预先设置的Flash文件的相关宏变量控制参数;其中,所述预先设置的Flash文件的相关宏变量控制参数,包括:数据文件的起始位置、数据文件大小、存储数据的块数、数据备份区。
可选的,所述基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块,包括:
判断所述目标写入数据对应的数据块地址和所述目标写入数据的长度是否合法;
在合法时,判断所述备份区是否存在有效数据;
当所述备份区不存在有效数据时,确定所述目标写入数据需要写入的数据块地址,按照数据块的写入顺序判断数据块是否存在空余空间,当所述数据块存在空余空间时,将所述数据块作为所述新数据块,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
可选的,还包括:
当所述数据块不存在空余空间时,则将所述备份区作为所述新数据块,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
可选的,还包括:
当所述备份区存在有效数据时,判断所述备份区的初始地址与所述目标写入数据的起始地址是否相同;
若相同,则擦除所有所述数据块,将所述备份区的数据更新到所述目标芯片内的首块数据块,失效所述备份区的标志位;
若不同,则将所述备份区的数据恢复到与所述备份区的数据相对应的数据块。
可选的,所述将所述备份区的数据恢复到与所述备份区的数据相对应的数据块,包括:
读取所述备份区数据的地址标志位,判断所述数据块中是否存在空余空间;当所述数据块中存在空余空间时,将备份区数据采用内存拷贝的方式写到所述空余空间对应的数据块中;当所述数据块中不存在空余空间时,则擦除所有所述数据块,将所述备份区数据写到首块数据块中;
将所述备份区置为无效。
又一方面,一种嵌入式芯片Flash防掉电方法,应用于目标芯片的数据读取过程,所述目标芯片包括至少两个数据块和一个备份区,其中所述数据块依次写入数据;所述方法包括:
当所述备份区存在有效数据时,则确定所述备份区的首地址为待读取数据的首地址,根据预设偏移量读取预设长度的数据;
当所述备份区不存在有效数据时,则通过注册表查找最后的有效的数据块,在所述最后的有效的数据块中根据预设偏移量读取所述预设长度的数据。
又一方面,一种嵌入式芯片Flash防掉电设备,包括处理器和存储器,所述处理器与存储器相连:
其中,所述处理器,用于调用并执行所述存储器中存储的程序;
所述存储器,用于存储所述程序,所述程序至少用于执行上述任一项所述的嵌入式芯片Flash防掉电方法。
又一方面,一种嵌入式芯片Flash防掉电系统,包括:上述所述的嵌入式芯片Flash防掉电设备和嵌入式芯片;其中,所述嵌入式芯片包括:N个数据块和备份区;所述数据块和所述备份区为不同扇区;所述数据块大小为整个扇区分为N块,或,N个扇区合成一个数据块;其中,N为大于等于2的自然数。
本发明提供的技术方案至少具备如下有益效果:
通过计算自动得到当前写入数据的偏移量,得到起始偏移位置和结束偏移位置,从而区分得到原数据段和更新数据段,在进行循环冗余校验(C16)之后,可以根据对齐方式,当起始偏移位置的偏移量和对应的结束偏移位置的偏移量均与目标芯片的写方式对齐时,将原数据段内的数据进行内存拷贝,复制到新数据块中的对应地址位置;以及,将更新数据段、更新后的地址标志、更新后的校验标志写入新数据块中的对应位置,得到写入完成的新数据块。因此,采用本发明的技术方案,不再采用双数据区的备份方案,数据大小、数据块数量、备份区对应关系完全能灵活设置,可以将原数据和更新数据写入新数据块中,由于不同的数据块按照排列顺序依次被写入数据,因此可以逐数据块进行数据写入,仅仅对一个数据块内容进行更新,无需整体数据拷贝,解决了传统大数据量更新备份时需要占用同等量级RAM,导致资源浪费的问题。另外,设置了备份区,只有在备份区存在有效数据时,才会对数据块进行擦除,减少了擦除次数,解决现有防掉电技术中Flash寿命偏低的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的一种现有技术中的数据更新示意图;
图2为本发明一实施例提供的一种目标芯片的存储结构示意图;
图3为本发明又一实施例提供的一种目标芯片的存储结构示意图;
图4为本发明一实施例提供的一种嵌入式芯片Flash防掉电方法的流程示意图;
图5为本发明一实施例提供的一种数据更新的示意图;
图6为本发明又一实施例提供的一种数据更新的示意图;
图7为本发明又一实施例提供的一种数据更新的示意图;
图8为本发明一实施例提供的一种嵌入式芯片Flash防掉电方法的流程示意图;
图9为本发明一实施例提供的一种嵌入式芯片Flash防掉电设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
如背景技术记载,相关技术中,通常通过以下方法进行防掉电保护:一个数据区一个备份区或双区交替使用。但是,这样的设置方式使得即使更新数据量不大也会占用成块的扇区,并且所使用的存储原数据的RAM空间也比较大,至使不能够在一些RAM资源紧张的芯片上实现大数量的更新和备份。
因此,相关技术中存在掉电保护中存在内存资源浪费的技术问题。
图1为本发明一实施例提供的一种现有技术中的数据更新示意图,参阅图1,现行的数据更新方法为将原数据块的内容读到RAM大数组中,然后将需要变化的数据插入到需要修改的位置。之后将数据组合好的数据校验后写入新的数据块,这种方式会占用大量RAM。
现行数据更新方式的不足之处为进行大数据量更新时需要占用大量RAM空间,在一些RAM资源小的芯片下使用存在局限性,还需要对堆栈空间进行合理设置否则可能会出现堆栈溢出的问题。上述问题使该方法的通用性受到了限制。
基于此,本发明实施例提供一种嵌入式芯片Flash防掉电方法。
本发明提供的嵌入式芯片Flash防掉电方法可以应用于目标芯片的数据写入过程,其中,目标芯片为嵌入式Flash芯片,目标芯片包括至少两个数据块和一个备份区。
图2为本发明一实施例提供的一种目标芯片的存储结构示意图,图3为本发明又一实施例提供的一种目标芯片的存储结构示意图。
本发明的目标芯片,为嵌入式芯片,其存储区可以包括:N个数据块和备份区;数据块和备份区为不同扇区;数据块大小为整个扇区分为N块(参阅图2),或,N个扇区合成一个数据块(参阅图3);其中,N为大于等于2的自然数。
数据存储采用从首块数据块开始的连续存储形式,例如,在第一块数据区(即第一数据块)的存储空间使用完后,顺序在第二块数据区、第三块数据区等进行数据存储,直至最后块数据区内均存储有有效数据,则将最新更新的数据写入到备份区。当最新更新的数据写入到备份区后,擦除数据区从数据区的首块再次写入更新的数据,同时失效备份区数据,开始新一次的按顺序写数据块操作。
可以理解的是,采用本发明实施例提供的存储结构,开发人员可以根具实际存储参数的多少和类型合理分配Flash数据空间,不会造成Flash空间的浪费。并且是在备份区存在有用数据后才会擦除一次数据存储区,在实现数据掉电保护的同时,大大增加了对频繁存储数据时Flash擦写寿命的要求。数据存储均带有CRC校验能保证查找数据时准确找到合法的最新数据。
图4为本发明一实施例提供的一种嵌入式芯片Flash防掉电方法的流程示意图,参阅图4,本实施例可以包括以下步骤:
步骤S41、基于注册表查找与目标写入数据需要写入的数据块地址waddr相对应的数据块,记为原数据块;其中,原数据块中存储有原数据、地址标志和校验标志。
具体的,可以定义任意一个需要写入的数据为目标写入数据,在进行数据写入时,需要出入写地址,即要写入数据的地址。可以根据提前预设的注册表查找到与写入地址对应的数据块,记为原数据块。原数据块中存储有原数据(原数据内容)、地址标志(即,文件地址)、校验标志等。
在一些实施例中,在基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块之前,还包括:
创建注册表,注册表为二维数据注册表;二维数据注册表内注册有用户预先设置的Flash文件的相关宏变量控制参数;其中,预先设置的Flash文件的相关宏变量控制参数,包括:数据文件的起始位置、数据文件大小、存储数据的块数、数据备份区。
例如,可以预先对所操作的Flash空间设计好宏变量“数据文件的起始位置”、“数据文件大小”、“存储数据的块数”、“数据备份区”等参数。如有多种数据需要频繁的写操作可设置N条相关的宏变量。
因数据块有多块并且和备份区为不同扇区,不可能同时出错。确保了写Flash过程即使掉电也能找到之前的有效数据,实现防掉电功能。数据块的大小可以使将整个扇区分成N块,也可以是N个扇区合成一块使用,最大限度减少Flash资源浪费。同时只有满足备份区存在有效数据时才会擦除数据扇区,更具Flash可以位操作的特性能够大幅度提升存储的寿命。
创建一个二维数组,作为注册表使用。系统启动时将上一步定义好的宏变量参数注册到注册表内。
在一些实施例中,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块,包括:
判断目标写入数据对应的数据块地址和目标写入数据的长度是否合法;
在合法时,判断备份区是否存在有效数据;
当备份区不存在有效数据时,确定目标写入数据需要写入的数据块地址,按照数据块的写入顺序判断数据块是否存在空余空间,当数据块存在空余空间时,将数据块作为新数据块,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
例如,可以先对目标写入数据对应的数据块地址和目标写入数据的长度的合法性进行判断,在二者均合法时,在写入数据前对备份区内是否存在有效数据进行判断。
当备份区不存在有效数据时,则可以判断数据块中是否存在空余空间,当数据块中存在空余空间时,则可以将数据写入到该对应的数据块,即,将该数据块作为新数据块;基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
在一些实施例中,还包括:
当数据块不存在空余空间时,则将备份区作为新数据块,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
例如,当数据块中不存在空余空间时,可以将新数据写入到备份区,即,将备份区作为新数据块。
在一些实施例中,还包括:
当备份区存在有效数据时,判断备份区的初始地址(addr标志位)与目标写入数据的起始地址是否相同;
若相同,则擦除所有数据块,将备份区的数据更新到目标芯片内的首块数据块,失效备份区的标志位;
若不同,则将备份区的数据恢复到与备份区的数据相对应的数据块。
例如,当备份区存在有效数据时,可以需要判断备份区的初始地址,即标志中的addr与目标写入数据的addr起始地址是否相同,如果地址不同,则表示当前备份区内的数据为其它flash文件的数据,需要将备份区数据恢复到相应地址的文件;反之,备份区的内容为当前Flash文件(目标写入数据)的最新数据,擦除数据空间将数据更新到数据空间首块,之后失效备份区标志位。与传统备份区有数据即恢复相比,能够延长备份区的寿命。
在一些实施例中,将备份区的数据恢复到与备份区的数据相对应的数据块,包括:
读取备份区数据的地址标志位,判断数据块中是否存在空余空间;当数据块中存在空余空间时,将备份区数据采用内存拷贝的方式写到空余空间对应的数据块中;当数据块中不存在空余空间时,则擦除所有数据块,将备份区数据写到首块数据块中;
将备份区置为无效。
例如,判断备份区数据时检测到有数据需要恢复,可以先读出备份区数据的地址标志位,即addr标志位。然后确认是否有空的数据块(或,数据块中有空余空间),如有空数据块,则将备份区内的数据采用内存拷贝的方式写到空的数据块。若没有空的数据块,则擦空整个文件存储区将恢复数据写到首块。最后都需要将备份区表示置为无效。
步骤S42、基于原数据块,根据目标写入数据计算数据更新的偏移量,得到起始偏移位置和对应的结束偏移位置,并将起始偏移位置存入地址标志的标志位位置,得到更新数据段和不发生变化的原数据段;其中,更新数据段中的数据内容为目标写入数据。
步骤S43、将原数据段、更新数据段和地址标志进行循环冗余校验,将最终的循环冗余检验值写入校验标志的校验标志位。
其中,循环冗余校验可以为Crc16。
图5为本发明一实施例提供的一种数据更新的示意图,参阅图5,Offset为本次数据更新的起始偏移位置,End为结束偏移位置,Old1为Offset之前的不变数据,Old2为End结束后的不变数据。Addr为文件首地址数据恢复时使用到。crc16(Old1+Newdata+Old2+Addr,filesize-2)的NewCrc16值即为最新的校验数据。同理Old1+Newdata+Old2+Addr+NewCrc16为新数据块最终需要写入的内容。
步骤S44、当起始偏移位置的偏移量和对应的结束偏移位置的偏移量均与目标芯片的写方式对齐时,将原数据段内的数据进行内存拷贝,复制到新数据块中的对应地址位置;以及,将更新数据段、更新后的地址标志、更新后的校验标志写入新数据块中的对应位置,得到写入完成的新数据块。
可以理解的是,通过计算自动得到当前写入数据的偏移量,得到起始偏移位置和结束偏移位置,从而区分得到原数据段和更新数据段,在进行循环冗余校验(C16)之后,可以根据对齐方式,当所述起始偏移位置的偏移量和对应的结束偏移位置的偏移量均与所述目标芯片的写方式对齐时,将所述原数据段内的数据进行内存拷贝,复制到新数据块中的对应地址位置;以及,将所述更新数据段、更新后的地址标志、更新后的校验标志写入所述新数据块中的对应位置,得到写入完成的新数据块。因此,采用本发明的技术方案,不再采用双数据区的备份方案,数据大小、数据块数量、备份区对应关系完全能灵活设置,可以将原数据和更新数据写入新数据块中,由于不同的数据块按照排列顺序依次被写入数据,因此可以逐数据块进行数据写入,仅仅对一个数据块内容进行更新,无需整体数据拷贝,解决了传统大数据量更新备份时需要占用同等量级RAM,导致资源浪费的问题。另外,设置了备份区,只有在备份区存在有效数据时,才会对数据块进行擦除,减少了擦除次数,解决现有防掉电技术中Flash寿命偏低的问题。
Flash写入时最小写入单元通常有单字节、半字(2字节)、字(4字节)写三种方式。也就是每次写入的数据需要满足上面的对齐方式。假设目标写入数据,即当前Flash为字对齐,而当前的Offset偏移量不为字对齐则会造成写入失败,所以本发明中可以定义一个4字节的小数组用于完成对齐操作。
图6为本发明又一实施例提供的一种数据更新的示意图,参阅图6,当Offset和End的地址均与当前写方式对齐则不需要补齐操作,将对应的Old1、Old2采用内存拷贝直接复制到新数据块后,再将Newdata、Addr、NewCrc16写入到指定地址即可,即使原数据数据量很大整个过程中也无大数据量RAM参与运算。
在一些实施例中,还包括:
当起始偏移位置的偏移量和对应的结束偏移位置的偏移量中任一与目标芯片的写方式不对齐时,通过与更新数据段相邻的原数据段对更新数据段进行补齐;
通过与更新数据段相邻的原数据段对更新数据段进行补齐,包括:
按照原数据段和更新数据段的排列顺序,依次确定排在更新数据段之前的原数据段的最大可对齐写入长度对应的数据,作为单一原数据段,将该原数据段内除单一原数据段外的数据段剩余的数据段作为剩余数据段;
将剩余数据段与更新数据段中的部分数据组成与目标芯片的写方式对齐的数据段,作为单一数据段;并将更新数据段中除去部分数据后剩余数据的最大可对齐写入长度对应的数据,作为单一数据段;
将更新数据段中除去部分数据和单一数据段对应的数据后,剩余的数据与更新数据段之后的原数据段的部分数据组成的最小可对齐写入长度对应的数据,作为单一数据段;
将单一原数据段内的数据进行内存拷贝,复制到新数据块中对应的地址位置;以及,依次将单一数据段内的数据、更新后的地址标志、更新后的校验标志写入到新数据块中。
图7为本发明又一实施例提供的一种数据更新的示意图。
假设当前Flash为字写入,Offset=14,End=26均不为字对齐。通过crc16(Old1+Newdata+Old2+Addr,filesize-2),计算出NewCrc16。Flash的特性是位操作写不同地址并不会造成寿命减少,本发明不采用大RAM空间参与运算,所以需要采用多次内存拷贝和写flash方法实现。
写时只要把数据长度对4取余为0则表示长度可对齐,参阅图7,D1为Old1数据可最大可对齐写入长度的数据(为偏移量12之前的数据);D2为Old1-D1之后与Newdata部分数据组成的字长度补齐数据(4字节buf);D3为去除为D2补齐的长度数据后,所剩余数据的最大可对齐写入长度数据;D4为Newdata剩余数据与Old2部分数据组成的最小可对齐长度(4字节buf);D5为剩余数据,因参数设置时需要要求整个file文件对齐所以剩余数据必为对齐。
其中,memcopy为内存拷贝功能,把一块Flash的内容直接拷贝到另一块;writeflash为将RAM(buf)里的数据写入到指定Flash空间;因为需要多次写入操作,D2、D4所用的4字节buf为同一参数,Addr+NewCrc16会占用8字节RAM,整个更新过程中不会开辟大容量的RAM资源,例如资源紧张的51系列MCU也可实现大数据量的更新操作。
基于一个总的发明构思,本发明还提供一种嵌入式芯片Flash防掉电方法,应用于目标芯片的数据读取过程,目标芯片包括至少两个数据块和一个备份区,其中数据块依次写入数据。
图8为本发明一实施例提供的一种嵌入式芯片Flash防掉电方法的流程示意图,应用于目标芯片的数据读取过程,参阅图8,本发明实施例提供的方法,可以包括以下步骤:
步骤S81、当备份区存在有效数据时,则确定备份区的首地址为待读取数据的首地址,根据预设偏移量读取预设长度的数据。
步骤S82、当备份区不存在有效数据时,则通过注册表查找最后的有效的数据块,在最后的有效的数据块中根据预设偏移量读取预设长度的数据。
具体的,在进行数据读取时,先判断备份区是否有有效数据,如备份区存在有效数据则备份区的首地址为数据的首地址,从指定偏移量读出指定长度数据即可。若备份区无有效数据则通过二维数组注册表信息查找最后的有效的数据块,从该块指定的位置读出相应字节长度数据即可。所读数据范围不能超过所定义的文件大小。
可以理解的是,通过判断备份区是否存在有效数据,来根据设定的偏移量来读取预设长度的数据,实现了对写入数据的读取。
本发明中,对部分功能进行举例说明:
控制参数说明:
DataAddr:数据参数的首地址(要求为扇区对齐的首地址);
FileSize:每个数据块所占空间的大小;
FileBlock:有多少块FileSize数据(FileBlock*FileSize的值必须为扇区的倍数);
BackAddr:用于作为备份的扇区地址(大小必须为扇区的倍数,并且大于等于FileSize同时不能和数据存储空间重合)。
注册表:
代码定义了u16 RegInfo[x][7]长度的二维数组用于存储相关防掉电区域的参数。x控制注册表的条数,客户可以根据实际情况自行修改。
RegInfo[x][0]:DataAddr的高16bit数据;
RegInfo[x][1]:DataAddr的低16bit数据;
RegInfo[x][2]:FileSize大小;
RegInfo[x][3]:FileBlock个数;
RegInfo[x][4]:BackAddr的高16bit数据;
RegInfo[x][5]:BackAddr的低16bit数据;
注:FileSize*FileBlock应为扇区的整倍数。
应用举例(假设扇区512字节一扇区):
/*************step1:设计宏变量***************************/
#define ParamData_Size 0x40//文件大小
#define ParamData_Block 0x08//8块用于存储ParamData文件数据
#define GC_Addr_ParamData 0x000//数据文件的起始地址
#define GC_Addr_DataBackAddr 0x200//备份区地址
#define RunTime_Size 0x10//存储运行时间,1分钟写一次
#define RunTime_Block 0x80//128块存储空间
#define GC_Addr_RunTime 0x400//数据文件的起始地址
#define GC_Addr_RunTimeBackAddr 0xC00////备份区地址
/***********************step2:初始化注册表***************************/
Reg_RegInfo(RegInfo,GC_Addr_ParamData,ParamData_Size,ParamData_Block,GC_Add r_DataBackAddr);//注册ParamData文件信息
Reg_RegInfo(RegInfo+1,GC_Addr_RunTime,RunTime_Size,RunTime_Block,GC_Addr_RunTimeBackAddr);//注册RunTime文件信息/*********************step3:读写操作***************************/
Write_Data(u32 addr,u8*src,u16 wlen);
//该函数为防掉电方式写,技术方案的3、4、5部份在该函数实现
Read_Data(u32 addr,u8*databuf,u16 rlen);
//该函数为防掉电方式读,技术方案的6部分在该函数实现
/***************************End.**********************************/
假设该芯片的Flash为10万次寿命,Runtime参数每分钟都需要写一次,即使两个数据块交替使用也远远达不到要求。而使用该方案后RunTime参数不但实现了防掉电功能,还大幅度提升了使用寿命,其寿命可达到128*10万次=1280万次。
基于一个总的发明构思,本发明实施例还提供一种嵌入式芯片Flash防掉电设备。
图9为本发明一实施例提供的一种嵌入式芯片Flash防掉电设备的结构示意图,用于实现上述实施例记载的嵌入式芯片Flash防掉电方法,用于对数据写入,参阅图9,本实施例的设备包括处理器91和存储器92,处理器91与存储器92相连。其中,处理器91用于调用并执行存储器92中存储的程序;存储器92用于存储程序,程序至少用于执行以上实施例中的嵌入式芯片Flash防掉电方法,用于对数据写入。
本申请实施例提供的嵌入式芯片Flash防掉电设备的具体实施方案可以参考以上任意实施例的嵌入式芯片Flash防掉电方法的实施方式,此处不再赘述。
基于一个总的发明构思,本发明实施例还提供一种嵌入式芯片Flash防掉电系统。
本发明提供的嵌入式芯片Flash防掉电系统,包括:上述记载的嵌入式芯片Flash防掉电设备和嵌入式芯片;其中,嵌入式芯片包括:N个数据块和备份区;数据块和备份区为不同扇区;数据块大小为整个扇区分为N块,或,N个扇区合成一个数据块;其中,N为大于等于2的自然数。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种嵌入式芯片Flash防掉电方法,其特征在于,应用于目标芯片的数据写入过程,所述目标芯片包括至少两个数据块和一个备份区,其中所述数据块依次写入数据;所述方法包括:
基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块,记为原数据块;其中,所述原数据块中存储有原数据、地址标志和校验标志;
基于所述原数据块,根据所述目标写入数据计算数据更新的偏移量,得到起始偏移位置和对应的结束偏移位置,并将所述起始偏移位置存入所述地址标志的标志位位置,得到更新数据段和不发生变化的原数据段;其中,所述更新数据段中的数据内容为所述目标写入数据;
将所述原数据段、更新数据段和地址标志进行循环冗余校验,将最终的循环冗余检验值写入所述校验标志的校验标志位;
当所述起始偏移位置的偏移量和对应的结束偏移位置的偏移量均与所述目标芯片的写方式对齐时,将所述原数据段内的数据进行内存拷贝,复制到新数据块中的对应地址位置;以及,将所述更新数据段、更新后的地址标志、更新后的校验标志写入所述新数据块中的对应位置,得到写入完成的新数据块。
2.根据权利要求1所述的方法,其特征在于,还包括:
当所述起始偏移位置的偏移量和对应的结束偏移位置的偏移量中任一与所述目标芯片的写方式不对齐时,通过与所述更新数据段相邻的原数据段对所述更新数据段进行补齐;
所述通过与所述更新数据段相邻的原数据段对所述更新数据段进行补齐,包括:
按照原数据段和更新数据段的排列顺序,依次确定排在所述更新数据段之前的原数据段的最大可对齐写入长度对应的数据,作为单一原数据段,将该原数据段内除所述单一原数据段外的数据段剩余的数据段作为剩余数据段;
将所述剩余数据段与所述更新数据段中的部分数据组成与所述目标芯片的写方式对齐的数据段,作为单一数据段;并将所述更新数据段中除去所述部分数据后剩余数据的最大可对齐写入长度对应的数据,作为单一数据段;
将所述更新数据段中除去所述部分数据和单一数据段对应的数据后,剩余的数据与所述更新数据段之后的原数据段的部分数据组成的最小可对齐写入长度对应的数据,作为单一数据段;
将所述单一原数据段内的数据进行内存拷贝,复制到新数据块中对应的地址位置;以及,依次将所述单一数据段内的数据、更新后的地址标志、更新后的校验标志写入到所述新数据块中。
3.根据权利要求1所述的方法,其特征在于,在所述基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块之前,还包括:
创建所述注册表,所述注册表为二维数据注册表;所述二维数据注册表内注册有用户预先设置的Flash文件的相关宏变量控制参数;其中,所述预先设置的Flash文件的相关宏变量控制参数,包括:数据文件的起始位置、数据文件大小、存储数据的块数、数据备份区。
4.根据权利要求1所述的方法,其特征在于,所述基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块,包括:
判断所述目标写入数据对应的数据块地址和所述目标写入数据的长度是否合法;
在所述目标写入数据对应的数据块地址和所述目标写入数据的长度均合法时,判断所述备份区是否存在有效数据;
当所述备份区不存在有效数据时,确定所述目标写入数据需要写入的数据块地址,按照数据块的写入顺序判断数据块是否存在空余空间,当所述数据块存在空余空间时,将所述数据块作为所述新数据块,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
5.根据权利要求4所述的方法,其特征在于,还包括:
当所述数据块不存在空余空间时,则将所述备份区作为所述新数据块,基于注册表查找与目标写入数据需要写入的数据块地址相对应的数据块。
6.根据权利要求4所述的方法,其特征在于,还包括:
当所述备份区存在有效数据时,判断所述备份区的初始地址与所述目标写入数据的起始地址是否相同;
若相同,则擦除所有所述数据块,将所述备份区的数据更新到所述目标芯片内的首块数据块,失效所述备份区的标志位;
若不同,则将所述备份区的数据恢复到与所述备份区的数据相对应的数据块。
7.根据权利要求6所述方法,其特征在于,所述将所述备份区的数据恢复到与所述备份区的数据相对应的数据块,包括:
读取所述备份区数据的地址标志位,判断所述数据块中是否存在空余空间;当所述数据块中存在空余空间时,将备份区数据采用内存拷贝的方式写到所述空余空间对应的数据块中;当所述数据块中不存在空余空间时,则擦除所有所述数据块,将所述备份区数据写到首块数据块中;
将所述备份区置为无效。
8.一种嵌入式芯片Flash防掉电方法,其特征在于,应用于目标芯片的数据读取过程,所述目标芯片包括至少两个数据块和一个备份区,其中所述数据块依次写入数据;所述方法包括:
当所述备份区存在有效数据时,则确定所述备份区的首地址为待读取数据的首地址,根据预设偏移量读取预设长度的数据;
当所述备份区不存在有效数据时,则通过注册表查找最后的有效的数据块,在所述最后的有效的数据块中根据预设偏移量读取所述预设长度的数据。
9.一种嵌入式芯片Flash防掉电设备,其特征在于,包括处理器和存储器,所述处理器与存储器相连:
其中,所述处理器,用于调用并执行所述存储器中存储的程序;
所述存储器,用于存储所述程序,所述程序至少用于执行权利要求1-8任一项所述的嵌入式芯片Flash防掉电方法。
10.一种嵌入式芯片Flash防掉电系统,其特征在于,包括:权利要求9所述的嵌入式芯片Flash防掉电设备和嵌入式芯片;其中,所述嵌入式芯片包括:N个数据块和备份区;所述数据块和所述备份区为不同扇区;所述数据块大小为整个扇区分为N块,或,N个扇区合成一个数据块;其中,N为大于等于2的自然数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211650125.XA CN115826869A (zh) | 2022-12-21 | 2022-12-21 | 嵌入式芯片Flash防掉电方法、设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211650125.XA CN115826869A (zh) | 2022-12-21 | 2022-12-21 | 嵌入式芯片Flash防掉电方法、设备及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115826869A true CN115826869A (zh) | 2023-03-21 |
Family
ID=85517450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211650125.XA Pending CN115826869A (zh) | 2022-12-21 | 2022-12-21 | 嵌入式芯片Flash防掉电方法、设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115826869A (zh) |
-
2022
- 2022-12-21 CN CN202211650125.XA patent/CN115826869A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109344088B (zh) | 固态驱动器中的原子写入命令支持 | |
CN101326492B (zh) | 用于更新包括压缩版本的内容的方法和系统 | |
US8200886B2 (en) | Efficient system and method for updating a memory device | |
CN1273891C (zh) | 最小单位地更新多个文件的方法 | |
EP1580664B1 (en) | Computing device with relatively limited storage space and operating / file system thereof | |
KR20070003578A (ko) | 데이터 무결성의 검증을 지연시킨 파일 시스템 | |
KR101450396B1 (ko) | 비휘발성 메모리를 갖는 시스템에 대한 비정상 셧다운의 핸들링 | |
KR20070003579A (ko) | 플래시형 매체에 트랜잭션 레코드를 저장하는 파일 시스템 | |
KR101930092B1 (ko) | 데이터 이용가능성의 마운트타임 조정 | |
US20070055969A1 (en) | System and method for updating firmware | |
KR20070003577A (ko) | 역 계층적 구조를 갖고 있는 파일 시스템 | |
KR20070003576A (ko) | 파일 시스템 무결성에 대한 최적화된 시동 검증 | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
US20110238629A1 (en) | Uncorrectable error handling schemes for non-volatile memories | |
US7970804B2 (en) | Journaling FAT file system and accessing method thereof | |
CN109086078B (zh) | 安卓系统升级方法、装置、服务器及移动终端 | |
WO2008026466A1 (fr) | Système de fichiers | |
WO2004114139A1 (fr) | Procede de protection de donnees pour support de memoire flash | |
US7698699B2 (en) | Computing device with relatively limited storage space and operating/file system thereof | |
US20090172252A1 (en) | Memory device and method for performing a write-abort-safe firmware update | |
CN1924821A (zh) | 固件更新系统与方法 | |
US20050210076A1 (en) | Computing device with relatively limited storage space and operating/file system thereof | |
CN111124294B (zh) | 一种扇区映射信息的管理方法及装置、存储介质和设备 | |
CN115826869A (zh) | 嵌入式芯片Flash防掉电方法、设备及系统 | |
CN114327292B (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 |