CN102063380B - 一种向非易失性存储器写入数据的方法及装置 - Google Patents
一种向非易失性存储器写入数据的方法及装置 Download PDFInfo
- Publication number
- CN102063380B CN102063380B CN2010106196506A CN201010619650A CN102063380B CN 102063380 B CN102063380 B CN 102063380B CN 2010106196506 A CN2010106196506 A CN 2010106196506A CN 201010619650 A CN201010619650 A CN 201010619650A CN 102063380 B CN102063380 B CN 102063380B
- Authority
- CN
- China
- Prior art keywords
- data
- backup
- write
- address
- buffers
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种向非易失性存储器写入数据的方法及装置,该方法包括:操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在存储单元的所有数据备份到RAM中的数据缓冲区;将数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在备份缓冲区中记录所备份的原数据在数据区的地址信息;根据数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;确定操作指令执行完毕时,将所述数据缓冲区中数据写回到数据区,并清空备份缓冲区。本发明实现数据快速写入非易失性存储器,减少非易失性存储器写入次数,提高程序运行速度,延长非易失性存储器使用寿命。
Description
技术领域
本发明涉及智能卡技术领域,尤其涉及一种向非易失性存储器写入数据的方法及装置。
背景技术
非易失性存储器是一种掉电后数据不丢失的存储器。智能卡包括非易失性存储器,例如EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器),利用非易失性存储器实现数据存储,非易失性存储器通常被划分为多个称为页的存储单元。
在对非易失性存储器进行写操作时,需要先擦除一页数据,再将新数据写入到该页,这就造成了写入一字节数据与写入一页数据使用的时间相同。执行某个操作指令时,该操作指令中可能包括多次不连续对同一页内的不同位置处数据的写操作,执行该操作指令就会反复的擦除同一页,这样会大大降低程序运行速度和非易失性存储器的使用寿命。
智能卡执行操作指令时,要保证写入智能卡数据的原子性,即该操作指令中涉及的写操作要写入的数据要么完整的被写入,要么完全不被写入。非易失性存储器的存储空间包括数据区和备份区,向非易失性存储器中的数据区写入新数据时,为了保证写入数据的原子性,需要采用备份方式将数据写入到存储器。如图1所示,现有向非易失性存储器写入数据的方法主要包括以下几步:
步骤S1,确定要写入的数据的地址所在页,将这些页中旧数据备份到非易失性存储器的备份区;
具体地,每次写操作都指示要写入哪些数据,及这些数据对应的地址范围,因此可以确定备份哪些数据,在备份区的备份头中记录所备份的每部分数据的起始地址和长度;
步骤S2,将要写入的数据写入到非易失性存储器中的数据区;
由于写操作指示了要写入数据的地址(通常是地址范围),则将数据写入数据区对应的地址即可。
步骤S3,确定所有数据被成功写入到非易性存储器中的数据区时,标记备份区数据无效。
这样,一旦备份区数据标记无效,说明数据被完整写入,如果发生异常而没有成功写入所有数据,则备份区数据标记有效,在掉电后再次上电时,根据备份区的备份头中记录的起始地址和长度,会将备份区内的数据重新写回到对应的数据区,从而保证了写入数据的原子性。
现有的向非易失性存储器写入数据的方法存在以下缺陷:
1)如果一个操作指令中包括多次对同一页内的不同位置处数据的写操作,则会反复的擦除数据区同一页且备份区也会被多次写入,这样的操作就会降低非易失性存储器的使用寿命;
2)上述三个步骤中都会涉及非易失性存储器如EEPROM的数据写入,一次写操作的总计写入非易失性存储器的次数为3次,耗时比较长。以英飞凌SLE70系列的EEPROM存储器为例,向EEPROM写入一次数据耗时2.8ms,这样整个写入新数据的时间为2.8×3ms=8.4ms。如果一个操作指令中包括分多次写入n个数据,则执行一个操作指令的耗时最少会是n×8.4ms,降低了非易失性存储器写入速度。
发明内容
本发明提供一种向非易失性存储器写入数据的方法和装置,实现数据快速写入非易失性存储器,减少非易失性存储器写入次数,提高程序运行速度,延长非易失性存储器使用寿命。
本发明提供一种向非易失性存储器写入数据的方法,包括:
操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在存储单元的所有数据备份到RAM中的数据缓冲区;
将所述数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在所述备份缓冲区中记录所备份的原数据在所述数据区的地址信息;
根据所述数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;
确定操作指令执行完毕时,将所述数据缓冲区中的数据写回到所述数据区,并清空所述备份缓冲区;
其中,在向数据缓冲区备份数据过程,确定数据缓冲区写满且还有数据要备份时,所述方法转去执行:
确定当前数据区中已备份到数据缓冲区的数据所在的存储单元,将确定的单元中要写入数据的地址处的原数据备份到备份缓冲区,并在所述备份缓冲区中记录所备份的原数据在数据区的地址信息;
根据所述确定的存储单元中要写入数据的地址,在所述数据缓冲区对应位置写入要写入的数据;
将当前备份缓冲区中的所有原数据及地址信息写入到备份区;
将当前数据缓冲区中数据写回到数据区中所述确定的存储单元;
重复执行上述步骤至向数据区写完所有要写入数据,并清空备份缓冲区。
本发明还提供一种向非易失性存储器写入数据的装置,包括:
第一备份单元,用于操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在存储单元的所有数据备份到RAM中的数据缓冲区;
第二备份单元,用于将所述数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在所述备份缓冲区中记录所备份的原数据在所述数据区的地址信息;
第一写入单元,用于根据所述数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;
第二写入单元,用于确定操作指令执行完毕时,将所述数据缓冲区中的数据写回到所述数据区,并清空所述备份缓冲区;
第一触发单元,用于在第一备份单元向数据缓冲区备份数据过程,确定数据缓冲区写满且还有数据要备份时,触发如下几个单元的执行:
第一备份子单元,用于确定当前数据区中已备份到数据缓冲区的数据所在的存储单元,将确定的存储单元中要写入数据的地址处的原数据备份到备份缓冲区,并在所述备份缓冲区中记录所备份的原数据在数据区的地址信息;
第一写入子单元,用于根据所述确定的存储单元中要写入的数据的地址,在所述数据缓冲区对应位置写入要写入的数据;
第二备份子单元,用于将当前备份缓冲区中的所有原数据及地址信息写入到备份区;
第二写入子单元,用于将当前数据缓冲区中数据写回到数据区中所述确定的存储单元;
第一结束确定单元,用于请求所述第一子备份单元、第一写入子单元、第二备份子单元和第二写入子单元重复执行至向数据区写完所有要写入数据,并清空所述备份缓冲区。
利用本发明提供的向非易失性存储器写入数据的方法和装置,具有以下有益效果:通过在RAM中开辟两块缓冲区即数据缓冲区和备份缓冲区,实现了数据快速写入非易失性存储器,减少了非易失性存储器的写入次数,提高程序运行速度,延长非易失性存储器的使用寿命。
附图说明
图1为现有技术中向非易失性存储器写入数据的流程图;
图2为本发明提供的向非易失性存储器写入数据的流程图;
图3为应用场景1时向非易失性存储器写入数据的流程图;
图4a~图4b为应用场景2时向非易失性存储器写入数据的流程图;
图5a~图5d为应用场景3时向非易失性存储器写入数据的流程图;
图6为本发明提供向非易失性存储器写入数据的装置结构图。
具体实施方式
下面结合附图和实施例对本发明提供的向非易失性存储器写入数据的方法及装置进行更详细地说明。
向智能卡的非易失性存储器写入数据时,既要保证写入操作的原子性,又保证写入速度及对非易失性存储器的写入次数,为此,本发明提供了一种向非易失性存储器写入数据的方法,在RAM中开辟两块缓冲区,按功能划分为数据缓冲区和备份缓冲区,向非易失性存储器写入数据时,先将数据写入到RAM中的数据缓冲区,再有条件的将数据缓冲区的数据写入到非易失性存储器中,如图2,包括以下步骤:
步骤S201,操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在存储单元的所有数据备份到RAM中的数据缓冲区;
非易失性存储器中具有数据区和备份区,操作指令执行过程中,实现的是对数据区的写操作,需要将数据区中的整个存储单元数据备份到RAM中的数据缓冲区。
步骤S202,将所述数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在所述备份缓冲区中记录所备份的原数据在数据区的地址信息;
操作指令执行过程中,向非易失性存储器写入数据时,操作指令会给出如下几个信息:所要写入的数据;各数据对应要写入的地址,如果这些地址是一页中部分地址,写操作实现的是对该页部分数据的修改,如果这些地址是整页地址,则写操作实现的是对整页数据的修改。对于连续的一段数据,给出要写入的地址的形式通常为起始地址和长度。一次写操作可能涉及一页数据的修改,也可能涉及多页数据的修改,操作指令执行过程中,可能包括一次写操作,也可能包含多次写操作。
由于在备份缓冲区备份了原数据在数据区的地址信息如起始地址和长度,因此出现异常时可以将数据再写回到数据区,实现备份目的。
步骤S203,根据所述数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;
由于数据区的数据以整个存储单元形式被备份到数据缓冲区,因此可以在数据缓冲区中实现要写入的数据的地址(数据区中的地址)处的数据写入,从而在数据缓冲区中完成数据写入。
步骤S204,确定操作指令执行完毕时,将所述数据缓冲区中的数据写回到所述数据区,并清空所述备份缓冲区。
本发明在执行完操作指令中所有写操作后,将数据缓冲区中数据写回到数据区,并清空备份缓冲区。可见,本发明提供的上述方法,由于将数据整个存储单元在数据缓冲区中进行备份,因此如果在备份过程中出现故障或在RAM中修改数据时出现故障,都可以保证数据区的原子性,至于在RAM完成写操作后整个存储单元数据写回到数据区,即对非易失性存储器的整个存储单元更新过程,现有技术中具有保证写操作原子性的保护机制,因此在整个操作指令执行过程中,保证了写操作的原子性,实现了掉电保护。
现有的对非易失行存储器的整个存储单元更新过程的原子性的保护机制解决如下,整个存储单元更新时,不是将非易失性存储器的原整个存储单元数据擦除后再写入的过程,而是通过在非易失性存储器的数据区中的冗余存储单元来保证整页更新的原子性的,具体地,将所述数据缓冲区中的数据写回到数据区,具体包括:先将非易失性存储器中数据区的冗余存储单元擦除,再将数据缓冲区中的数据以存储单元为单位写入到完成擦除的冗余存储单元内;再将要写入数据所在的存储单元的地址映射到当前的冗余存储单元地址,原来要写入的存储单元就变成了新的冗余存储单元。
优选地,上述存储单元为页或扇区。以页为例,上述保护机制可以用硬件实现,也可以有软件实现,例如英飞凌的SLE70系列的芯片就是由硬件实现的,这款芯片的实现流程是增加冗余页存储单元来实现的。它将非易失性存储器分成若干块,再将每块分成33页,但实际给用户使用的是32页,多出来的一页就是用来保证整页更新的原子性的。在整页更新时,先将冗余的那1页擦除,再将RAM中的一页数据写入到刚擦除的冗余页内,这时再将要写入那一页的地址映射到当前的冗余页,原来要写入的那一页就变成了新的冗余页。
本发明在操作执行过程中,大部分写操作均在RAM中完成,在RAM中修改数据的耗时是ns级的,可以忽略不计,因此可以实现数据快速地写入非易失性存储器;整个写操作指令执行过程中,在数据缓冲区和备份缓冲区都够用的情况下,只涉及到一次向非易失性存储器写入数据,提供了速度的同时显著降低了对非易性存储的写入次数,提高了非易失性存储器的寿命。
优选地,本发明实施例中的非易失性存储器为智能卡中的EEPROM。本实施例中上述存储单元为页。
优选地,在操作指令未执行完毕,在执行写操作的过程中,如果数据缓冲区够用而备份缓冲区不够用,即步骤S202向备份缓冲区中备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,进行如下处理:将当前备份缓冲区中所有原数据及地址信息,写入到非易失性存储器的备份区;将剩余的原数据备份到RAM中的备份缓冲区,并在备份缓冲区中记录此次所备份的原数据在数据区的地址信息。即在数据缓冲区够用而备份缓冲区不够用时,再借助使用非易失性存储器中的备份区来实现备份目的。对于此情况,在操作指令执行完毕时,在将数据缓冲区中数据写回到数据区之前还包括:设置备份区无效,以指示备份区的原数据不会写回到数据区。这样做的目的是,由于写操作中备份的原数据一部分在RAM里,一部分在非易失性存储器中,如果写操作过程中发生掉电时,RAM里备份的数据丢失,而备份区如果有效,不能实现所有数据的还原,因而不能保证写操作的原子性,如果先将备份区设为无效,则避免了此情况的发生。
优选地,在操作指令未执行完毕,在执行写操作的过程中,如果数据缓冲区不够用而备份缓冲区够用时,即步骤S201中在向数据缓冲区备份数据过程,确定数据缓冲区写满且还有数据要备份时,转去执行步骤:
1)确定当前数据区中已备份到数据缓冲区的数据所在的存储单元,将确定的存储单元中要写入数据的地址处的原数据备份到备份缓冲区,并在备份缓冲区中记录所备份的原数据在数据区的地址信息;
即先备份一部分数据,如将数据区中的数据页1中数据备份到数据缓冲区中,则将数据页1中需修改的原数据备份到备份缓冲区。
2)根据数据区中所述确定的存储单元中要写入的数据的地址,在数据缓冲区对应位置写入要写入的数据,即先在RAM中先完成一部分数据的写入;
3)将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;
向数据区写入一部分数据前,就向备份区备份原数据的目的是,在写剩下数据过程中掉电时,能够将备份区内的原数据写回数据区,因此保证了写操作的原性。
4)将当前数据缓冲区中数据写回到数据区中所述确定的存储单元,实现一部分数据写入到数据区;
5)对剩余的要写入数据的地址所在存储单元的所有数据,重复执行上述步骤至向数据区写完所有要写入数据,并清空备份缓冲区,从而实现所有数据的写入。
在向数据区写完所有要写入数据之后,还包括:
设置备份区无效,以指示备份区的原数据不会写回到数据区。
在此应用场景下,虽然涉及到3次向非易失性存储器写入数据,但由于向数据区写入数据之前的数据修改是在RAM内完成的,则对于连续对一存储单元数据中不同位置修改的情况,确定RAM的数据缓冲区中已备份了要写入数据所在存储单元数据时,直接在RAM中进行数据修改。相比现有技术减少了向非易失性存储器写入的次数,因此可以达到提高写入速度和延长非易失性存储器使用寿命的目的。
优选地,在操作指令未执行完毕,在执行写操作的过程中,如果数据缓冲区不够用且备份缓冲区也不够用时,相对于如果数据缓冲区不够用而备份缓冲区也够用的情况,只是在1)中就借助使用备份区,即在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,将当前备份缓冲区中所有原数据及地址信息,写入到非易失性存储器的备份区;将剩余的原数据备份到备份缓冲区,并在备份缓冲区中记录此次所备份的原数据在数据区的地址信息;重复执行上述步骤至将需所述确定的存储单元中,所有要写入数据的地址处的原数据备份到备份区。但是,此种情况很少发生,同理,由于向数据区写入数据之前的数据修改是在RAM内完成,也能够实现本发明的技术效果。
优选地,对于要分多次向数据区写入数据的情况,将当前数据缓冲区中数据第一次写回到数据区中所述确定的存储单元中时,还包括:设置标识数据区写入数据的数据区写入标记。对于涉及到向备份区写入原数据的情况,将当前备份缓冲区中原数据及地址信息第一次写入到备份区时,还包括:设置标识备份区写入原数据的备份区写入标记。这样操作指令执行过程中,可以根据上述标记确定在操作指令执行完毕前,是否向数据区及备份区写入了数据。
优选地,操作指令执行过程中,确定向数据区写入数据时,还包括:设置备份缓冲区的标识所映射的地址为备份区的起始地址。因此,对于涉及到向备份区写入原数据的情况,可以根据备份缓冲区的标识所映射的地址,确定从备份区那个位置开始写原数据,从而将备份缓冲区中所有原数据及地址信息写入到备份区。在下次执行将数据区中的原数据向备份缓冲区备份时,修改所述备份缓冲区的标识所映射的地址为,备份区中空闲区的起始地址,优选地,为当前已写有数据的最后页的下一页起始地址,以供下次向备份区写入原数据使用。另外,对于备份缓冲区被写满的情况,还可以在备份缓冲区写满时设置备份缓冲区的标识所映射的地址无效,这样智能卡操作系统可以知道备份缓冲区已被写满。
优选地,本发明实施例中每次向数据缓冲区备份数据时,还包括:建立存储各存储单元数据的数据缓冲区地址与各存储单元在数据区中地址的对应关系;在将数据缓冲区中数据写回到数据区之后,设置所述对应关系无效。如果建立了上述对应关系,可以使智能卡操作系统在RAM中定位所要进行写操作的各存储单元,在RAM中完成数据修改。
下面以存储单元为页为例,结合附图给出本发明提供的向非易失性存储器写入数据的方法的三种主要应用场景。
应用场景1:写操作指令执行过程中,数据缓冲区和备份缓冲区都够用,即写操作指令执行完毕时,本方案中也称为事物提交时,所有新写入的数据都在数据缓冲区中,所有的备份数据都在备份缓冲区中。
如图3所示,本实施例中向非易失性存储器写入数据的方法包括以下流程:
S31,操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在页的所有数据备份到RAM中的数据缓冲区,并建立存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系,设置备份缓冲区的标识所映射的地址为备份区的起始地址。
建立存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系,具体可以是设置数据缓冲区的页起始地址和数据区的页起始地址对应关系。
本场景中,称未作修改的数据为旧值,完成修改后的数据称为新值。
S32,将数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在备份缓冲区中记录所备份的原数据在数据区的地址信息,如在备份头中记录这些地址信息。
S33,根据数据区中要写入的数据的地址,在数据缓冲区对应位置写入所述要写入的数据,写入后得到新值。
写操作指令执行过程中,可能包括多次操作,在未执行完写操作指令过程每次执行写操作,即确定向非易失性存储器中写入数据时,重复执行上述步骤S31~32;
确定写操作指令执行完毕时,确定事务提交,执行以下步骤:
S34,将备份缓冲区清空;
S35,将所述数据缓冲区中数据写回到数据区,并设置上述建立的存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系无效。
其中步骤S34和步骤S35的执行顺序无先后限制。
在应用场景1中,既保证了写操作的原子性,而且相比现有方案只有步骤S35是一次对非易失性存储器的写操作,耗时2.8ms,其余3个步骤均是对RAM的操作,耗时是ns级的可以忽略,因此实现数据快速地写入存储器。优选地,每次确定向非易失性存储器写入数据时,首先确定数据区要写入数据的地址所在页是否已备份到RAM的数据缓冲区中,如果是,则直接执行步骤S32,这样如果是在同一页内的多个数据写入,只需重复步骤S32和步骤S33,最后事务提交时执行步骤S34、S35,整个写操作的过程还是只有步骤S34有一次写非易失性存储器的操作,耗时2.8ms。
应用场景2:写操作指令执行过程中,发现数据缓冲区够用而备份缓冲区不够用,即写操作指令执行完毕时,本方案也称为事物提交时,新写入的数据在数据缓冲区中,由于备份缓冲区写满而将部分备份数据写入到非易失存性储器的备份区中。
如图4a~图4b所示,本实施例中向非易失性存储器写入数据的方法包括以下流程:
步骤S41,操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在页的所有数据备份到RAM中的数据缓冲区,并建立存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系,设置备份缓冲区的标识所映射的地址为备份区的起始地址。
本场景中,由于原数据要分两次写入到备份缓冲区,称第一次写入的原数据为旧值1,第二次写入的原数据为旧值2。
步骤S42,将数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在备份缓冲区中记录所要备份的原数据在数据区的地址信息,这里备份头所记录的地址信息可以是,当前已备份到数据缓冲区的所有页中要写入数据的地址处的原数据的地址信息,因此备份头中的地址信息既包括旧值1的地址信息也包括旧值2的地址信息,如在备份头中记录这些地址信息;当然,也可以只记录当前已备份的原数据的地址信息,在下次备份时,再记录下次备份的原数据的地址信息。
步骤S43,写入旧值1后发现备份缓冲区写满,将当前备份缓冲区中所有数据即备份头中地址信息和旧值1,写入到非易失性存储器的备份区,设置标识备份区被写入原数据的备份区写入标记,并设置备份缓冲区的标识所映射的地址无效,以标识备份缓冲区已写满;
步骤S44,将剩余的原数据即旧值2备份到RAM中的备份缓冲区,修改备份缓冲区的标识所映射的地址为备份区空闲区的起始地址;
步骤S45,根据数据区中要写入的数据的地址,在数据缓冲区对应位置写入所述要写入的数据,写入后得到新值;
确定写操作指令执行完毕时,确定事务提交,执行以下步骤:
步骤S46,发现设置有备份区写入标记,因此确定备份区被写入过原数据,设置备份区无效,以指示备份区的数据不会写回到数据区。
设置备份区无效的方式可以是多种,如既可以采用图4b所示的在设定位置标0,也可以是将备份区设置为全FF等。
步骤S47,将备份缓冲区清零,将备份缓冲区的标识所映射的地址设置为无效;
步骤S48,将所述数据缓冲区中数据写回到数据区,并设置上述建立的存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系无效。
其中步骤S47和步骤S48的执行顺序无先后限制,步骤S46需在步骤S48之前执行。
优选地,每次确定向非易失性存储器写入数据时,首先确定数据区要写入数据的地址所在页是否已被写到RAM的数据缓冲区中,如果是,则直接执行步骤S42,这样如果是在同一页内的多个数据写入,只需重复原数据备份过程与步骤S45,减少了向非易失性存储器的写入次数。
在应用场景2中,既保证了写操作的原子性,而且相比现有方案只有步骤S46和步骤S48是对非易失性存储器的写操作,耗时2×2.8ms=5.6ms,其余步骤均是对RAM的操作,耗时是ns级的可以忽略,因此实现数据快速地写入存储器。
应用场景3:写操作指令执行过程中,发现数据缓冲区不够用而备份缓冲区够用,即写操作指令执行完毕时,本方案也称为事物提交时,由于新写入数据地址与数据缓冲区地址不在同一个存储单元中,将部分数据写入到非易失性存储器中,为保证写入数据的原子性,也要将备份缓存区中的数据写入到非易失性存储器中。
本场景中,由于数据区中涉及到数据写入的数据页要分两次写入到数据缓冲区,称第一次写入的数据页为数据页1,第二次写入的数据页为数据页2。
如图5a~图5d所示,本实施例中向非易失性存储器写入数据的方法包括以下流程:
步骤S51,操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在页的所有数据备份到RAM中的数据缓冲区,并建立存储各页数据的数据缓冲区地址与数据页1地址的对应关系,设置备份缓冲区的标识所映射的地址为备份区的起始地址;
步骤S52,在向数据缓冲区备份完数据页1时,将数据页1中要写入数据的地址处的原数据备份到备份缓冲区,并在备份缓冲区中记录所备份的原数据在数据区的地址信息,如在备份头中记录起始地址和长度。
步骤S53,根据向数据页1中写入数据的地址,在数据缓冲区对应位置写入要写入的数据,得到新值1。
步骤S54,准备写入数据页2中的数据时,先将当前备份缓冲区中所有数据写入到非易失性存储器的备份区,设置备份区写入标记。
步骤S55,将当前数据缓冲区中数据即新值1写回到数据区中数据页1中,并设置存储各页数据的数据缓冲区地址与数据页1地址的对应关系无效,即设置上述建立的存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系无效,设置数据区写入标记。
步骤S56,将数据页2内所有数据读取到数据缓冲区中,并建立存储各页数据的数据缓冲区地址与数据2地址的对应关系;
步骤S57,将数据页2中要写入数据的地址处的原数据备份到备份缓冲区,并在备份缓冲区中记录所备份的原数据在数据区的地址信息,如在备份头中记录起始地址和长度。
步骤S58,根据数据区中要写入的数据的地址,在数据缓冲区对应位置写入所述要写入的数据,写入后得到新值2。
确定写操作指令执行完毕时,确定事务提交,执行以下步骤:
步骤S59,将当前备份缓冲区中数据写入到非易失性存储器的备份区,因此备份区内会有2个备份头,及各自对应的旧值1和旧值2。
步骤S60,将备份缓冲区清空;
步骤S61,将数据缓冲区数据写入到数据缓冲区对应地址的数据区,并设置上述建立的存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系无效。
步骤S62,设置备份区无效。
本发明还提供一种向非易失性存储器写入数据的装置,如图6所示,包括:第一备份单元601,用于操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在页的所有数据备份到RAM中的数据缓冲区;第二备份单元602,用于将所述数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在所述备份缓冲区中记录所备份的原数据在所述数据区的地址信息;第一写入单元603,用于根据所述数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;第二写入单元604,用于确定操作指令执行完毕时,将所述数据缓冲区中的数据写回到所述数据区,并清空所述备份缓冲区。
优选地,第二备份单元具体包括:备份区写入单元,用于在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;继续备份单元,用于将剩余的原数据备份到RAM中的备份缓冲区,并在所述备份缓冲区中记录此次所备份的原数据在数据区的地址信息;
所述装置还包括:备份区无效设置单元,用于确定操作指令执行完毕时,在将数据缓冲区中的数据写回到所述数据区之前,设置所述备份区无效,以指示所述备份区的原数据不会写回到数据区。
优选地,该装置还包括:第一触发单元,用于在第一备份单元向数据缓冲区备份数据过程,确定数据缓冲区写满且还有数据要备份时,触发如下几个单元的执行:第一备份子单元,用于确定当前数据区中已备份到数据缓冲区的数据所在的页,将确定的页中要写入数据的地址处的原数据备份到备份缓冲区,并在所述备份缓冲区中记录所备份的原数据在数据区的地址信息;第一写入子单元,用于根据所述确定的页中要写入的数据的地址,在所述数据缓冲区对应位置写入要写入的数据;第二备份子单元,用于将当前备份缓冲区中的所有原数据及地址信息写入到备份区;第二写入子单元,用于将当前数据缓冲区中数据写回到数据区中所述确定的页;第一结束确定单元,用于请求所述第一子备份单元、第一写入子单元、第二备份子单元和第二写入子单元重复执行至向数据区写完所有要写入数据,并清空所述备份缓冲区。
优选地,该装置还包括:第二触发单元,用于在所述第一备份子单元在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,触发如下几个单元的执行:第三备份子单元,用于将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;第四备份子单元,用于将剩余的原数据备份到备份缓冲区,并在所述备份缓冲区中记录此次所备份的原数据在数据区的地址信息;第二结束确定单元,用于触发第三备份子单元和第四备份子单元的重复执行,至将所述确定的页中,所有要写入数据的地址处的原数据备份到备份区。
优选地,该装置还包括:初始地址设置单元,用于在操作指令执行过程中,确定向数据区写入数据时,设置备份缓冲区的标识所映射的地址为备份区的起始地址;所述备份区写入单元或第二备份子单元具体用于根据备份缓冲区的标识所映射地址,将备份缓冲区中所有原数据及地址信息写入到备份区;地址修改单元,用于在下次执行将数据区中的原数据向备份缓冲区备份时,修改所述备份缓冲区的标识所映射的地址为,备份区中一个空闲页的起始地址。
优选地,该装置还包括:对应关系建立单元,用于每次向数据缓冲区备份数据时,建立存储各页数据的数据缓冲区地址与各页在数据区中地址的对应关系;对应关系无效单元,用于在将数据缓冲区中数据写回到数据区之后,设置所述对应关系无效。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种向非易失性存储器写入数据的方法,其特征在于,包括:
操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在存储单元的所有数据备份到RAM中的数据缓冲区;
将所述数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在所述备份缓冲区中记录所备份的原数据在所述数据区的地址信息;
根据所述数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;
确定操作指令执行完毕时,将所述数据缓冲区中的数据写回到所述数据区,并清空所述备份缓冲区;
其中,在向数据缓冲区备份数据过程,确定数据缓冲区写满且还有数据要备份时,所述方法转去执行:
确定当前数据区中已备份到数据缓冲区的数据所在的存储单元,将确定的单元中要写入数据的地址处的原数据备份到备份缓冲区,并在所述备份缓冲区中记录所备份的原数据在数据区的地址信息;
根据所述确定的存储单元中要写入数据的地址,在所述数据缓冲区对应位置写入要写入的数据;
将当前备份缓冲区中的所有原数据及地址信息写入到备份区;
将当前数据缓冲区中数据写回到数据区中所述确定的存储单元;
重复执行上述步骤至向数据区写完所有要写入数据,并清空备份缓冲区。
2.如权利要求1所述的方法,其特征在于,在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,所述方法还包括:
将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;
将剩余的原数据备份到RAM中的备份缓冲区;
确定操作指令执行完毕时,在将数据缓冲区中的数据写回到所述数据区之前还包括:设置所述备份区无效,以指示所述备份区的原数据不会写回到数据区。
3.如权利要求1所述的方法,其特征在于,在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,所述方法还包括:
将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;
将剩余的原数据备份到备份缓冲区,并在所述备份缓冲区中记录此次所备份的原数据在数据区的地址信息;
重复执行上述步骤至将所述确定的存储单元中,所有要写入数据的地址处的原数据备份到备份区。
4.如权利要求1所述的方法,其特征在于,将当前数据缓冲区中的数据第一次写回到数据区中所述确定的存储单元中之后,所述方法还包括:
设置标识数据区写入数据的数据区写入标记;
在向数据区写完所有要写入的数据之后,还包括:
设置备份区无效,以指示所述备份区的数据不会写回到数据区。
5.如权利要求1~4任一所述的方法,其特征在于,将当前备份缓冲区中原数据及地址信息第一次写入到备份区时,还包括:
设置标识备份区写入原数据的备份区写入标记。
6.如权利要求1~4任一所述的方法,其特征在于,操作指令执行过程中,确定向数据区写入数据时,还包括:
设置备份缓冲区的标识所映射的地址为备份区的起始地址;
根据所述备份缓冲区的标识所映射的地址,将备份缓冲区中所有原数据及地址信息写入到备份区;
在下次执行将数据区中的原数据向备份缓冲区备份时,修改所述备份缓冲区的标识所映射的地址为,备份区空闲区的起始地址。
7.如权利要求1~4任一所述的方法,其特征在于,每次向数据缓冲区备份数据时,还包括:
建立存储各存储单元数据的数据缓冲区地址与各存储单元在数据区中地址的对应关系;
在将数据缓冲区中数据写回到数据区之后,设置所述对应关系无效。
8.一种向非易失性存储器写入数据的装置,其特征在于,包括:
第一备份单元,用于操作指令执行过程中,确定向非易失性存储器的数据区写入数据时,将数据区中要写入数据的地址所在存储单元的所有数据备份到RAM中的数据缓冲区;
第二备份单元,用于将所述数据区中要写入数据的地址处的原数据备份到RAM中的备份缓冲区,在所述备份缓冲区中记录所备份的原数据在所述数据区的地址信息;
第一写入单元,用于根据所述数据区中要写入的数据的地址,在所述数据缓冲区对应位置写入所述要写入的数据;
第二写入单元,用于确定操作指令执行完毕时,将所述数据缓冲区中的数据写回到所述数据区,并清空所述备份缓冲区;
第一触发单元,用于在第一备份单元向数据缓冲区备份数据过程,确定数据缓冲区写满且还有数据要备份时,触发如下几个单元的执行:
第一备份子单元,用于确定当前数据区中已备份到数据缓冲区的数据所在的存储单元,将确定的存储单元中要写入数据的地址处的原数据备份到备份缓冲区,并在所述备份缓冲区中记录所备份的原数据在数据区的地址信息;
第一写入子单元,用于根据所述确定的存储单元中要写入的数据的地址,在所述数据缓冲区对应位置写入要写入的数据;
第二备份子单元,用于将当前备份缓冲区中的所有原数据及地址信息写入到备份区;
第二写入子单元,用于将当前数据缓冲区中数据写回到数据区中所述确定 的存储单元;
第一结束确定单元,用于请求所述第一备份子单元、第一写入子单元、第二备份子单元和第二写入子单元重复执行至向数据区写完所有要写入数据,并清空所述备份缓冲区。
9.如权利要求8所述的装置,其特征在于,第二备份单元具体包括:
备份区写入单元,用于在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;
继续备份单元,用于将剩余的原数据备份到RAM中的备份缓冲区;
所述装置还包括:
备份区无效设置单元,用于确定操作指令执行完毕时,在将数据缓冲区中的数据写回到所述数据区之前,设置所述备份区无效,以指示所述备份区的原数据不会写回到数据区。
10.如权利要求8所述的装置,其特征在于,还包括:
第二触发单元,用于在所述第一备份子单元在向备份缓冲区备份原数据过程,确定备份缓冲区写满且还有原数据要备份时,触发如下几个单元的执行:
第三备份子单元,用于将当前备份缓冲区中的所有原数据及地址信息写入到非易失性存储器的备份区;
第四备份子单元,用于将剩余的原数据备份到备份缓冲区,并在所述备份缓冲区中记录此次所备份的原数据在数据区的地址信息;
第二结束确定单元,用于触发第三备份子单元和第四备份子单元重复执行,至将所述确定的存储单元中,所有要写入数据的地址处的原数据备份到备份区。
11.如权利要求8~10任一所述的装置,其特征在于,还包括:
初始地址设置单元,用于在操作指令执行过程中,确定向数据区写入数据时,设置备份缓冲区的标识所映射的地址为备份区的起始地址;
所述备份区写入单元或第二备份子单元具体用于根据备份缓冲区的标识所映射的地址,将备份缓冲区中所有原数据及地址信息写入到备份区;
地址修改单元,用于在下次执行将数据区中的原数据向备份缓冲区备份时,修改所述备份缓冲区的标识所映射的地址为,备份区中空闲区的起始地址。
12.如权利要求8~10任一所述的装置,其特征在于,还包括:
对应关系建立单元,用于每次向数据缓冲区备份数据时,建立存储各存储单元数据的数据缓冲区地址与各存储单元在数据区中地址的对应关系;
对应关系无效单元,用于在将数据缓冲区中数据写回到数据区之后,设置所述对应关系无效。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106196506A CN102063380B (zh) | 2010-12-31 | 2010-12-31 | 一种向非易失性存储器写入数据的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106196506A CN102063380B (zh) | 2010-12-31 | 2010-12-31 | 一种向非易失性存储器写入数据的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102063380A CN102063380A (zh) | 2011-05-18 |
CN102063380B true CN102063380B (zh) | 2012-11-21 |
Family
ID=43998665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010106196506A Expired - Fee Related CN102063380B (zh) | 2010-12-31 | 2010-12-31 | 一种向非易失性存储器写入数据的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102063380B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019873A (zh) * | 2012-12-03 | 2013-04-03 | 华为技术有限公司 | 一种存储器故障单元的替换方法及装置、数据存储系统 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102572330A (zh) * | 2010-12-29 | 2012-07-11 | 厦门华侨电子股份有限公司 | 一种液晶电视机Flash芯片的数据读取、写入和擦除的方法 |
CN102955751B (zh) * | 2011-08-17 | 2015-11-18 | 群联电子股份有限公司 | 存储器储存装置、存储器控制器与数据写入方法 |
CN103593255B (zh) * | 2012-08-15 | 2016-12-21 | 群联电子股份有限公司 | 数据管理方法、记忆存储存储器与记忆存储控制器 |
CN103744746B (zh) * | 2013-12-30 | 2016-08-03 | 北京工业大学 | 一种基于索引的智能卡记录备份与恢复方法 |
TWI524179B (zh) * | 2014-04-22 | 2016-03-01 | 新唐科技股份有限公司 | 儲存單元控制器及其控制方法、以及儲存裝置 |
CN107102821A (zh) * | 2017-04-21 | 2017-08-29 | 济南浪潮高新科技投资发展有限公司 | 一种nand flash阵列写失败的处理方法 |
CN107145308B (zh) * | 2017-05-04 | 2021-06-22 | 惠州Tcl移动通信有限公司 | 移动终端、及其sd卡操作控制方法、系统、存储装置 |
CN109254929B (zh) * | 2018-09-05 | 2020-09-08 | 北京智芯微电子科技有限公司 | 实现数据被可靠写入芯片的方法 |
CN111224694A (zh) * | 2019-12-29 | 2020-06-02 | 武汉迈威通信股份有限公司 | 基于nfc更换交换机设备的方法、装置、存储介质及设备 |
CN113467698A (zh) * | 2020-03-30 | 2021-10-01 | 珠海全志科技股份有限公司 | 基于文件系统的写方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1783025A (zh) * | 2004-12-03 | 2006-06-07 | 华为技术有限公司 | 嵌入式系统数据备份装置及方法 |
CN101650972A (zh) * | 2009-06-12 | 2010-02-17 | 东信和平智能卡股份有限公司 | 智能卡的非易失性存储器数据更新方法 |
CN101739312A (zh) * | 2008-11-07 | 2010-06-16 | 株式会社京滨 | 备份方法、备份装置和车辆控制器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007199905A (ja) * | 2006-01-25 | 2007-08-09 | Toshiba Corp | 半導体記憶装置の制御方法 |
-
2010
- 2010-12-31 CN CN2010106196506A patent/CN102063380B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1783025A (zh) * | 2004-12-03 | 2006-06-07 | 华为技术有限公司 | 嵌入式系统数据备份装置及方法 |
CN101739312A (zh) * | 2008-11-07 | 2010-06-16 | 株式会社京滨 | 备份方法、备份装置和车辆控制器 |
CN101650972A (zh) * | 2009-06-12 | 2010-02-17 | 东信和平智能卡股份有限公司 | 智能卡的非易失性存储器数据更新方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019873A (zh) * | 2012-12-03 | 2013-04-03 | 华为技术有限公司 | 一种存储器故障单元的替换方法及装置、数据存储系统 |
CN103019873B (zh) * | 2012-12-03 | 2016-08-10 | 华为技术有限公司 | 一种存储器故障单元的替换方法及装置、数据存储系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102063380A (zh) | 2011-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102063380B (zh) | 一种向非易失性存储器写入数据的方法及装置 | |
CN107168647B (zh) | Flash数据读写方法及系统 | |
US6865658B2 (en) | Nonvolatile data management system using data segments and link information | |
KR100526188B1 (ko) | 플래시 메모리의 주소 사상 방법, 사상 정보 관리 방법 및상기 방법을 이용한 플래시 메모리 | |
CN100419714C (zh) | 闪存存取方法、闪存文件系统的块替换方法及其管理装置 | |
CN101354681B (zh) | 存储器系统、非易失性存储器的磨损均衡方法及装置 | |
CN101346703B (zh) | 具有可块擦除单元的非易失性存储器 | |
CN102054533B (zh) | 隔离顺序、随机和系统数据以减少垃圾回收的针对基于页映射的非易失性半导体存储器 | |
US20080270680A1 (en) | Controller for Non-Volatile Memories and Methods of Operating the Memory Controller | |
EP1895418B1 (en) | Nonvolatile memory device, method of writing data, and method of reading out data | |
CN100470506C (zh) | 基于sector访问的flash存储器的存储管理方法 | |
US7340581B2 (en) | Method of writing data to non-volatile memory | |
CN101515276B (zh) | 一种文件数据写操作的方法、文件数据恢复方法及系统 | |
CN102662852B (zh) | 一种利用MCU内部数据Flash存储非易失性数据的方法 | |
US8296503B2 (en) | Data updating and recovering methods for a non-volatile memory array | |
CN100501868C (zh) | 基于NAND Flash存储器文件系统的实现方法 | |
CN104516959A (zh) | 一种管理数据库日志的方法及装置 | |
CN101231617B (zh) | 闪存设备的数据处理方法 | |
CN101763295A (zh) | 一种数据备份、备份项擦除及数据恢复方法和装置 | |
CN109669889B (zh) | 一种轻量型Nor Flash闪存控制方法和装置 | |
JPWO2009004674A1 (ja) | 記憶装置、ディスク装置、書込み判定方法、制御装置 | |
US8261013B2 (en) | Method for even utilization of a plurality of flash memory chips | |
CN110287068B (zh) | 一种NandFlash驱动方法 | |
CN100364013C (zh) | 在闪存中存放校验码的方法及装置 | |
CN111221750A (zh) | 固态储存装置的数据处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100015 Beijing city Chaoyang District Dongzhimen West eight Street No. 2 room Wanhong Yan Dong Business Garden Patentee after: BEIJING WATCHDATA Co.,Ltd. Address before: 100015 Beijing city Chaoyang District Dongzhimen West eight Street No. 2 room Wanhong Yan Dong Business Garden Patentee before: BEIJING WATCH DATA SYSTEM Co.,Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121121 Termination date: 20211231 |