FLASH数据读写方法及系统与流程

文档序号:11250565阅读:1138来源:国知局
FLASH数据读写方法及系统与流程
本发明涉及数据存储领域,特别涉及一种flash数据读写方法及系统。
背景技术
:针对嵌入式系统领域的相关设备,用户要求实时保存设备运行的数据,连续记录时间不少于5分钟,每分钟数据不少于60条记录,且有足够存储空间,数据掉电不丢失,存储器的使用寿命不小于20年。每条记录长度20byte(8bit/byte),前面14byte存放的是设备的状态及各种信息,后面6byte存放的是实时的年、月、日、时、分、秒。目前,保存数据的方法有:硬盘、电子盘、ram外加电池、flash闪存等。其中,硬盘、电子盘成本高、体积大;ram外加电池的方法由于使用了电池,电池寿命短,不能满足要求;flash闪存由于其存储空间大、价格低廉等优势,被广泛的应用到各类的嵌入式系统中。传统的flash内部分为多个存储单元页(page),存储单元页是可擦除的最小单位,字节或字是写入数据的最小单位。flash存储器的写操作和一般的存储器不同,flash的写操作必须先将存储单元擦除,然后再写入。由于flash擦写次数有限,频繁的对flash存储器进行擦写会影响其使用寿命,若不采取特殊处理,寿命不能满足要求。技术实现要素:本发明主要解决的技术问题是提供一种嵌入式系统(或单片机内置)内置flash数据存储、快速查找方法,该发明可以避免使用ram外加电池降低使用寿命,也可以避免使用硬盘、电子盘增加成本、增大体积,也不需要增加片外存储器、减小产品单板面积和降低成本。既降低flash的擦写次数,解决使用寿命问题,也解决上电能快速查找到上次关机时最后存储记录的位置。针对上述存在的问题,本发明提供了一种flash数据读写方法,其特征在于:在flash中分配n页为数据存储区,用于存放数据记录,其中一页作为索引区,其余n-1页作为记录区,所述方法包括:步骤s101:判断所述目标页nm是否写满,若未写满执行s102,若写满则转到如下步骤s1a~s1c;步骤s102:将所述待写入数据顺序写入所述记录区的目标页nm中;步骤s1a:擦除所述记录区的页nm+2的信息即将该页内容全部置为0xff的标识信息;步骤s1b:将所述数据记录区中所述待写入数据的页nm+1的页码号顺序写入所述索引区;步骤s1c:将所述待写入数据顺序写入所述记录区的页nm+1中;所述步骤s1b之前还包括如下步骤:步骤s201:判断所述索引区是否写满,若写满则执行步骤s202;若未写满执行步骤s1b;步骤s202:擦除所述索引区所有存储单元信息即将该页内容全部置为0xff的标识信息;步骤s203:页nm+1的页码号写入所述索引区第一个存储单元;所述记录区的n-1页为一个循环队列的存储区。进一步地,所述方法还包括如下步骤,在所述flash启动时,在所述步骤s101之前还执行如下步骤:步骤s301:从所述索引区的最后存储单元开始逆向查找,查找有无存储单元中的信息是否等于0xff的标识信息,若不是,则执行步骤s302;步骤s302:读取所述索引区存储的页码信息nm,nm即为最后存入的数据记录所在页码;步骤s303:从所述记录区第nm页中的最后存储单元开始逆向查找,查找存储单元中的信息是否等于0xff的标识信息,若不是,该字节所处的地址w是最后存入数据记录的存储位置;步骤s304:判断是写数据还是读数据,若是写数据,则转到步骤s305;若是读数据则转到读数据子程序p1,所述子程序p1为从m页w地址开始逆向往前读取记录,根据给定的参数计算读取数据的长度,进而读取数据相应flash的数据直到读取结束;步骤s305:将所述待写入数据写入所述的nm页的地址w之后的存储单元。进一步地,所述步骤s305之前还包括:步骤s401:判断地址w是否在页nm的最后位置,如是即表示页nm已存满数据,则转至步骤s1a,若不是,则执行步骤s305。进一步地,步骤s301之后进一步包括:步骤s501:若所述索引区及记录区为0xff的标识信息,则执行步骤s502,若不是,则转到步骤s302;步骤s502:所述索引区第一个单元写入所述待写入数据的目标页的页码信息;步骤s503:按步骤s102执行。进一步地,所述索引区为所述数据存储区的第一页或最后一页。另外一方面本发明还公开了一种flash数据读写系统,其特征在于:该系统包括:存储区划分模块,用于在flash中分配n页为数据存储区用于存放数据记录,且每页含有相同存储单元,其中用一页作为索引区,其余n-1页作为记录区,所述系统还包括:数据写入模块:含索引区写入模块和记录区写入模块,索引区写入模块将数据记录区待写入数据的目标页nm的页码号写入索引区存储单元;记录区写入模块:将数据顺序写入记录区的目标页nm中;第一判断模块:判断数据记录区的目标页nm是否写满,写满后到待写目标页由nm页变为nm+1页;第一擦除模块:擦除记录区的目标页nm后第二页nm+2的信息即将该页内容全部置为为特定标识信息。进一步地,该系统还包括:第二判断模块:判断所述索引区的是否写满,写满后则转至第二擦除模块;第二擦除模块:擦除所述索引区的信息,即将该页内容全部置为所述特定标识信息;进一步地,该系统还包括:记录查询模块:在系统掉电重启后查询掉电前记录所在的位置,先查询所述索引区记录所在的页码,然后到相应页码中找到记录的具体位置。本发明还公开了一种flash数据读写系统,其特征在于,所述系统包括:存储单元阵列、控制位线以及处理器,其中所述处理器执行如权利要求1-5中任意一项所述的权利要求的步骤完成数据读写。进一步地,所述索引区和所述记录区每页含有相同存储单元。按照本发明实现的flash数据读写方法和系统,其索引号不是固定在一个存储单元,而是在一个页内顺序存储,指引记录区已存入数据记录的页码号,存储满后擦除再存储;而数据记录存储在多个页内,数据记录每存储满一页后,即擦除存满数据的页的下下页的数据,即只是擦除一页数据,故连续记录时间长,大大降低了flash的擦写次数,提高了flash的寿命。既解决flash的擦写使用寿命问题,也解决了上电能快速查找到上次关机时最后存储记录的位置。附图说明:图1为本发明的flash数据读写方法主程序流程图;图2为本发明的flash数据读写方法掉电后重启的程序流程图一;图3为本发明的flash数据读写方法掉电后重启的程序流程图二;图4为本发明的嵌入式系统flash数据读写系统结构框图一;图5为本发明的嵌入式系统flash数据读写系统结构框图二;图6为本发明的嵌入式系统flash数据读写系统结构框图三。具体实施方式下面结合实施例,对本发明进一步说明,下述实施例是说明性的,不是限定性的,不能经下述实施例限定本发明的保护范围。以armcortex-m3核微控制器的内置flash为例,详细说明本发明的技术方案的实现。armcortex-m3核微控制器内置flash存储结构分配如表1。第0—10页为程序存储区,第11页至第126页即共116页为数据存放区,其中第11页为数据存放区的数据索引区,也可第126页设为数据索引区,其余115页为数据记录区;第127页为参数配置存放区。表1armcortex-m3核微控制器内置flash存储结构分配在下载程序代码时,将数据存放区第11~第126页的信息擦除,即存储器单元内容全部置为标识信息0xff。设备投入使用后,根据要求定时保存记录。记录按要求保存在数据存放区的目标页,先将该目标页的页码号写入索引区,然后将需要记录的数据按先后顺序写入该目标页中。如图1所示,为按照本发明实现的flash数据读写方法的主要程序流程示意图,具体为:步骤s101:判断所述目标页nm是否写满,若未写满执行s102,若写满则转到如下步骤s1a~s1c;步骤s102:产品投入首次上电后,记录区第一页即第12页的页码号写入索引区即数据存放区第11页的第一个存储单元,步骤s103:需要记录的数据按先后顺序写入记录区的第一页即第12页中;步骤s104:第一页即第12页写满时,采用如下步骤:步骤s1a:擦除记录区的第三页即第14页的信息即为0xff的标识信息;步骤s1b:将记录区第二页即第13页的页码号按顺序写入索引区第二个存储单元;步骤s1c:需要记录的数据顺序写入记录区的第二页即页13中;记录区的n-1页即第12与第126页之间为一个列队循环的存储区,页码号顺序存储在索引区。flash只能从偶数地址开始存储信息,所以索引区有1k字节的存储量,而记录区每一个循环的页码量是115,故循近9次索引区才能被写满。步骤s1b之前还包括:步骤s202:预先判断索引区存储单元是否写满,若写满则执行步骤202;若未写满执行步骤s1b;步骤s202:擦除索引区所有存储单元信息即将该页内容全部置为0xff的标识信息;步骤s203:页nm+1的页码号写入索引区第一个存储单元。本发明的技术方案在设备使用中掉电后重新启动时,首先查找上次关机时最后写入记录的存储位置。然后根据上述方法继续在上次存放记录的后面顺序存放记录或根据设定读取记录。如图示2所示,具体如下:步骤s301:从页11索引区的最后存储单元开始往回查找,查找某字节不为0xff示意如表2,其中0x**、nm-2、nm-1、nm(m取值范围在12~126之间)表示该数据不是0xff,步骤s302:读取索引区该存储单元中的存储的页码信息nm,nm即为最后存入的数据记录所在页码,即表示掉电前最后记录存放在第nm页中。步骤s303:从第nm页中的最后存储单元开始往回查找,找到w单元的数据内容不是0xff,即查找上次关机时最后存入的记录的存储位置。示意如表3。步骤s304:新采集数据信息按步骤s102写入所述的nm页的地址w之后的存储单元;或从地址w的存储单元开始,任意读取前面的n条记录,即执行p1操作。表1索引区第11页中的页码存放示意图(2k存储器)0x**0x**0x**0x**0x**0x**0x**0x**…………………………nm-2nm-1nm0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff……………………0xff0xff0xff0xff0xff0xff0xff0xff表2记录区第12页~第126页数据存放示意图步骤s304:存放新的数据时,在上次关机时最后存储位置即nm页的地址w之后顺序存储记录,待nm页存满则按步骤s103执行;读取数据时从最后存储记录的位置开始,可以任意读取前面n条记录(n<11673)。作为本发明的一个实施例,若索引区页11所有单元是0xff,则按如图3所示流程执行。如本发明按照用户要求,每秒存储一条记录,每条记录20byte,可以连续记录196分钟的数据,远大于连续记录5分钟的要求。经计算数据存储区使用寿命为37.34年(其中记录区使用寿命为37.34年,索引区使用寿命为332.5年),满足20年的使用要求。与上述方法对应的,本发明提供一种嵌入式系统flash数据读写系统,其结构框图如图4、图5、图6所示,图5、图6所示的读写系统分别是对图4所示系统的改进。具体为一种嵌入式系统(或单片机内置)flash数据读写系统,该系统包括n页相同的存储单元,其中用一页作为索引区,其余n-1页作为记录区,该系统还包括:数据写入模块:包括索引区写入单元和记录区写入单元,索引区写入单元用于将数据记录区待写入的数据的目标页nm的页码号写入索引区存储单元;记录区写入模块:将数据顺序写入记录区存储单元的目标页nm中;第一判断模块:用于判断数据记录区存储单元中的目标页nm是否写满,写满后将待写目标页由nm变为nm+1;第一擦除模块:擦除记录区存储单元中的目标页nm后第二页nm+2的信息的内容全部置为0xff的标识信息;如图5所示,按照本发明的另外一种实施方式,第二判断模块:用于判断索引区存储单元是否写满,写满后则转至第二擦除模块;第二擦除模块:擦除记索引区存储单元的信息即将该页内容全部置为特定标识信息;其中该特定标识信息可以为0xff。如图6所示,更进一步的,本发明中的系统还包括如下部分:在本系统中,在发生掉电的情况下,调用记录查询模块,用于在系统掉电重启后查询掉电前记录所在的位置,其中查找掉电前记录所在的位置的方式为,先查询索引区记录所在的页码,然后到对应页码中找到记录信息的具体位置,其中具体为:从第nm页中的最后存储单元开始逆向查找,查找存储单元中的信息是否等于特定标识信息,若不是,该字节所处的地址w是最后存入数据记录的存储位置。当然,在具体的flash的实施系统中,具体上述flash系统包括存储单元阵列、位线以及位线控制器等,并且在上述硬件实施的基础上,按照如上述的控制方式来对系统中的flash的数据的读写进行控制。本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1