数据写入方法以及存储控制器与流程

文档序号:14571677发布日期:2018-06-01 22:32阅读:156来源:国知局
本发明涉及一种数据写入方法,且尤其涉及一种适用于配置有可复写式非易失性存储器模块的存储装置的数据写入方法以及存储控制器。
背景技术
::一般来说,原子写入指令(Atomicwritecommand)可用来达到确保对应原子写入指令的写入数据可完整地被编程至存储装置的功效。然而,目前已知的执行原子写入指令的方法,针对突然断电事件的恢复操作,会需通过主机应用程序的支持、利用独特的指令识别码序列或是有电力备援方案的存储器,才可以达到原子写入指令的功效。如此一来,会造成大量的资源与时间的耗费,进而使工作效率降低。因此,如何耗费最低资源且有效率地执行原子写入指令,同时也可在面临突然断电事件时,相应地检查出写入数据的有效性,进而判断是否成功执行所述原子写入指令,是本领域人员研究的课题的一。技术实现要素:本发明提供一种数据写入方法以及存储控制器,可有效率地执行原子写入指令且记录对应原子写入指令的元数据,以在特殊事件发生后,判断对应原子写入指令的写入数据是否为有效或无效。本发明的一实施例提供一种数据写入方法,适用于配置有可复写式非易失性存储器模块的存储装置,其中所述可复写式非易失性存储器模块具有多个实体单元,并且所述多个实体单元的每一个实体单元具有多个实体子单元。所述方法包括根据第一写入指令写入第一写入数据至所述可复写式非易失性存储器模块中的第一实体子单元;在写入所述第一写入数据后,记录对应所述第一写入数据的第一元数据,并且写入所述第一元数据至所述可复写式非易失性存储器模块,其中所述第一元数据包括第一写入识别码、第一写入大小以及第一单元跨越标记,其中所述写入识别码仅为第一数值或第二数值,并且所述第一数值不同于所述第二数值;写入第二写入数据至所述可复写式非易失性存储器模块中的第二实体子单元;在写入所述第二写入数据后,记录对应所述第二写入数据的第二元数据,并且写入所述第二元数据至所述可复写式非易失性存储器模块,其中所述第二元数据包括第二写入识别码、第二写入大小以及第二单元跨越标记,其中若所述第二实体子单元与所述第一实体子单元紧邻并且所述第二写入数据根据不同于所述第一写入指令的第二写入指令被写入,设定所述第二元数据的所述第二写入识别码与所述第一元数据的所述第一写入识别码不同,其中若所述第二写入数据根据所述第一写入指令被写入,设定所述第二元数据的所述第二写入识别码相同于所述第一元数据的所述第一写入识别码;以及若特殊事件发生,根据所述第二写入数据与所述第二元数据来判断第二写入数据是否为有效或无效。本发明的一实施例提供用于控制配置有可复写式非易失性存储器模块的存储装置的一种存储控制器。所述存储控制器包括连接接口电路、存储器接口控制电路、处理器以及数据管理电路。连接接口电路用以电性连接至主机系统。存储器接口控制电路用以电性连接至所述可复写式非易失性存储器模块,其中所述可复写式非易失性存储器模块具有多个实体单元,并且所述多个实体单元的每一个实体单元具有多个实体子单元。处理器电性连接至所述连接接口电路及所述存储器接口控制电路。数据管理电路电性连接至所述处理器、所述连接接口电路及所述存储器接口控制电路。所述处理器根据第一写入指令指示所述存储器接口控制电路写入第一写入数据至所述可复写式非易失性存储器模块中的第一实体子单元。并且,在写入所述第一写入数据后,所述数据管理电路记录对应所述第一写入数据的第一元数据,并且所述处理器指示所述存储器接口控制电路写入所述第一元数据至所述可复写式非易失性存储器模块,其中所述第一元数据包括第一写入识别码、第一写入大小以及第一单元跨越标记,其中所述写入识别码仅为第一数值或第二数值,并且所述第一数值不同于所述第二数值。此外,所述处理器指示所述存储器接口控制电路写入第二写入数据至所述可复写式非易失性存储器模块中的第二实体子单元。并且,在写入所述第二写入数据后,所述数据管理电路记录对应所述第二写入数据的第二元数据,并且所述处理器指示所述存储器接口控制电路写入所述第二元数据至所述可复写式非易失性存储器模块,其中所述第二元数据包括第二写入识别码、第二写入大小以及第二单元跨越标记,其中若所述第二实体子单元与所述第一实体子单元紧邻并且所述第二写入数据根据不同于所述第一写入指令的第二写入指令被写入,所述数据管理电路设定所述第二元数据的所述第二写入识别码与所述第一元数据的所述第一写入识别码不同,其中若所述第二写入数据根据所述第一写入指令被写入,所述数据管理电路设定所述第二元数据的所述第二写入识别码相同于所述第一元数据的所述第一写入识别码。若特殊事件发生,所述处理器根据所述第二写入数据与所述第二元数据来判断第二写入数据是否为有效或无效。基于上述,本发明实施例所提供的数据写入方法以及存储控制器,可将写入数据写入至可复写式非易失性存储器模块后,写入对应所述写入数据的具有特定设定方式的元数据,以在特殊事件发生后,根据所述写入数据与所述元数据来判断第二写入数据是否为有效或无效,以对应地执行数据恢复操作。为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作详细说明如下。附图说明图1是根据本发明的一实施例所示出的主机系统及存储装置的方块示意图。图2是根据本发明的一实施例所示出的元数据的数据结构的示意图。图3是根据本发明的一实施例所示出的数据写入方法的流程图。图4A为根据本发明的一实施例所示出的存储元数据的示意图。图4B为根据本发明的另一实施例所示出的存储元数据的示意图。图4C为根据本发明的另一实施例所示出的存储元数据的示意图。图4D为根据本发明的另一实施例所示出的存储元数据的示意图。图5A是根据本发明的第一实施例所示出的原子写入操作的示意图。图5B是根据本发明的第一实施例所示出的对应图5A的原子写入操作所示出的元数据的示意图。图6A是根据本发明的第二实施例所示出的原子写入操作的示意图。图6B是根据本发明的第二实施例所示出的对应图6A的原子写入操作所示出的元数据的示意图。图7A是根据本发明的第三实施例所示出的原子写入操作的示意图。图7B是根据本发明的第三实施例所示出的对应图7A的原子写入操作所示出的元数据的示意图。图8A是根据本发明的第四实施例所示出的原子写入操作的示意图。图8B是根据本发明的第四实施例所示出的对应图8A的原子写入操作所示出的元数据的示意图。附图标号说明:10:主机系统;20:存储装置;110、211:处理器;120:主机存储器;130:数据传输接口电路;210:存储控制器;212:数据传输管理电路;213:存储器接口控制电路;220:可复写式非易失性存储器模块;230:连接接口电路;300、400、400D、500、504、506、508、509(1)-509(N)、510(1)-510(N)、511(1)-511(N)、512(1)-512(N)、501(1)-501(4)、502(1)-502(3):元数据;300(1)、400(1)、400D(1)、W_ID:写入识别码;300(2)、400(2)、400D(2)、W_Size:写入大小;300(3)、400(3)、400D(3):写入识别码;UCF:单元跨越标记;400D(4):写入数据实体地址;S310、S320、S330、S340:数据写入方法的流程步骤;600、601、602、603、604、605、606、607、608、601(1)、601(2)、601(3)、601(4)、602(1)、602(2)、602(3)、602(4):写入数据;700、701、702、703、704、705、706、707、708、709、710、711、712:错误检查与校正码;800、801、802、803、804、805、806、807、808、809、810、811、812:错误检查与校正单元/错误检查与校正码字;900、901、1101(1)、1101(N)、1102(N)、1103(1):实体页面;1101、1102、1103:实体单元/实体区块;1001、1002、1102(N.1)、1102(N.2)、1102(N.3)、1102(N.4)、1103(1.1):存取单元/实体子单元;T1、T2、T3、T4:时间点。具体实施方式在本实施例中,存储装置包括可复写式非易失性存储器模块(rewritablenon-volatilememorymodule)与存储装置控制器(也称,存储控制器或存储控制电路)。此外,存储装置是与主机系统一起使用,以使主机系统可将数据写入至存储装置或从存储装置中读取数据。图1是根据本发明的一实施例所示出的主机系统及存储装置的方块示意图。请参照图1,主机系统(HostSystem)10包括处理器(Processor)110、主机存储器(HostMemory)120及数据传输接口电路(DataTransferInterfaceCircuit)130。在本实施例中,数据传输接口电路130电性连接(也称,电性连接)至处理器110与主机存储器120。在另一实施例中,处理器110、主机存储器120与数据传输接口电路130的间利用系统总线(SystemBus)彼此电性连接。存储装置20包括存储控制器(StorageController)210、可复写式非易失性存储器模块(RewritableNon-VolatileMemoryModule)220及连接接口电路(ConnectionInterfaceCircuit)230。其中,存储控制器210包括处理器211、数据管理电路(DataTransferManagementCircuit)212与存储器接口控制电路(MemoryInterfaceControlCircuit)213。在本实施例中,主机系统10是通过数据传输接口电路130与存储装置20的连接接口电路230电性连接至存储装置20来进行数据的存取操作。例如,主机系统10可通过数据传输接口电路130将数据存储至存储装置20或从存储装置20中读取数据。在本实施例中,处理器110、主机存储器120及数据传输接口电路130可设置在主机系统10的主机板上。数据传输接口电路130的数目可以是一或多个。通过数据传输接口电路130,主机板可以通过有线或无线方式电性连接至存储装置20。存储装置20可例如是U盘、内存卡、固态硬盘(SolidStateDrive,SSD)或无线存储器存储装置。无线存储器存储装置可例如是近距离无线通信(NearFieldCommunication,NFC)存储器存储装置、无线保真(WiFi)存储器存储装置、蓝牙(Bluetooth)存储器存储装置或低功耗蓝牙存储器存储装置(例如,iBeacon)等以各式无线通信技术为基础的存储器存储装置。此外,主机板也可以通过系统总线电性连接至全球定位系统(GlobalPositioningSystem,GPS)模块、网络接口卡、无线传输装置、键盘、屏幕、喇叭等各式I/O装置。在本实施例中,数据传输接口电路130与连接接口电路230是相容于高速周边零件连接接口(PeripheralComponentInterconnectExpress,PCIExpress)标准的接口电路。并且,数据传输接口电路130与连接接口电路230的间是利用快速非易失性存储器接口标准(Non-VolatileMemoryexpress,NVMe)通信协定来进行数据的传输。然而,必须了解的是,本发明不限于此,数据传输接口电路130与连接接口电路230也可以是符合并列先进附件(ParallelAdvancedTechnologyAttachment,PATA)标准、电气和电子工程师协会(InstituteofElectricalandElectronicEngineers,IEEE)1394标准、序列先进附件(SerialAdvancedTechnologyAttachment,SATA)标准、通用串行总线(UniversalSerialBus,USB)标准、SD接口标准、超高速一代(UltraHighSpeed-I,UHS-I)接口标准、超高速二代(UltraHighSpeed-II,UHS-II)接口标准、记忆棒(MemoryStick,MS)接口标准、多芯片封装(Multi-ChipPackage)接口标准、多媒体存储卡(MultiMediaCard,MMC)接口标准、eMMC接口标准、通用闪存存储器(UniversalFlashStorage,UFS)接口标准、eMCP接口标准、CF接口标准、整合式驱动电子接口(IntegratedDeviceElectronics,IDE)标准或其他适合的标准。此外,在另一实施例中,连接接口电路230可与存储控制器210封装在一个芯片中,或者连接接口电路230是布设于一包含存储控制器210的芯片外。在本实施例中,主机存储器120用以暂存处理器110所执行的指令或数据。例如,在本范例实施例中,主机存储器120可以是动态随机存取存储器(DynamicRandomAccessMemory,DRAM)、静态随机存取存储器(StaticRandomAccessMemory,SRAM)等。然而,必须了解的是,本发明不限于此,主机存储器120也可以是其他适合的存储器。存储控制器210用以执行以硬件或软件实作的多个逻辑门或控制指令并且根据主机系统10的指令在可复写式非易失性存储器模块220中进行数据的写入、读取与抹除等运作。更详细来说,存储控制器210中的处理器211为具备运算能力的硬件,其用以控制存储控制器210的整体运作。具体来说,处理器211具有多个控制指令,并且在存储装置20运作时,此些控制指令会被执行以进行数据的写入、读取与抹除等运作。值得一提的是,在本实施例中,处理器110与处理器211例如是中央处理单元(CentralProcessingUnit,CPU)、微处理器(micro-processor)、或是其他可编程的处理单元(Microprocessor)、数字信号处理器(DigitalSignalProcessor,DSP)、可编程控制器、特殊应用集成电路(ApplicationSpecificIntegratedCircuits,ASIC)、可编程逻辑装置(ProgrammableLogicDevice,PLD)或其他类似电路元件,本发明并不限于此。在一实施例中,存储控制器210还具有只读存储器(未示出)及随机存取存储器(未示出)。特别是,此只读存储器具有开机码(bootcode),并且当存储控制器210被致能时,处理器211会先执行此开机码来将存储于可复写式非易失性存储器模块220中的控制指令载入至存储控制器210的随机存取存储器中。之后,处理器211会运转此些控制指令以进行数据的写入、读取与抹除等运作。在另一实施例中,处理器211的控制指令也可以程序码型式存储于可复写式非易失性存储器模块220的特定区域,例如,可复写式非易失性存储器模块220中专用于存放系统数据的实体存储单元中。在本实施例中,如上所述,存储控制器210还包括数据管理电路212与存储器接口控制电路213。应注意的是,存储控制器220各部件所执行的操作也可视为存储控制器220所执行的操作。其中,数据管理电路212电性连接至处理器211、存储器接口控制电路213与连接接口电路230。数据管理电路212用以接受处理器211的指示来进行数据的传输。例如,通过连接接口电路230从主机系统10(如,主机存储器120)读取数据,并且将所读取的数据通过存储器接口控制电路213写入至可复写式非易失性存储器模块220中(如,根据来自主机系统10的写入指令来进行写入操作)。又例如,通过存储器接口控制电路213从可复写式非易失性存储器模块220读取数据,并且将所读取的数据通过连接接口电路230写入至主机系统10(如,主机存储器120)中(如,根据来自主机系统10的读取指令来进行读取操作)。此外,在本实施例中,写入操作可区分为对应普通写入指令(NormalWriteCommand)的普通写入操作(NormalWriteOperation)与对应原子写入指令(AtomicWriteCommand)的原子写入操作(AtomicWriteOperation)。在另一实施例中,数据管理电路212也可整合至处理器211中。以下会再配合多个附图与实施例来详细说明本发明中数据管理电路212的功能。存储器接口控制电路213用以接受处理器211的指示,配合数据管理电路212来进行对于可复写式非易失性存储器模块220的写入(也称,编程,Programming)操作、读取操作或抹除操作。举例来说,处理器211可执行写入指令序列(如,普通写入指令序列或原子写入指令序列),以指示存储器接口控制电路213将数据写入至可复写式非易失性存储器模块220中;处理器211可执行读取指令序列,以指示存储器接口控制电路213从可复写式非易失性存储器模块220中读取数据;处理器211可执行抹除指令序列,以指示存储器接口控制电路213对可复写式非易失性存储器模块220进行抹除操作。写入指令序列、读取指令序列及抹除指令序列可各别包括一或多个程序码或指令码并且用以指示对可复写式非易失性存储器模块220执行相对应的写入、读取及抹除等操作。在一实施例中,处理器211还可以下达其他类型的指令序列给存储器接口控制电路213,以对可复写式非易失性存储器模块220执行相对应的操作。此外,欲写入至可复写式非易失性存储器模块220的数据会通过存储器接口控制电路213转换为可复写式非易失性存储器模块220所能接受的格式。具体来说,若处理器211要存取可复写式非易失性存储器模块220,处理器211会传送对应的指令序列给存储器接口控制电路213以指示存储器接口控制电路213执行对应的操作。例如,这些指令序列可包括指示写入数据的写入指令序列、指示读取数据的读取指令序列、指示抹除数据的抹除指令序列、以及用以指示各种存储器操作(例如,改变读取电压准位或执行垃圾回收程序等等)的相对应的指令序列。这些指令序列可包括一或多个信号,或是在总线上的数据。这些信号或数据可包括指令码或程序码。例如,在读取指令序列中,会包括读取的辨识码、存储器地址等信息。可复写式非易失性存储器模块220是电性连接至存储控制器210(存储器接口控制电路213)并且用以存储主机系统10所写入的数据。可复写式非易失性存储器模块220可以是单阶存储单元(SingleLevelCell,SLC)NAND型闪存存储器模块(即,一个存储单元中可存储1个比特的闪存存储器模块)、多阶存储单元(MultiLevelCell,MLC)NAND型闪存存储器模块(即,一个存储单元中可存储2个比特的闪存存储器模块)、复数阶存储单元(TripleLevelCell,TLC)NAND型闪存存储器模块(即,一个存储单元中可存储3个比特的闪存存储器模块)、其他闪存存储器模块或其他具有相同特性的存储器模块。可复写式非易失性存储器模块220中的存储单元是以阵列的方式设置。在本实施例中,可复写式非易失性存储器模块220的存储单元会构成多个实体编程单元(也称,实体子单元),并且此些实体编程单元会构成多个实体区块(也称,实体抹除单元或实体单元)。具体来说,同一条字线(或同一个字线层)上的存储单元会组成一或多个实体编程单元。若每一个存储单元被用以存储2个以上的比特,则同一条字线(或同一个字线层)上的实体编程单元至少可被分类为一个下(lower)实体编程单元与一个上(upper)实体编程单元。在本实施例中,是以实体子单元作为写入(编程)数据的最小单位。实体单元为抹除的最小单位,即,每一实体单元含有最小数目的一并被抹除的存储单元。每一实体单元会具有多个实体子单元。实体子单元可为实体页面(page)或是实体扇(sector)。在本实施例中,实体子单元包括数据比特区与冗余(redundancy)比特区。数据比特区用以存储使用者数据,而冗余比特区用以存储系统数据。系统数据例如为错误更正码、错误检查码或元数据(MetaData)。以下会再说明关于元数据的细节。然而,本发明不限于此。例如,在另一实施例中,也可变化本实施例所述的数据传输方法,应用至以实体单元作为写入数据的最小存储单位的可复写式非易失性存储器模块220。在以下实施例中,是以一个实体区块作为一个实体单元的范例。然而,在另一实施例中,一个实体单元也可以是指任意数目的存储单元组成,视实务上的需求而定。此外,必须了解的是,当存储控制器211对可复写式非易失性存储器模块220中的存储单元(或实体单元)进行分组以执行对应的管理操作时,此些存储单元(或实体单元)是被逻辑地分组,而其实际位置并未更动。存储控制器210会配置多个逻辑单元给可复写式非易失性存储器模块220。主机系统10是通过所配置的逻辑单元来存取存储在多个实体单元中的使用者数据。在此,每一个逻辑单元可以是由一或多个逻辑地址组成。例如,逻辑单元可以是逻辑区块(logicalblock)、逻辑页面(logicalpage)或是逻辑扇区(logicalsector)。一个逻辑单元可以是映射至一或多个实体单元,其中实体单元可以是一或多个实体地址、一或多个实体扇、一或多个实体编程单元或者一或多个实体抹除单元。在本实施例中,逻辑单元为逻辑区块,并且逻辑子单元为逻辑页面。每一逻辑单元具有多个逻辑子单元。此外,存储控制器210会建立逻辑转实体地址映射表(logicaltophysicaladdressmappingtable)与实体转逻辑地址映射表(physicaltologicaladdressmappingtable),以记录配置给可复写式非易失性存储器模块220的逻辑单元(如,逻辑区块、逻辑页面或逻辑扇区)与实体单元(如,实体抹除单元、实体编程单元、实体扇区)的间的映射关系。换言之,存储控制器210可通过逻辑转实体地址映射表来查找一逻辑单元所映射的实体单元,并且存储控制器210可通过实体转逻辑地址映射表来查找一实体单元所映射的逻辑单元。然而,上述有关逻辑单元与实体单元映射的技术概念为本领域技术人员的惯用技术手段,不再赘述于此。在一实施例中,存储控制器210还包括缓冲存储器与电源管理电路。缓冲存储器是电性连接至处理器211并且用以暂存来自于主机系统10的数据与指令、来自于可复写式非易失性存储器模块220的数据或其他用以管理存储装置20的系统数据。电源管理电路是电性连接至处理器211并且用以控制存储装置20的电源。如上所述,在本实施例中,写入指令可区分为普通写入指令与原子写入指令。普通写入指令用以指示将数据写入至1个逻辑子单元。存储控制器210根据普通写入指令执行普通写入操作,将数据编程至1个实体子单元。接着,在本实施例中,反应于所述数据被编程至实体子单元,存储控制器210会存储对应所述普通写入指令的元数据,以记录所述数据是否已被编程至所述实体子单元。最后,存储控制器210会更新逻辑转实体地址映射表与实体转逻辑地址映射表,或是更新逻辑转实体地址子映射表与实体转逻辑地址子映射表,以记录用以存储所述数据的逻辑地址与实体地址的间的映射关系。如此一来,普通写入操作才算是被完成。图2是根据本发明的一实施例所示出的元数据的数据结构的示意图。请参照图2,在本实施例中,所述元数据300的数据结构包括三个栏位(Fields)300(1)、300(2)、300(3),其中栏位300(1)记录写入识别码(WriteID,W_ID);栏位300(2)记录写入大小(WriteSize,W_Size);栏位300(3)记录单元跨越标记(UnitCrossingFlag,UCF)。若实体单元为实体区块,所述单元跨越标记也可称为区块跨越标记(BlockCrossingFlag,BCF)。在本实施例中,对应普通写入指令的元数据所记录的内容相较于对应原子写入指令的元数据简单。具体来说,对应普通写入指令的元数据400的写入大小400(2)的数值固定被记录为“1”。此外,对应普通写入指令的元数据400的写入识别码400(1)或单元跨越标记400(2)的数值是预先记录的特定数值或特定字元。例如,在本实施例中,对应普通写入指令的元数据400的写入识别码400(1)或单元跨越标记400(2)皆记录“0”。又例如,在另一实施例中,对应普通写入指令的元数据的写入识别码或单元跨越标记可不记录任何数值。然而,在本实施例中,对应原子写入指令的元数据的每一栏位的数值会依据特定规则来被记录。以下会配合多个附图与实施例来详细说明本发明的对应原子写入指令的元数据的记录方式、对应的数据(原子)写入方法以及对应的数据恢复操作。图3是根据本发明的一实施例所示出的数据写入方法的流程图。请参照图3,在步骤S310中,处理器211根据第一写入指令指示存储器接口控制电路213写入第一写入数据至所述可复写式非易失性存储器模块中的第一实体子单元。具体来说,主机系统10会对存储装置20的存储控制器210下达多个读取指令或写入指令,以存取存储装置20中的数据。存储控制器210在接收(或读取)到主机系统10所下达的读取/写入指令后,会对存储装置20中的可复写式非易失性存储器模块220进行数据的读取/写入操作。举例来说,在一实施例中,假设主机系统10的处理器110会在主机存储器120中划分暂存数据区及指令阵列区(CommandQueueArea),并且存储控制器210还包括指令管理单元(Commandmanagementunit)。指令管理单元例如是具有指令缓冲器(CommandBuffer)、指令状态登录器(CommandStatusRegister)与指令获取电路(CommandFetchingCircuit)的电路元件。主机系统10会将所述读取指令或写入指令存储至主机存储器120中的命令阵列区,指令获取电路会从命令阵列区读取多个读取/写入指令,将所读取的指令存储至指令缓冲器。处理器211可根据固件(firmware)或是软件的预定规则来选择要处理的指令。接着,处理器211会执行被选择的指令,并且根据所选择的指令(如,快速非易失性存储器输入输出指令)指示存储器接口控制电路213对可复写式非易失性存储器模块220来进行对应的数据传输操作。在本实施例中,第一写入指令为一原子写入指令(也称,第一原子写入指令),并且所述原子写入指令指示(通过一原子写入操作)将第一写入数据写入至第一逻辑子单元中。当处理器211执行此第一写入指令时,处理器211会从可复写式非易失性存储器模块220的多个实体单元中选择一个可被写入的实体单元作为开放实体单元,并且将第一写入数据编程至所述开放实体单元的实体子单元。所述原子写入操作是表示所述原子写入指令所指示的欲存储的所有写入数据皆完成存储(写入/编程)时,整个原子写入操作才算是完成。换句话说,若是一原子写入指令指示写入2笔写入数据,但其中1笔写入数据不能存储(写入/编程)至可复写式非易失性存储器模块(或是其中1笔写入数据在编程的过程中失败),对应此原子写入指令的原子写入操作视为失败,之前已经存储(写入/编程)至可复写式非易失性存储器模块220的另1笔写入数据也被判断为(被标记为)无效。接着,处理器211会根据原子写入指令所指示的欲写入的逻辑子单元之前是否有存储有效数据来判断是否要重新执行一次对应此原子写入指令的原子写入操作。也就是说,对应一原子写入操作的所有写入数据应该要皆成功地被编程至可复写式非易失性存储器模块220,才算是成功地完成该原子写入操作。在步骤S320中,在写入所述第一写入数据后,数据管理电路212会记录对应所述第一写入数据的第一元数据,并且写入所述第一元数据至所述可复写式非易失性存储器模块,其中所述第一元数据包括第一写入识别码、第一写入大小以及第一单元跨越标记。首先,如同图2所示出,对应第一写入指令的元数据300具有栏位写入识别码300(1)、写入大小300(2)以及单元跨越标记300(3)。应注意的是,所述3个栏位的前后顺序并不限于图2的例子,顺序可以依据厂商设定而改变。反应于将第一写入数据写入至第一实体子单元,数据管理电路会设定(记录)对应所写入的第一写入数据的第一元数据。在完成设定第一元数据后,处理器211会指示存储器接口控制电路将第一元数据存储(写入)至可复写式非易失性存储器模块220。以下会通过图4A-4D来说明本发明存储元数据的方式。图4A为根据本发明的一实施例所示出的存储元数据的示意图。图4B为根据本发明的另一实施例所示出的存储元数据的示意图。图4C为根据本发明的另一实施例所示出的存储元数据的示意图。图4D为根据本发明的另一实施例所示出的存储元数据的示意图。首先,请参考图4A,于图4A的例子中,元数据500被存储在每一个错误检查与校正单元(也称为,错误检查与校正码字,ECCcodeword)中。举例来说,错误检查与校正单元(ECCunit)包括使用者数据600、元数据500与错误检查与校正码700。其中,错误检查与校正码700会用来检查与校正使用者数据600与元数据500。也就是说,除了使用者数据600,元数据500也受到错误检查与校正码700的保护。所述错误检查与校正码的产生方式不在本发明的范围,不赘述于此。应注意的是,使用者数据600也可视为上述的第一写入数据,并且元数据500也可视为对应第一写入数据的元数据。在此例子中,错误检查与校正单元可视为实体子单元。请参考图4B,于图4B的例子中,元数据504被存储在一个实体页面900中的最后一个错误检查与校正单元804。举例来说,错误检查与校正单元804包括使用者数据604、元数据504与错误检查与校正码704。在此例子中,实体页面可视为为实体子单元。请参考图4C,于图4C的例子中,元数据504被存储在每一个存取单元(AccessUnit)中。存取单元也可称为伪存取单元(PseudoAccessUnit)。举例来说,实体子单元901包括存取单元1001与存取单元1002。每一个存取单元具有2个错误检查与校正单元。元数据506存储在存取单元1001的错误检查与校正单元806中,并且元数据508存储在存取单元1002的错误检查与校正单元808中。在此例子中,存取单元可视为实体子单元。应注意的是,厂商可自行设定存取单元的大小或是存取单元所具有的错误检查与校正单元的数量。在上述的例子中,元数据被存储在用以存储其所对应的写入数据的实体子单元、实体单元、存取单元或错误检查与校正单元中。然而,元数据也可不被存储在用以存储所述元数据所对应的写入数据的实体子单元中。例如,处理器211也可选择一个特定的实体单元(如,实体区块)来存储全部的元数据。请参照图4D,假设实体单元1101专门用以存储元数据,实体区块1101具有N个实体页面1101(1)-1101(N),并且每一实体页面的每一个存取单元可存储N个元数据。例如,实体子单元1101(1)的存取单元809存储了元数据509(1)-509(N)。此外,每一个存取单元具有错误检查与校正码来保护所存储的元数据。例如,存取单元809的元数据509(1)-509(N)被错误检查与校正码709所保护。值得一提的是,在图4D的例子中,由于元数据并不是随着对应的写入数据一同被存储至实体子单元、实体单元、存取单元或错误检查与校正单元中,因此,图4D中的元数据还具有额外的栏位来记录该元数据所对应的写入数据的实体地址。例如,如图2所示出,元数据400D是表示在图4D的例子的元数据的数据结构。元数据400D除了会记录写入识别码400D(1)、写入大小400D(2)、单元跨越标记400D(3)的外,元数据400D还会记录写入数据实体地址400D(4)(“0001”即表示存储写入数据的实体地址的值)。如此一来,才可让处理器211来辨识目前存储元数据400D所对应的写入数据的实体子单元的地址。请再回到图3,在步骤S330中,处理器211指示存储器接口控制电路213写入第二写入数据至所述可复写式非易失性存储器模块220中的第二实体子单元;在写入所述第二写入数据后,数据管理电路212记录对应所述第二写入数据的第二元数据,并且处理器211指示存储器接口控制电路213写入所述第二元数据至所述可复写式非易失性存储器模块220,其中若所述第二实体子单元与所述第一实体子单元紧邻并且所述第二写入数据根据不同于所述第一写入指令的第二写入指令被写入,数据管理电路212设定所述第二元数据的所述第二写入识别码与所述第一元数据的所述第一写入识别码不同,其中若所述第二写入数据根据所述第一写入指令被写入,数据管理电路212设定所述第二元数据的所述第二写入识别码相同于所述第一元数据的所述第一写入识别码。具体来说,本发明的实施例所提供的对应原子写入指令的元数据的设定方式,本实施例仅使用1个比特大小的写入识别码来区分对应不同原子写入指令的元数据,以耗费资源最小的方式来判断对应原子写入操作的已写入的写入数据是否为有效或无效(或判断原子写入操作是否成功),进而有效率地判断是否要执行对应的数据恢复操作。以下会先通过第一实施例来说明对应原子写入指令的元数据的记录方法。[第一实施例]图5A是根据本发明的第一实施例所示出的原子写入操作的示意图。图5B是根据本发明的第一实施例所示出的对应图5A的原子写入操作所示出的元数据的示意图。请参照图5A,为了方便说明,假设每一实体区块具有N个实体页面,每一实体页面具有4个存取单元,每一存取单元(也称为实体子单元)具有1个错误检查与校正单元,并且写入数据(使用者数据)与对应该写入数据的元数据一同被存储至1个存取单元中(相似于图4C的例子,但每一存取单元仅具有一个错误检查与校正单元)。举例来说,随着时间的经过,处理器211根据第一原子写入指令指示存储器接口控制电路213分别将2笔写入数据601(1)、601(2)分别写入至实体区块(也称,实体单元)1102的最后一个实体页面1102(N)的实体子单元1102(N.1)、1102(N.2)。此外,处理器211根据第二原子写入指令指示存储器接口控制电路213分别将2笔写入数据602(1)、602(2)分别写入至实体区块1102的最后一个实体页面1102(N)的实体子单元1102(N.3)、1102(N.4)以及将1笔写入数据602(3)写入至实体区块1103的第一个实体页面1102(1)的实体子单元1103(1.1)(如,第二原子写入指令用以指示写入3笔写入数据)。依据实体地址的前后关系可定义出实体子单元的间的连接关系。例如,实体子单元1102(N.1)是紧邻于实体子单元1102(N.2)之前,并且实体子单元1102(N.3)是紧邻于实体子单元1102(N.2)之后。此外,实体子单元1102(N.4)是紧邻于实体子单元1103(1.1)之前。应注意的是,实体区块1102紧邻于实体区块1103之前。实体区块1102的实体区块识别码不同于实体区块1103的实体区块识别码。请参照图5B,为了方便说明,会将元数据所对应的写入数据的逻辑地址(如,存储所述写入数据的逻辑子单元)标记在元数据的前方栏位LA。例如,元数据501(1)前方的LA记录着“200”,其表示元数据501(1)的写入数据601(1)存储在逻辑地址(LogicalAddress,LA)200中。换句话说,在写入数据601(1)被写入至实体子单元1102(N.1)后,元数据501(1)被写入至实体子单元1102(N.1)。即,元数据501(1)对应实体子单元1102(N.1)或写入数据601(1)。以此类推,元数据501(2)对应实体子单元1102(N.2)或写入数据601(2);元数据502(1)对应实体子单元1102(N.3)或写入数据602(1);元数据502(2)对应实体子单元1102(N.4)或写入数据602(2);元数据502(3)对应实体子单元1103(1.1)或写入数据602(3)。此外,每个实体页面以及其具有的实体子单元中的元数据会如同图5B所示出,以按照实体子单元的排序先后来排列。例如,由于实体子单元1102(N.1)是紧邻于实体子单元1102(N.2)之前,并且实体子单元1102(N.3)是紧邻于实体子单元1102(N.2)之后。因此,对应实体子单元1102(N.1)或写入数据601(1)的元数据501(1)会排列在元数据501(2)之前,并且对应实体子单元1102(N.3)或写入数据602(1)的元数据502(1)会排列在元数据501(2)之后。关于元数据的写入识别码,在本实施例中,对应相同原子写入指令的元数据的写入识别码会相同。例如,由于第一原子写入指令用以指示将写入数据601(1)写入至逻辑子单元200,并且将写入数据601(2)写入至逻辑子单元201。因此,对应第一原子写入指令的元数据501(1)、501(2)的写入识别码W_ID会相同(如,元数据501(1)的写入识别码W_ID与元数据501(2)的写入识别码W_ID都为“0”)。此外,由于第二原子写入指令的写入数据602(1)/实体子单元1102(N.3)紧邻(最相邻)于第一原子写入指令的写入数据601(2)/实体子单元1102(N.2)。因此,数据管理电路212在设定对应第二原子写入指令的元数据502(1)、502(2)、502(3)的写入识别码时,会将元数据502(1)、502(2)、502(3)的写入识别码设定为不同于第一原子写入指令的元数据501(1)、501(2)的写入识别码。如此一来,可通过依序检查元数据的写入识别码的改变,来得知元数据所对应的原子写入指令是否改变。举例来说,假设从元数据501(1)依序检查至元数据502(2),由于紧邻的两个元数据501(2)与元数据502(1)的写入识别码不同,可得知紧邻的两个元数据501(2)与元数据502(1)分别属于不同的原子写入指令。另一方面,由于紧邻的两个元数据501(1)与元数据501(2)的写入识别码相同,可得知紧邻的两个元数据501(1)与元数据501(2)属于同一个原子写入指令。也就是说,在本实施例中,只需要利用例如是1个比特大小的空间来记录写入识别码,便可清楚地辨别元数据(或对应的写入数据)的分布状态(如,在排序于当前被检查的元数据之前(或后)的元数据所对应的写入数据,是否与被检查的元数据所对应的写入数据属于同一个写入指令)。所述写入识别码可包括“0”或是“1”(也可视为写入识别码仅记录第一数值与第二数值)。如此一来,可在利用最小资源耗费的情况下,达到辨识不同写入指令的元数据的作用。在可以辨别属于同一个原子写入指令的多个元数据的分布后,可以借此来检查所述原子写入指令所欲写入的写入数据是否皆被写入至可复写式非易失性存储器模块220,以判断根据所述原子写入指令所执行的原子写入操作是否成功。更详细来说,在可以辨别属于同一个原子写入指令的多个元数据的分布后,可以利用对应所述同一原子写入指令的多个元数据的数量来与所述多个元数据中的写入大小(W_Size)进行比较,以确定一个原子写入指令的所有写入数据是否皆写入至可复写式非易失性存储器模块220。然而,首先须说明的是写入大小的设定(记录/计算)方式。在本实施例中,数据管理电路212会根据对应的原子写入指令与一预设存取单元大小来计算元数据的写入大小(W_Size)。详细来说,假设第一原子写入指令用以指示将第一写入数据与第二写入数据分别写入至第一逻辑子单元与第二逻辑子单元。数据管理电路212会加总第一逻辑子单元与第二逻辑子单元的大小,并且将第一逻辑子单元与第二逻辑子单元的大小总和除以预设存取单元大小(如,实体子单元的大小),以获得一个商值。最后,将此商值进行无条件进位至整数位的数值作为对应第一原子写入指令的第一元数据的第一写入大小。换句话说,数据管理电路212会计算写入数据的大小总和,再计算需要几个存取单元来存储全部的写入数据。计算出的所需要的存取单元的数量就是写入大小,其中每个存储写入数据的存取单元也会存储一个元数据。举例来说,请参照图5A、5B。假设第一原子写入指令用以指示将第一写入数据601(1)与第二写入数据601(2)分别写入至第一逻辑子单元200与第二逻辑子单元201。每个存取单元(实体子单元)存储有一个元数据。每个逻辑子单元的大小为512比特组(bytes),并且预设存取单元大小(即,实体子单元的大小)也为512比特组。数据管理电路212会加总第一逻辑子单元200与第二逻辑子单元201的大小,即,1024比特组。接着,数据管理电路会计算出第一逻辑子单元与第二逻辑子单元的大小总和除以预设存取单元大小的商值为“2”。最后,如图5B所示,数据管理电路212会将对应第一原子写入指令的元数据501(1)、501(2)的写入大小(W_Size)设定为“2”。以此类推,对应第二原子指令的元数据502(1)、502(2)、502(3)的写入大小会被设定为“3”(如,(512*3)/512=3)。在本实施例中,如上述,第二原子写入指令的写入数据602(1)、602(2)、602(3)会分别写入至实体子单元1102(N.3)、1102(N.3)、1103(1.1),其中彼此紧邻的实体子单元1102(N.3)、1103(1.1)分别属于具有不同实体区块识别码的实体区块。可以视为第二原子写入指令的所有写入数据跨越了不同实体区块识别码的实体区块而被存储。在此情况下,数据管理电路212会将对应第二原子写入指令的元数据502(1)、502(2)、502(3)的单元跨越标记UCF(也称为,区块跨越标记BCF)设定为“1”(也称,第三数值)。相反的,第一原子写入指令的所有写入数据没有跨越了不同实体区块识别码的实体区块而被存储,因此数据管理电路212会将对应第一原子写入指令的元数据501(1)、501(2)的单元跨越标记UCF设定为“0”(也称,第四数值)。值得一提的是,从上述例子可以发现,对应相同原子写入指令的元数据彼此相同。说明完对应原子写入指令的元数据的设定方式后,请再回到图3,在步骤S340中,若特殊事件发生,处理器211根据所述第二写入数据与所述第二元数据来判断所述第二写入数据是否为有效或无效。具体来说,所述特殊事件例如是不正常断电事件(abnormalpower-offevent)或是突然断电事件(suddenpower-offevent)。例如,请参照图5A,假设突然事件发生在时间点T1,即,在写入数据602(3)与对应的元数据502(3)皆已被写入至实体子单元1103(1.1)后,于时间点T1,存储装置20忽然发生特殊事件(如,突然断电)。假设特殊事件为突然断电事件,在复电后,处理器211会判定之前的断电为突然断电事件。接着,处理器211会判断之前所写入的最后一笔写入数据是否为有效或无效,或判断最后执行的原子写入指令是否成功,以对应执行突然断电恢复(suddenpower-offrecovery,SPOR)操作(也称,数据恢复操作)。所述判断之前所写入的最后一笔写入数据是否为有效或无效,或判断最后执行的原子写入指令是否成功的运作如下,在本实施例中,处理器211会辨识开放实体区块(也称,开放实体单元)中存储有数据的多个实体子单元的最后一个实体子单元。接着,处理器211会辨识存储有数据的最后一个实体子单元的元数据。所述开放实体区块为存储有数据并且还可被写入数据的实体区块。所述开放实体区块为最后被写入数据的实体区块。接着,处理器211会去判断开放实体区块中是否存在其他的至少一实体子单元,其所存储的写入数据/元数据与所述最后一个实体子单元所存储的写入数据/元数据属于同一个原子写入指令。最后,处理器211会比较对应存储有数据的最后一个实体子单元的原子写入指令的所有元数据的数量与元数据中的写入大小的数值,以判断之前所写入的最后一笔写入数据是否为有效或无效(判断最后执行的原子写入指令是否成功)。若相等,则处理器211判定已写入的对应所述原子写入指令的写入数据是有效的,或是表示对应所述原子写入指令的原子写入操作是成功的。若不相等,则处理器211判定已写入的对应所述原子写入指令的写入数据是无效的,或是表示对应所述原子写入指令的原子写入操作是失败的。处理器211会标记所述写入数据为无效,或是标记所述原子写入指令执行失败。以下通过第二~第四实施例来说明本发明的数据恢复操作。[第二实施例]图6A是根据本发明的第二实施例所示出的原子写入操作的示意图。图6B是根据本发明的第二实施例所示出的对应图6A的原子写入操作所示出的元数据的示意图。请参照图6A、6B,在第二实施例中,第一原子写入指令、第二原子写入指令与硬件相同于第一实施例。第二实施例与第一实施例不同的地方在于,第二实施例的特殊事件发生在时间点T2。详细来说,在处理器211根据第二原子写入指令将写入数据602(1)与元数据502(1)写入至实体子单元1102(N.3)后,于时间点T2,存储装置20发生特殊事件。也就是说,原本要写入至实体子单元1102(N.4)的写入数据602(2)与元数据502(2)以及原本要写入至实体子单元1103(1.1)的写入数据602(3)与元数据502(3)皆没有被写入(以菱形格线表示)。在复电后,处理器211会判断对应第二原子写入指令的写入数据是否为有效或无效,进而判断如何对应地执行数据恢复操作。如上述,处理器211会辨识实体区块1102为开放实体区块。接着,处理器211会辨识到实体子单元1102(N.3)是开放实体区块1102中最后一个存储有数据的实体子单元。接着,处理器211会辨识对应实体子单元1102(N.3)的元数据502(1),并且获得元数据502(1)所记录的信息(如,写入识别码为“1”,写入大小为“3”,单元跨越标记为“1”)。接着,处理器211会根据元数据502(1)来判断是否有属于第二原子写入指令的元数据排序在元数据502(1)之前。例如,是否在实体子单元1102(N.3)之前有紧邻的实体子单元并且其所存储的元数据的写入识别码与元数据502(1)的写入识别码(如,“1”)相同。在此例子中,实体子单元1102(N.2)虽然紧邻于实体子单元1102(N.3)之前,但是其所对应的元数据501(2)的写入识别码(如,“0”)不同于元数据502(1)的写入识别码。因此,处理器211会判定对应第二原子写入指令的元数据只有元数据502(1),并且当前对应第二原子写入指令的元数据个数总合为1。接着,处理器211会比较对应第二原子写入指令的元数据个数总和与对应第二原子写入指令的元数据的写入大小是否相等,以判断对应第二原子写入指令的写入数据是否为有效或无效。接着,处理器211再根据第二原子写入指令所指示的欲写入的逻辑子单元之前是否有存储有效数据来判断是否要重新执行第二原子写入指令。在此例子中,由于对应第二原子写入指令的元数据个数总和与对应第二原子写入指令的元数据的写入大小不相等,处理器211会判定对应第二原子写入指令的写入数据602(1)为无效(也判定第二原子写入指令失败)。已写入的写入数据602(1)会被标记为无效。主机系统可询问第二原子指令是否执行成功,或是已写入的对应第二原子写入的写入数据是否有效。处理器211会将第二原子写入指令是否执行成功或已写入的对应第二原子写入的写入数据是否有效的上述信息回传给主机系统。主机系统在接收到第二原子写入指令是否执行成功或已写入的对应第二原子写入的写入数据是否有效的上述信息后,会指示处理器211来对应地执行数据恢复操作。具体来说,在对应地执行数据恢复操作的运作中,处理器211会根据上述被判定无效的写入数据所对应的逻辑子单元,来恢复所述逻辑子单元所存储的有效数据。更详细来说,在本实施例中,若对应第二原子写入指令的写入数据602(1)被判定为无效,处理器211会根据数据602(1)所存储的逻辑地址“300”来判断在存储写入数据602(1)之前,逻辑地址“300”是否已存储有效的旧数据。若在被存储写入数据602(1)之前,逻辑地址“300”已存储有效的旧数据,处理器211会以逻辑地址“300”之前所存储的有效的旧数据作为有效数据来更新逻辑转实体地址映射表或实体转逻辑地址映射表。举例来说,处理器211可将原有存储有效的旧数据的实体子单元映射至逻辑地址“300”。相对地,若在存储写入数据602(1)之前,逻辑地址“300”没有存储有效的旧数据,处理器211会重新执行第二原子写入指令。[第三实施例]图7A是根据本发明的第三实施例所示出的原子写入操作的示意图。图7B是根据本发明的第三实施例所示出的对应图7A的原子写入操作所示出的元数据的示意图。请参照图7A、7B,在第三实施例中,硬件相同于第一实施例。第三实施例与第一实施例不同的地方在于:在第三实施例中,第一原子写入指令用以指示将写入数据601(1)、601(2)、601(3)、601(4)分别存储至逻辑地址200、201、202、203。并且,在写入数据601(3)与对应的元数据501(3)被写入至实体子单元1102(N.3)后,特殊事件发生在时间点T3。在上述的例子中,元数据501(1)、501(2)、501(3)的写入识别码为“0”、写入大小为“4”以及单元跨越标记为“0”,并且开放实体区块为实体区块1102。接着,处理器211会辨识到实体子单元1102(N.3)是开放实体区块1102中最后一个存储有数据的实体子单元。接着,处理器211会辨识对应实体子单元1102(N.3)的元数据501(3),并且获得元数据501(3)所记录的信息。接着,处理器211会判断是否有属于第一原子写入指令的元数据排序在元数据501(3)之前。例如,是否在实体子单元1102(N.3)之前有紧邻的实体子单元并且其所存储的元数据的写入识别码与元数据501(3)的写入识别码(如,“0”)相同。在此例子中,实体子单元1102(N.1)、1102(N.2)紧邻于实体子单元1102(N.3)之前,并且其所对应的元数据501(1)、501(2)的写入识别码(如,“0”)相同于元数据501(3)的写入识别码。因此,处理器211会判定对应第一原子写入指令的元数据有元数据501(1)、501(2)、501(3),并且当前对应第一原子写入指令的元数据个数总合为3(共3个对应第一原子写入指令的元数据)。在此例子中,由于对应第一原子写入指令的元数据个数总和与对应第一原子写入指令的元数据的写入大小不相等,处理器211会判定写入数据601(1)、601(2)、601(3)为无效,并且将已写入的写入数据601(1)、601(2)、601(3)标记为无效。以下会通过第四实施例来阐述如何利用单元跨越标记(区块跨越标记)来判断写入数据是否为有效或无效的方法。[第四实施例]图8A是根据本发明的第四实施例所示出的原子写入操作的示意图。图8B是根据本发明的第四实施例所示出的对应图8A的原子写入操作所示出的元数据的示意图。请参照图8A、8B,在第四实施例中,硬体元件相同于第一实施例。第四实施例与第一实施例不同的地方在于:在第四实施例中,第一原子写入指令用以指示将写入数据602(1)、602(2)分别存储至逻辑地址200、201,并且第二原子写入指令用以指示将写入数据602(1)、602(2)、602(3)、602(4)分别存储至逻辑地址300、301、302、303。并且,在写入数据602(3)与对应的元数据502(3)被写入至实体子单元1103(1.1)后,特殊事件发生在时间点T4。在上述的例子中,元数据501(1)、501(2)的写入识别码为“0”、写入大小为“2”以及单元跨越标记为“0”,元数据502(1)、502(2)、502(3)的写入识别码为“1”、写入大小为“4”以及单元跨越标记为“1”,并且开放实体区块为实体区块1103。接着,处理器211会辨识到实体子单元1103(1.1)是开放实体区块1103中最后一个存储有数据的实体子单元。接着,处理器211会辨识对应实体子单元1103(1.1)的元数据502(3),并且获得元数据502(3)所记录的信息。接着,处理器211会判断在开放实体区块1103中是否有属于第一原子写入指令的元数据排序在元数据501(3)之前。例如,是否在实体子单元1103(1.1)之前有紧邻的实体子单元并且其所存储的元数据的写入识别码与元数据502(3)的写入识别码(如,“1”)相同。在开放实体区块中,实体子单元1102(N.3)之前不存在任何实体子单元。然而,在本实施例中,处理器211会根据元数据502(3)的单元跨越标记来判断是否要检查紧邻于开放实体区块之前的关闭实体区块。其中,紧邻于开放实体单元1103之前的所述关闭实体单元1102的实体单元识别码为所述开放实体单元的实体单元识别码减一,或是所述关闭实体单元1102的实体单元识别码会为开放实体单元1103的实体单元识别码之前一个编码。由于元数据502(3)的单元跨越标记(区块跨越标记)被记录为“1”。因此,处理器211会判定,紧邻于元数据502(3)所对应的实体子单元1103(1.1)所属的实体区块1103之前的实体区块中,可能会具有其他与实体子单元1103(1.1)一样是属于第二原子写入指令的实体子单元。接着,处理器211会在紧邻实体区块1103之前的实体区块1102中检查是否有任何(实体地址上)紧邻于实体子单元1103(1.1)的实体子单元,并且此实体子单元所对应的元数据的写入识别码与实体子单元1103(1.1)的元数据502(3)的写入识别码相同。在图8A、8B的例子中,处理器211会辨识到实体子单元1102(N.3)、1102(N.4)所对应的元数据502(1)、502(2)的写入识别码相同于元数据502(3)的写入识别码,并且实体子单元1102(N.3)、1102(N.4)紧邻于实体子单元1103(1.1)。因此,处理器211会判定对应第二原子写入指令的元数据共有元数据502(1)、502(2)、502(3),并且当前对应第二原子写入指令的元数据个数总合为3(共3个对应第一原子写入指令的元数据)。在此例子中,由于对应第二原子写入指令的元数据个数总和(如,“3”)与对应第二原子写入指令的元数据的写入大小(如,“4”)不相等,处理器211会判定对应第二原子写入指令的写入数据602(1)、602(2)、602(3)为无效(判定第二原子写入操作失败)。此外,已写入的写入数据602(1)、602(2)、602(3)会被标记为无效。值得一提的是,上述的多个实施例都是以单一通道(Channel)具有多个实体区块来做说明。然而,在其他实施例中,存储装置20也可具有多个通道,每个通道具有相同数量的实体区块,并且每个通道中的顺序相同的实体区块的实体区块识别码(也称,实体单元识别码)会彼此相同。举例来说,假设可复写式非易失性存储器模块220具有2个通道,分别为第一通道与第二通道。每个通道具有26个实体区块,其中每个通道的所述26个实体区块的实体区块识别码依序皆为“A”、“B”…“Y”、“Z”。在此例子中,存储器接口控制电路213会优先编程数据至第一通道的开放实体区块(假设此实体区块的实体区块识别码为“A”),接着,若实体区块“A”被写满且还有数据尚须被写入,存储器接口控制电路213会选择第二通道中具有相同的实体区块识别码的实体区块“A”来编程剩余的数据。也就是说,实体区块识别码相同的实体区块,会依照通道的顺序来区分出先后顺序,以进行数据的写入,或是判断实体地址的先后顺序。另个角度来说,假设第二通道的实体区块“Z”为开放实体区块,则在辨识实体区块“Z”的最后一个具有数据的实体子单元的元数据后,会接着检查第二通道与第一通道的实体区块“Z”中是否有其他实体子单/元数据也属于同个写入指令。此外,在此例子中,在第一通道与第二通道中,具有实体区块识别码“Y”(排序在区块识别码“X”之前且相邻)的实体区块会被视为紧邻于实体区块“Z”之前。例如,实体地址上的顺序会成为:第一通道的实体区块“Y”、第二通道的实体区块“Y”、第一通道的实体区块“Z”、第二通道的实体区块“Z”。综上所述,本发明实施例所提供的数据写入方法以及存储控制器,可将写入数据写入至可复写式非易失性存储器模块后,写入对应所述写入数据的具有特定设定方式的元数据,以在特殊事件发生后,根据所述写入数据与所述元数据来判断第二写入数据是否为有效或无效,以对应地执行数据恢复操作。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1