本发明属于norflash闪存技术领域,具体涉及一种基于单片机的提升norflash使用周期的方法。
背景技术:
由于单片机本身内存容量小,在实际电路设计中都会外挂一个flash芯片,进行数据存储与读取。norflash是市面上主要的闪存之一,norflash支持芯片内执行,应用程序可以直接在闪存上运行。norflash读取速度也更快,所以norflash被广泛使用。但是单片机资源少功能单一,没有文件系统,需要直接将一些固定长度的数据写入固定的地址,对该地址进行反复写入、读取、擦除,而其他地址数据未合理利用。
另外,norflash一般只有10万次的擦写寿命,不适合频繁擦写的场景。对于需要使用norflash且有频繁读写的工程项目,产品长时间运行后数据容易损坏,产品可靠性低。
技术实现要素:
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种基于单片机的提升norflash使用周期的方法,以克服现有的单片机读写norflash时存在的空间利用率不高、可靠性不高的问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种norflash的使用方法,该方法包括将norflash划分为引导区与数据区,通过引导区记录当前数据区待写入数据的地址;将所述引导区划分为3块地址区同时记录地址,所述3块地址区的各个比特位的原始值均为1;数据区每次写入数据均写入长度为l字节的数据,每在数据区写入l字节的数据,在3块地址区均按从左到右的顺序将第一个值为1的比特位设为0。
进一步地,所述引导区起始地址为dy,所述数据区起始地址为ds,所述3块地址区记为地址区a、地址区b和地址区c。
进一步地,所述数据区的总长度为l×n字节,则所述3块地址区中的每一个地址区均需要n比特的空间,假设m字节为包含n比特的最小长度,则所述地址区a地址为dy,所述地址区b地址为dy+m,所述地址区c的地址为dy+2×m。
一种采用norflash的使用方法的基于单片机的提升norflash使用周期的方法,其特征在于,该方法包括如下步骤:
步骤一:读取所述引导区内的所述3块地址区;
步骤二:比对所述3块地址区的数据,若数据相同则转入步骤三;
步骤三:计算得出地址区数据从左到右比特位有n位数据为0,剩余比特位为1;当n大于0时,当前数据区地址为所述数据区的起始地址ds+(n-1)×l,如果要读取数据则转入步骤四,如果要写入新数据则转入步骤五;
步骤四:从地址ds+(n-1)×l,读取长度为l字节的数据,结束流程;
步骤五:判断n是否等于n,如n小于n则转入步骤七,否则转入步骤六;
步骤六:擦除所述引导区与所述数据区的数据,此时n为0,转入步骤七;
步骤七:分别在所述3块地址区的第n+1比特位写入0;
步骤八:在地址为ds+n×l,写入l字节数据,结束流程。
进一步地,所述步骤二还包括:若所述3块地址区的数据不同则选取数据相同的2块地址区数据为正确数据转入步骤三。
进一步地,所述步骤三还包括:当n等于0时,如果要写入新数据则转入步骤七。
(三)有益效果
本发明提供一种基于单片机的提升norflash使用周期的方法,将norflash的空间划分为引导区和数据区,每次在数据区写入l字节的数据,均要在引导区记录一个比特位,通过引导区的比特位可以就算出在数据区读取和写入数据的位置,从而可以将norflash的数据区几乎全部填满时再擦除。由于可以将norflash的数据区几乎全部填满,所以增加了norflash的空间利用率;由于norflash的数据区几乎全部填满时才进行一次擦除,很大程度上减少了擦除的次数,提升norflash使用寿命,可将norflash使用寿命提升n倍,提高了norflash的可靠性。另外,由于将引导区划分为3块地址区同时记录地址,可以对抗外界电磁干扰。
附图说明
图1为本发明的基于单片机的norflash芯片读写方法流程图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明的基于单片机的norflash芯片读写方法,将norflash划分为引导区与数据区,通过引导区记录当前数据区待写入数据的地址。假定引导区起始地址为dy,数据区起始地址为ds。
引导区划分为3块地址区(地址区a、地址区b、地址区c)同时记录地址,以应对外界电磁等干扰损坏地址区数据,地址区的各个比特位的原始值均为1。数据区每次写入数据均写入长度为l字节的数据,每当需要在数据区写入固定长度为l字节的数据时,则在地址区记录地址,每在数据区写入l字节的数据,在地址区记录1比特,记录方法为:在3块地址区(地址区a、地址区b、地址区c)均按从左到右的顺序将第一个值为1的比特位设为0。数据区的总长度为l×n字节,则3块地址区(地址区a、地址区b、地址区c)中的每一个地址区均需要n比特的空间。假设m字节为包含n比特的最小长度,则地址区a地址为dy,地址区b地址为dy+m,地址区c的地址为dy+2×m。
本发明技术方案的流程图如图1所示,本发明提出的flash读写方法包括下列步骤:
步骤一:读取引导区内3个地址区。
步骤二:比对地址区a、地址区b、地址区c的数据,若数据相同则继续步骤三。若数据不同则选取数据相同的2个地址区数据为正确数据转入步骤三。
步骤三:计算得出地址数据从左到右比特位有n位数据为0,剩余比特位为1。当n大于0时,当前数据区地址为ds+(n-1)×l,数据长度为l字节,如果要读取数据则转入步骤四,如要写入新数据则转入步骤五;当n等于0时,如要写入新数据则转入步骤五。
步骤四:从地址ds+(n-1)×l,读取长度为l字节的数据,结束流程。
步骤五:判断n是否等于n,如n小于n则转入步骤七,否则转入步骤六。
步骤六:擦除引导区与数据区数据,此时n为0,转入步骤七。
步骤七:分别在地址区a、地址区b、地址区c的第n+1比特位写入0。
步骤八:在地址为ds+n×l,写入l字节数据,结束流程。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
1.一种norflash的使用方法,其特征在于,将norflash划分为引导区与数据区,通过引导区记录当前数据区待写入数据的地址;将所述引导区划分为3块地址区同时记录地址,所述3块地址区的各个比特位的原始值均为1;数据区每次写入数据均写入长度为l字节的数据,每在数据区写入l字节的数据,在3块地址区均按从左到右的顺序将第一个值为1的比特位设为0。
2.如权利要求1所述的norflash的使用方法,其特征在于,所述引导区起始地址为dy,所述数据区起始地址为ds,所述3块地址区记为地址区a、地址区b和地址区c。
3.如权利要求2所述的norflash的使用方法,其特征在于,所述数据区的总长度为l×n字节,则所述3块地址区中的每一个地址区均需要n比特的空间,假设m字节为包含n比特的最小长度,则所述地址区a地址为dy,所述地址区b地址为dy+m,所述地址区c的地址为dy+2×m。
4.一种采用如权利要求1-3任一项所述的norflash的使用方法的基于单片机的提升norflash使用周期的方法,其特征在于,该方法包括如下步骤:
步骤一:读取所述引导区内的所述3块地址区;
步骤二:比对所述3块地址区的数据,若数据相同则转入步骤三;
步骤三:计算得出地址区数据从左到右比特位有n位数据为0,剩余比特位为1;当n大于0时,当前数据区地址为所述数据区的起始地址ds+(n-1)×l,如果要读取数据则转入步骤四,如果要写入新数据则转入步骤五;
步骤四:从地址ds+(n-1)×l,读取长度为l字节的数据,结束流程;
步骤五:判断n是否等于n,如n小于n则转入步骤七,否则转入步骤六;
步骤六:擦除所述引导区与所述数据区的数据,此时n为0,转入步骤七;
步骤七:分别在所述3块地址区的第n+1比特位写入0;
步骤八:在地址为ds+n×l,写入l字节数据,结束流程。
5.如权利要求4所述的基于单片机的提升norflash使用周期的方法,其特征在于,所述步骤二还包括:若所述3块地址区的数据不同则选取数据相同的2块地址区数据为正确数据转入步骤三。
6.如权利要求4所述的基于单片机的提升norflash使用周期的方法,其特征在于,所述步骤三还包括:当n等于0时,如果要写入新数据则转入步骤七。