发明内容
本发明的一个实施例涉及一种在包含目标页面的要写入和读取数据的主非易失性存储器中写入和读取数据的方法,该方法包含:提供具有擦除区的非易失性缓存;提供易失性高速缓冲存储器(cache memory),接收写入命令,该写入命令旨在用长度可以小于页面长度的更新数据更新目标页面,并且对写入命令作出响应:将更新数据连同第一类型的管理数据写入非易失性缓存的擦除区,并且在高速缓冲存储器中记录目标页面的更新版本或者在高速缓冲存储器中更新目标页面之前的更新版本。
根据一个实施例,该方法包含接收页面读取命令,并且对页面读取命令作出响应:如果非易失性缓存包含目标页面的更新数据,在高速缓冲存储器中读取目标页面的更新版本,或者如果非易失性缓存不包含目标页面的更新数据,在主非易失性存储器中读取目标页面。
根据一个实施例,其中在高速缓冲存储器中读取目标页面的更新版本或者在主非易失性缓存中读取目标页面是利用硬件查找表自动选择的。
根据一个实施例,其中第一类型的管理数据包含以下数据中的至少一个:与数据关联写入存储器中的识别事务的事务数据(transaction data);识别第一类型的管理数据的数据;在主非易失性存储器中指示目标页面位置的数据;在目标页面中指示更新数据位置的数据;以及指示更新数据长度的数据。
根据一个实施例,识别第一类型的管理数据的数据或事务数据在更新数据和其它管理数据被写入非易失性缓存后作为最终步骤被写入,作为对非易失性缓存中更新数据的记录的确认。
根据一个实施例,识别管理数据的数据还包含用于确认或无效相关的更新数据的数据。
根据一个实施例,该方法包含页面回滚循环,页面回滚循环包含:在主非易失性存储器中擦除至少一个包含位于非易失性缓存中的更新数据的目标页面,以及将至少一个目标页面的更新版本从高速缓冲存储器转移到已经在主非易失性存储器中擦除的至少一个目标页面的位置。
根据一个实施例,该方法包含缓存转储循环,缓存转储循环包含:擦除主非易失性存储器中的至少一个目标页面;将目标页面的更新版本从高速缓冲存储器转移到已经在主非易失性存储器中擦除的目标页面的位置;以及在非易失性缓存中擦除属于转移的目标页面的更新版本的更新数据。
根据一个实施例,该方法包含,在主非易失性存储器中擦除目标页面之前,为了保存更新数据尚未写入或者将要写入非易失性缓存中的目标页面的原始数据,在非易失性缓存中备份目标页面的原始版本或更新版本的步骤。
根据一个实施例,该方法进一步包含对写入命令作出响应:确定非易失性缓存的擦除区的大小是否足够接收更新数据和第一类型的管理数据,然后:如果非易失性缓存的擦除区足够大,则将更新数据和第一类型的管理数据写入非易失性缓存的擦除区,如果非易失性缓存的擦除区不够大,则执行缓存转储循环。
根据一个实施例,该方法包含,对写入命令作出响应,确定非易失性缓存是否包含目标页面之前的更新数据的预备步骤,如果非易失性缓存不包含目标页面之前的更新数据:则将目标页面的更新版本连同第二类型的管理数据写入非易失性缓存的擦除区,而不是将更新数据和第一类型的管理数据写入其中,并且在高速缓冲存储器中记录目标页面的更新版本。
根据一个实施例,第二类型的管理数据包含以下数据中的至少一个:识别第二类型的管理数据的数据,与数据关联写入存储器中的识别事务的事务数据,以及在主非易失性存储器中指示目标页面的位置的数据。
根据一个实施例,识别第二类型的管理数据的数据或事务数据在目标页面的更新版本被写入非易失性缓存后作为最终步骤被写入,作为对非易失性缓存中更新数据的记录的确认。
根据一个实施例,该方法包含在非易失性缓存中提供以下所述的步骤:包含擦除区以写入更新数据和管理数据的主动缓存,包含更新数据和管理数据的转移缓存以及包含将要被擦除的数据的无效缓存。
根据一个实施例,缓存转储循环包含:擦除无效缓存;在主非易失性存储器中擦除与位于转移缓存中的有效更新数据相对应的目标页面;将目标页面的更新版本从高速缓冲存储器转移到主非易失性存储器中已经被擦除的目标页面的位置;使转移缓存中属于转移的目标页面的更新版本的更新数据无效;声明之前是主动缓存的缓存为转移缓存;声明之前是转移缓存的缓存为无效缓存;声明之前为无效缓存并且已被擦除的缓存为主动缓存。
根据一个实施例,该方法包含,对写入命令作出响应,确定主动缓存或者转移缓存是否包含目标页面之前的更新数据的至少一个预备步骤,以及如果主动和转移缓存不包含目标页面之前的更新数据,则:将目标页面的更新版本连同第二类型的管理数据写入主动缓存,在高速缓冲存储器中记录目标页面的更新版本,以及:如果转移缓存包含目标页面之前的更新数据,则:将页面的更新版本连同第二类型的管理数据写入主动缓存,使转移缓存中的之前的更新数据无效,并且在高速缓存存储器中更新目标页面之前更新的版本;如果主动缓存包含目标页面之前的更新版本,则:将更新数据连同第一类型的管理数据写入主动缓存,并且在高速缓冲存储器中更新目标页面之前更新的版本。
根据一个实施例,该方法包含单回滚循环,单回滚循环包含:在主非易失性存储器中擦除一个包含位于转移缓存中的有效更新数据的目标页面;将目标页面的更新版本从高速缓冲存储器转移到已经被擦除的目标页面的位置;以及使转移缓存中属于转移的目标页面的更新版本的更新数据无效。
根据一个实施例,该方法包含在更新数据和管理数据已经被写入非易失性缓存的超过一个物理页面中以后,触发单回滚循环。
根据一个实施例,页面是主非易失性存储器的最小存储区,其可以被个别擦除。
根据一个实施例,可以写入主非易失性存储器中的最小更新数据元素为X位字,“X”小于主存储器的页面中的位数。
具体实施方式
图1以方框图的形式,示意性地表示根据本发明的存储装置的实施例。存储装置包含主非易失性存储器MM,非易失性缓存NVB和微处理器MP。微处理器具有程序存储器PMEM,在程序存储器PMEM中已经载入了程序,用于执行根据本发明的读取和写入数据的方法的实施例。
主存储器MM例如是页面可擦除和字可擦除的闪存。因此,其包含可个别擦除的目标页面,且在该目标页面中X位字可以通过编程存储单元个别写入。
在本实施例中,非易失性缓存NVB和主存储器MM是非易失性存储区NVMA的组成部分,并且利用常见的解码器和读出放大器(sense amplifier)(图中未示出)读取或写入。存储区NVMA通过数据总线(data bus)DBUS、地址总线(address bus)ABUS以及控制总线(control bus)连接到微处理器。控制总线包含各种控制信号,允许微处理器MP对这些不同的元件进行控制并且施加读取和写入命令。
非易失性缓存NVB具有擦除区,微处理器对包含更新数据并且指向主存储器的目标页面的写入命令作出响应,将更新数据写入该擦除区中。更新数据被写入非易失性缓存NVB中而不在主存储器中擦除相应的目标页面。这样,如果发生供电中断,原始数据和更新数据都不会丢失。主存储器中原始数据的擦除以及原始数据的替换随后在缓存转储循环过程中执行,该实施例的例子将随后描述。
此外,作为对包含表示目标页面片断(fragment)的更新数据的写入命令的响应,微处理器仅在非易失性缓存NVB中写入更新数据而不是写入整个更新页面,除非在以下将要描述的特定环境下。
存储装置还包含易失性高速缓冲存储器CM,例如RAM高速缓存(随机存取存储器(Random Access Memory)),也通过数据总线DBUS、地址总线ABUS以及控制总线CBUS连接到微处理器。易失性高速缓冲存储器CM用于储存主存储器MM的目标页面的更新版本。这样,当必须读取完整的页面时,页面的更新内容在高速缓冲存储器中可以获得,并且,将表示页面片断的更新数据写入非易失性缓存不会增加读取更新页面所需要的时间。换言之,对微处理器来说,不需要从存在于非易失性缓存中的不同片断中重建更新页面,该重建过程将需要选择并读取不同的页面位置。
为了简化高速缓冲存储器CM的存取并且节约微处理器的处理时间,还提供查找表(lookup table)LUT。地址总线ABUS将微处理器连接到查找表LUT的输入端并且在查找表的输出端分为两条总线ABUS1、ABUS2。存储区NVMA的地址输入端连接到总线ABUS1并且高速缓冲存储器CM的地址输入端连接到总线ABUS2。微处理器在查找表中储存地址对ADi/ADj的列表,并且通过擦除、变换或者增加地址对不时对其更新。微处理器还在执行接收自外部的读取命令并指向主存储器MM的过程中激活查找表。
在激活时,当相应的地址ADj存在于查找表中时,查找表的作用如同用于存在于总线ABUS上的地址ADi的地址复用器(address multiplexer)。在这样的情况下,查找表在ABUS2上输出相应的地址ADj,而不是在ABUS1上输出地址ADi,使得微处理器在地址ADj读取高速缓冲存储器,而不是在地址ADi读取主存储器。还提供控制逻辑(Control logic)(图中未示出),用于当地址ADj存在于查找表中、地址ADi存在于总线ABUS上时,将微处理器向主存储器发出的命令信号(例如“芯片选择(CHIPSELECT)”和“读取”)转变成为适用于高速缓冲存储器的命令信号。由于查找表的使用本身在本领域技术人员的认知范围内,查找表和相关的电路将不进一步描述,且图1所示的实施例仅表示本领域技术人员能够提供的数个实施例之一。尤其是,查找表可以以不同的传统方式实施。例如,在可选实施例中,LUT可以具有控制连续存储空间中的非易失性存储器阵列NVMA的地址输入以及高速缓冲存储器CM的地址输入的单个输出,即,通过单个地址总线“ABUS12”进行控制,而不是两个总线ABUS1、ABUS2。另外,要注意的是查找表的提供可选择的,并且仅以节省微处理器处理时间为目标。
图2表示主存储器MM的页面结构的例子,图3A表示在非易失性缓存NVB中的更新数据的组织结构(organization)。如图2所示,页面按照惯例包含数据字(data words),每一个数据字包含X位,X取决于存储器的构造,例如从W0到W127的128个字。每一个字都具有包含页面地址(MSB地址)和还被称为“字补偿(word offset)”的页面中的字地址(LSB地址)的地址。该字补偿对于128字的页面来说,其范围可以从0到127。因此,对于128字的页面,必须用7位定义数据字的字补偿。
在图3A所示的例子中,假定可以在缓存中写入的最小更新数据是8-位字,即一字节(byte)。当更新数据将要在缓存中写入时,微处理器单行写入第一类型的管理数据(management data)MD1和更新数据,对于128字的页面存储器来说,可以包含1到128个字。管理数据MD1包含例如如下的数据字段(data fields):
-识别第一类型的管理数据MD1的识别字段(identification field)ID1(并因而在缓存中指示跟随有更新数据),例如1字节的字段;
-指示更新数据所属的目标页面地址的页面地址,例如2字节的字段(这意味着在本例子中如果每一个页面包含128字节,主存储器能够具有多达65536个页面并且具有8MB的大小);
-指示更新数据的第一个字的目标页面中的地址的字补偿地址,例如1字节的字段(如果页面大小等于128字,在该字段中仅7位用来定义字补偿地址,);以及
-指示跟随的字的数量的数据长度字段,例如1字节的字段。
非易失性缓存NVB在图3A所示的格式中逐步被更新数据充满,直到作出将其清空的决定。此时,正如以下通过例子将会看到的,执行缓存转储循环。基本上,这样的转储循环包含首先页面回滚循环,然后是对已经“回滚”到主存储器中的非易失性缓存的区域进行擦除的步骤。回滚循环包含例如在主存储器MM中擦除至少一个目标页面的步骤和将该页面的更新版本转移到擦除位置的步骤。
由于本发明实施例的另一个目的是防止在电源故障之后数据丢失,因此应当注意到如果电源中断发生在目标页面的擦除和对其更新版本的转移之间,这样的回滚循环会产生数据丢失的风险。这是因为这样的事实:非易失性缓存中的更新数据并不一定表示目标页面的所有数据——当执行回滚循环时,目标页面的某些原始数据依旧是有效的。因此,为了至少保存在非易失性缓存中尚未写入更新数据或者将要写入更新数据的原始页面数据,提供至少一个初始页面数据的备份步骤。为了达到此效果,在本发明的一些实施例中,非易失性缓存NVB还用作“备份区”,用于在回滚循环过程中,在原始页面数据的内容被擦除之前储存原始页面数据的内容。更具体地说,可以提供两个实施例:
-原始页面数据在其被擦除之前、该页面的更新数据已经写入缓存中之后,在缓存中备份(即保存);或者
-原始页面数据在缓存中从头开始备份,也就是说,当该页面的更新数据第一次被接收时就开始备份。
在第二实施例中,在页面写入缓存之前更新页面而不是写入原始页面数据然后将更新数据写入缓存中,这样是有利的,因为这样能够节约存储空间。由于该备份步骤的目的是在执行回滚循环时保存更新数据尚未写入非易失性缓存中的原始数据,所以页面的更新版本的备份足够保存这些原始数据。页面备份步骤的这个实施例将用在以下结合图4说明的本发明的实施例中。
图3B表示非易失性缓存NVB中页面的备份的组织结构。当页面数据(之前更新的或未更新的)将要写入缓存中时,微处理器单行写入第二类型的管理数据MD2以及页面数据,根据图2所示的页面结构,该页面数据包含128个字。管理数据MD2包含例如以下数据字段:
-识别第二类型的管理数据MD2的识别字段ID2(因而在缓存中指示有备份数据跟随——原始的或更新的),例如1字节的字段;以及
-指示页面地址的页面地址,例如2字节的字段。
在一实施例中,字段ID1和ID2包括必要时允许微处理器无效更新数据或备份页面的有效和无效位。在其它实施例中,字段ID1和ID2还可以包含事务位以包括更新数据写入存储器的事务过程中的参照。该特征在存储装置的应用中是有用的,例如更新数据可以与事务标识(transaction identifier)关联的芯片卡应用。“事务”通常指在数据写入非易失性存储区MVMA中的过程中,芯片卡和终端(terminal)(读卡器、支付终端...)之间的会话(session)。因此,如果利用事务位,存储器中数据的任何修改就用相应的事务数字“标记”。
当更新数据写入缓存中时或者当页面在缓存中备份时,最好在更新数据或备份页面已经写入缓存中之后,管理数据MD1或MD2或者至少管理数据的识别字段ID1或ID2作为最终步骤被写入。同样,如果利用事务位,则这样的事务位也作为最终步骤被写入,作为执行事务的终端的“承诺(commitment)”,即,终端确认执行同意的事务以及在非易失性存储器中对数据的修改是合理的。这样,如果供电中断发生在页面的所有更新数据写入之前,ID1或ID2字段的缺失以及/或者事务位的缺失表明供电中断之前写入的数据是无效的。
本发明的实施例还包括一种确保非易失性缓存NVB持续具有能够用来写入更新数据或者备份页面数据(之前更新的或未更新的)的擦除区的方法。为了实现该方法,缓存包含至少三个不同的扇区,即如图1所示的“主动缓存(active buffer)”ABUF、“转移缓存(transfer buffer)”TBUF以及“无效缓存(unavailable buffer)”UBUF。主动缓存ABUF是缓存的擦除区,用来接收更新数据(图3A)、页面数据(图3B)和管理数据(图3A、2B)。转移缓存TBUF包含将要转移到主存储器的目标页面中的更新数据。无效缓存UBUF包含已经转移到主存储器中并且因此将要被擦除的数据。
主动缓存ABUF逐步地被页面数据、更新数据以及管理数据充满,直到作出清空主动缓存的决定。例如当其没有提供足以写入更新数据以及所附的管理数据(或足以备份页面,之前更新的或未更新的)的擦除区时,作出该决定。如果遇到这样的情况,执行前面提到的缓存转储循环。在本实施例中,由于非易失性缓存的3扇区的结构,在这里缓存转储循环包含擦除无效缓存UBUF的步骤,涉及转移缓存TBUF中所有有效更新数据的集体回滚循环,以及轮转缓存的三个扇区的步骤,使得擦除的无效缓存UBUF变成主动缓存ABUF。图4是说明根据本发明的写入和读取数据的方法的一个实施例的流程图。当微处理器从外部接收到包含更新数据并指向主存储器MM中的特定目标页面Pi的写入命令时,更新数据的写入在步骤S01中触发。命令包含将要写入的第一字的地址和一个或多个字。如前所述,第一字的地址包含页面Pi的地址和页面Pi中的第一字的地址(字补偿)。
该方法的核心包含步骤S11、S12、S13,在这些步骤中,微处理器将更新数据写入主动缓存ABUF(步骤S11),然后,如前面涉及图3A所述,写入第一类型的管理数据MD1(步骤S12),然后更新高速缓冲存储器CM使其包含目标页面Pi的新近更新版本(步骤S13)。步骤S13之后,微处理器转到步骤S00并且等待新的写入命令或者读取命令。
如前所述,当第一次为页面Pi接收到更新数据时,还执行存在于目标页面Pi中的原始页面数据的备份。因此,图4的流程图包含第一预备步骤S02,在该步骤中,微处理器为页面Pi确定之前的更新数据是否已经被写入主动缓存ABUF中。如果响应是肯定的,微处理器则转到第二预备步骤S03,在该步骤中,其确定在主动缓存中是否有足够的用于更新数据和各第一类型管理数据的空间。如果响应是肯定的,则执行步骤S11-S13。如果响应是否定的,微处理器则执行缓存转储循环。
如果步骤S02的响应是否定的,微处理器则转到第三预备步骤S04,在该步骤中,其确定在主动缓存ABUF中是否有足够的用于页面数据和各的第二类型管理数据的空间。如果响应是否定的,微处理器则执行缓存转储循环。如果响应是肯定的,微处理器则转到第四预备步骤S05,在该步骤中,其为页面Pi确定在转移缓存TBUF中是否有之前的有效的更新数据。如果响应是否定的,微处理器则执行一系列步骤S20、S21、S22、S23、S24而不执行步骤S11-S13,然后转到步骤S00。如果响应是肯定的,微处理器则执行一系列步骤S25、S26、S27、S28而不执行步骤S11-S13,然后转到步骤S00。
步骤S20中,微处理器读取主存储器中的目标页面Pi中的原始页面数据。然后,微处理器在步骤S21中,在高速缓冲存储器CM中记录目标页面的更新版本,在步骤S22中,在主动缓存ABUF中写入更新页面,在步骤S23中写入相应的第二类型的管理数据MD2,如前面涉及图3B所述的那样。由于页面Pi的更新版本是第一次被记录到高速缓冲存储器CM中,所以微处理器还通过将包含目标页面Pi的地址ADi以及高速缓冲存储器的页面的地址ADj的地址对记录到其中来在步骤S24中更新查找表,其中,在高速缓冲存储器中目标页面的更新版本已经被记录。因此,指向页面Pi的将来的读取命令将引起高速缓冲存储器CM被读取而不是主存储器MM被读取。然后微处理器转到步骤S00。
步骤S25中,微处理器更新高速缓冲存储器CM使其包含目标页面Pi的最近更新版本。这里可以注意到这样的事实:有效的更新数据已经在转移缓存TBUF中找到,意味着高速缓冲存储器包含页面Pi的之前更新版本,使得微处理器只要在高速缓冲存储器中再次更新之前更新的页面数据,而不用在高速缓冲存储器中记录整个更新页面数据。然后微处理器在步骤S26中,在主动缓存ABUF中写入更新页面数据,在步骤S27中,在主动缓存中写入相应的第二类型的管理数据MD2,并且在步骤S28中使TBUF中的之前的更新数据无效。提供这样的无效用于避免高速缓冲存储器中的更新页面数据在下一个缓存转储循环中转移到主存储器中。实际上,由于页面Pi的页面数据现在存在于主动缓存中,必须认为页面是属于主动缓存而不属于转移缓存。然后微处理器转到步骤S00。
要注意的是流程图中的一些步骤的顺序可以根据实际的操作细节而调整。例如,为了利用高速缓冲存储器作为易失性缓存来详述页面在被写入主动缓存之前的更新版本,步骤S21在步骤S22-S23之前执行,步骤S25在步骤S26-S27之前进行。然而,在将更新页面记录到高速缓冲存储器中(步骤S21)之前或者在更新页面在高速缓冲存储器中更新(S25)之前,微处理器还可以利用其自身的易失性存储器资源(图1中未示出)详述更新页面,然后将更新页面写入主动缓存(步骤S22-S23或S26-S27)。
缓存转储循环的实施例以图5说明。微处理器执行步骤S30、S31、S32、S33、S34、S35,然后转到如前所述的步骤S05。步骤S30中,微处理器擦除无效缓存UBUF。步骤S31到S34中,微处理器为存在于转移缓存TBUF中的所有有效更新数据执行集体回滚循环。更准确地说,步骤S31中,微处理器在主存储器MM中为存在于转移缓存TBUF中的有效更新数据擦除所有的目标页面。然后,步骤S32中,微处理器将这些页面的更新版本从高速缓冲存储器CM转移到主存储器MM中已经被擦除的页面位置。步骤S33中,微处理器更新查找表,擦除所有与主存储器中已经更新的页面相对应的地址对,使得这些页面将在主存储器中被读取而不是在高速缓冲存储器中被读取。步骤S34中,微处理器在高速缓冲存储器CM中擦除这些页面的更新版本。
一俟集体回滚循环已经执行,微处理器即执行轮转非易失性缓存NVM扇区的步骤(步骤S35):之前的主动缓存ABUF变成现在的转移缓存TBUF,之前的转移缓存TBUF变成现在的无效缓存UBUF并且之前的无效缓存UBUF(其已经被擦除)变成现在的主动缓存ABUF。要注意的是,扇区ABUF、TBUF和UBUF是物理上不动的,只是分配给其的状态接受前面提到的轮转。这些状态,例如利用非易失性状态位(nonvolatile status bits)管理,状态位分配到缓存的每一个扇区。这些状态位例如位于“服务(service)”页面中(即,不用于储存使用者数据),例如每一个扇区的第一页面(图1中未示出)。该服务页面并不包括在非易失性存储区的地址字段中,并且通过特定的配线(wiring)或者专用的地址可以访问。
如果发生电源中断,易失性高速缓冲存储器CM中的目标页面的所有更新版本丢失,并且微处理器利用存在于非易失性缓存NVM中的更新数据和更新页面重建高速缓冲存储器。管理数据MD1和MD2允许微处理器分析(“解析(parse)”)非易失性缓存中的更新页面片断并且重建更新页面的最近版本。
图6中简化的流程图说明高速缓冲存储器重建循环的一个实施例并且表示由微处理器执行的、达到该效果的步骤S40、S41、S42、S43、S44。步骤S40中,微处理器通过例如分析非易失性缓存的每一个扇区的状态位来确定哪一个是ABUF、TBUF和UBUF,从而找到缓存ABUF、TBUF和UBUF。步骤S41中,为了在非易失性缓存中重建具有有效更新数据的页面的更新版本,微处理器分析缓存ABUF和TBUF的内容。例如,微处理器寻找有效的更新页面和有效的更新数据,然后推断哪个数据将要用于重建更新页面。如果相同页面Pi的相同数据被更新过若干次,并且因此在主动缓存ABUF中被找到若干次,则最终被写入主动缓存的更新数据是将要用于重建更新页面Pi的正确数据。然后,步骤S42中,微处理器在高速缓冲存储器CM中记录所有的重建更新页面。步骤S43中,微处理器确定缓存转储循环是否被供电中断所中断。如果响应是肯定的,则微处理器转到步骤S44,否则微处理器结束高速缓冲存储器重建循环。
有许多的“提示(clues)”可以用来实现步骤S43以及确定如图5所示的缓存转储循环在哪个时刻被中断。例如,微处理器确定无效缓存UBUF是否处在擦除状态或没有处在擦除状态。肯定的响应意味着缓存转储循环已开始,并且步骤S30已执行,但是轮转扇区的步骤S35未执行。
步骤S44中,微处理器首先将主存储器中的目标页面内容与非易失性缓存中的有效管理数据比较,并且确定转移步骤S32是完全执行、部分执行还是根本没有执行。然后微处理器完成缓存转储循环。该完成可以是执行步骤S32到S35,或者如果微处理器已经确定转移步骤S32已执行时仅仅是执行步骤S35。
图7是表示可选的单回滚循环的流程图,如果满足预先确定的条件“C”,该回滚循环可以在图4中的步骤S13、S24和S28之后执行。到目前为止,没有提及非易失性缓存的物理结构,因为其对单个文件中的更新数据和管理数据的记录来说不重要——当到达页面的末尾时,下一个更新数据从主动缓存的下一个页面的起始被写入。然而,数据已经被写入缓存的新的物理页面的事实可以用作条件“C”以执行回滚循环。因此,步骤S50由确定条件“C”是否达成构成。如果响应是否定的,微处理器直接转到步骤S00并且不执行单回滚循环。如果响应是肯定的,微处理器则转到步骤S51。步骤S51中,微处理器在主存储器MM中擦除具有位于转移缓存S51中的更新数据的页面。然后,步骤S52中,微处理器将该页面的更新版本从高速缓冲存储器CM转移到已经被擦除的主存储器MM的页面。然后微处理器在步骤S53更新查找表,在步骤S54中,在高速缓冲存储器CM中擦除转移的更新页面,并且在步骤S55中,在转移缓存TBUF中无效相应的更新数据。接着,微处理器转到等待步骤S00。在缓存转储循环过程中,该单回滚循环简化和缩短了集体回滚循环(步骤S31到S34)。
图8A到图8I表示实现如前所述的写入方法的简化例子。
图8A中,示意性表示存储装置的原始状态。主存储器MM包含三个目标页面P1、P2、P3。为了简化起见,在这里,这些页面的每一个仅包含8个字W0-W7。高速缓冲存储器CM包含页面P2的更新版本P2″″,P2的更新版本P2″″包含存在于目标页面P2中的字W0、W3、W5、W7的更新值[W0′]、[W3′]、[W5′]、[W7′]。在非易失性缓存中,主动缓存ABUF是空的并且准备接收更新数据。无效缓存UBUF包含将要被擦除的数据(用阴影表示)。从图8A可以推断出,页面P2首先用更新数据[W0′]更新,并且包括更新数据[W0′]的页面P2的第一更新版本P2′与第二类型的管理数据MD2被写入主动缓存中,并且在高速缓冲存储器CM中记录。然后,继续接收到包含更新数据[W3′]、[W5′]、[W7′]的另外的写入命令,更新数据连同它们相应的第一类型的管理数据MD1连续地被写入主动缓存中。这些更新数据还被写入连续包含页面P2的第二更新版本P″的高速缓冲存储器CM中,然后页面P2的第三更新版本P″′,然后第四且最后一个更新版本P2″″可以在图8A中看到。随后执行扇区的轮转,使得页面P2的第一更新版本P2′和随后的更新数据[W3′]、[W5′]、[W7′]存在于转移缓存中,并且高速缓冲存储器包含最终的更新版本P″″。
要注意的是,为了简化附图,图8A到图8I中的主动缓存、转移缓存和无效缓存的各自的内容以压缩形式表示,就像它们包括在单行数据中一样。例如,图8A中,更新页面P2′在转移缓存中占有的表观空间并不是该页面在缓存区与主存储器和高速缓冲存储器相比所占有的空间的实际表示。实际表示将表明更新页面P2′及其管理数据MD2占有转移缓存的超过一个物理页面。
图8B中,写入命令WR{[W2′];AD((W2)(P3))}发送到微处理器(图中未示出)。写入命令包含更新数据[W2′]和将要被更新的字W2的地址(字补偿)以及目标页面P3的地址。因此,写入命令指向主存储器MM的目标页面P3中的字W2。为了简化起见,在本例子以及以下例子中可以认为每次仅有一个字(在这里是W2)将要被更新。然而命令还可以包含一系列字。
可以看出:在主动缓存中没有页面P3之前的更新数据。在转移缓存中也没有页面P3之前的更新数据。因此,目标页面P3在主存储器中读取并且写入高速缓冲存储器中,同时在原始数据[W2]的位置加上字W2的更新数据[W2′],使得高速缓冲存储器CM包含页面P3的更新版本P3′。然后,页面P3的更新版本P3′与相应的管理数据MD2写入主动缓存(为了简化起见,查找表的管理将不在本例子中描述)。
图8C中,写入命令WR{[W4′];AD((W4)(P3))}发送到微处理器。写入命令包含更新数据[W4′]并且指向主存储器MM的页面P3中的字W4。由于在主动缓存中已经有页面P3的更新数据,所以最近更新的页面不再在非易失性缓存中备份。字W4的的更新数据[W4′]连同相应的管理数据MD1仅写入主动缓存ABUF,并且用[W4′]更新高速缓冲存储器。
图8D中,写入命令WR{[W4″];AD((W4)(P3))}发送到微处理器。写入命令包含更新数据[W4″]并且指向主存储器MM的页面P3中的字W4。字W4的更新数据[W4″]连同相应的管理数据MD1写入主动缓存ABUF中,并且用更新数据更新高速缓冲存储器,使其包含页面P3的更新版本P3″′。因此,在主动缓存中对于相同的字W4可以找到两个不同的更新数据。在供电中断后的高速缓冲存储器重建循环过程中,微处理器将考虑用值W4″更胜于用W4′,因为其在W4′之后写入并且具有有效的管理数据D1。
图8F中,写入命令WR{[W6′];AD((W6)(P3))}发送到微处理器。页面P3的字W6的更新数据[W6′]连同相应的管理数据MD1写入主动缓存ABUF中,且用更新数据更新高速缓冲存储器,使其包含页面P3的更新版本P3″″。
图8F中,写入命令WR{[W3′];AD((W3)(P3))}发送到微处理器。在这里假设主动缓存中没有足够的空间写入页面P3的字W3′的更新数据[W3′]以及相应的管理数据。结果,执行缓存转储循环。
首先,如图8F所示,无效缓存被擦除。然后,还是如图8F所示,主存储器中的页面P2的原始页面数据被擦除。接着,如图8G所示,页面P2的最近更新版本P2″″(包含更新数据[W0′]、[W3′]、[W5′]、[W7′])从高速缓冲存储器CM转移到主存储器中的页面位置P2,并且页面的更新版本P2″″在高速缓冲存储器中被擦除。
最后,如图8H所示,执行轮转非易失性缓存的三个扇区的步骤。之前的主动缓存ABUF变成现在的转移缓存TBUF,之前的转移缓存TBUF变成现在的无效缓存UBUF,并且之前的无效缓存UBUF变成现在的主动缓存ABUF。现在的主动缓存ABUF因此被完全擦除并且准备接收更新页面数据、更新数据以及管理数据,同时现在的转移缓存TBUF包含之前已写入主动缓存的更新页面数据、更新数据和管理数据。现在的无效缓存UBUF包含已经转移到主存储器中的数据并且现在将被擦除。
扇区轮转之后,如图8I所示,可以执行写入命令。字W3的更新数据[W3′]记录在高速缓冲存储器中,使得后者现在包含页面P3的更新版本P3″″′。由于在转移缓存TBUF中有页面P3之前的更新数据,所以页面的更新版本P3″″′写入主动缓存ABUF中并且之前的备份页面[P3′]和转移缓存TBUF中所有之前的更新数据[W4′]、[W4″]和[W6′]都被无效,从而在下一个非易失性缓存的扇区轮转步骤中不能被转移到主存储器的目标页面位置P3。
本发明能够存在其它不同的实施例,这对本领域技术人员来说是显而易见的。在前面的描述中,“页面”指在页面可擦除存储器中可被个别擦除的最小存储区。然而,在本发明应用到扇区可擦除存储器的实施例中,在前面的描述中所称的“页面”还可以是非易失性存储器的物理扇区。同样,已假设页面的最小“更新数据”是可通过编程程序个别写入主存储器的数据元素或者“数据的原子单元”,例如X位的字。然而,这样的最小可写入数据元素还可以是页面可编程和扇区可擦除存储器中的页面。此外,如前所述,将非易失性缓存分为不同的扇区仅仅是一个为了确保非易失性缓存NVB持续具有能够写入更新数据的擦除区的实施例。这样的实施例对本领域技术人员来说是不具有限制性的,例如,本领域技术人员可以不将非易失性缓存分为不同的扇区并且当扇区满时,不将其转储。
本发明还可以有不同的应用。具体说,图1所示的存储器可以结合到用于触式或非接触式芯片卡或非接触式标签的芯片中。