CN115357185A - 一种基于NAND Flash的星载固存高可靠数据存取方法 - Google Patents
一种基于NAND Flash的星载固存高可靠数据存取方法 Download PDFInfo
- Publication number
- CN115357185A CN115357185A CN202210910171.2A CN202210910171A CN115357185A CN 115357185 A CN115357185 A CN 115357185A CN 202210910171 A CN202210910171 A CN 202210910171A CN 115357185 A CN115357185 A CN 115357185A
- Authority
- CN
- China
- Prior art keywords
- data
- page
- lun
- channel
- stripe
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1044—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明设计一种基于NAND Flash的星载固存高可靠数据存取方法,通过静态坏块链表建立、LUN通道条带页构建、页分割及页内ECC编码、条带页数据RAID5写入、页编程错误处理、数据译码纠错、RAID5数据恢复、译码阈值判决的潜在坏LUN或坏块提前识别、关键信息异地存储备份与定期更新同步,完成NAND Flash芯片在读写操作过程中随机出现的静态坏块、动态坏块及坏LUN进行提前识别并隔离剔除,并实现不同颗粒维度下数据出错时的灵活可靠存取。
Description
技术领域
本发明涉及一种基于NAND Flash的星载固存高可靠数据存取方法,属于在轨数据智能处理领域。
背景技术
随着卫星遥感技术的高速发展,载荷原始数据速率高达几Gbps甚至几十Gbps,而星载计算及处理系统的发展始终伴随着存储技术的不断更新,存储作为连接载荷数据存放和用户模式交互的直接载体,在星载计算系统中发挥了越来越重要的角色。尤其是随着在轨智能处理、云计算、云存储技术的兴起,对存储的性能要求越来越高:不仅需要非常高的吞吐速率,还需要对存放数据进行高效、可靠的管理维护。可以作为存储介质的载体有多种,NAND Flash作为存储介质中性能卓越的佼佼者,其具有生产制造成本相对较低、可存储容量大、抗震抗磁性好、读写速率快、数据掉电非易失等优点,在星载宇航和民用消费领域都备受青睐。但是由于 NAND Flash芯片的工艺特点,其芯片在出厂时会存在一定数量的初始坏块,同时在使用过程中也会产生坏块,并且存储介质在使用时会产生个别比特位翻转现象。特别是在在星载宇航应用时恶劣的空间辐照环境下,单粒子翻转也会造成NANDFlash芯片存放数据出错。对于星载宇航应用的数据存储,探测获取的数据宝贵,其数据的正确性尤为重要,需要针对性采取可靠管理措施来确保数据的正确存放,即便在使用过程中产生了新坏块或因空间辐照、使用次数等因素发生的数据错误,也能通过一定的管理维护策略及纠错检错算法将存放数据进行正确性恢复,从而实现存储数据的可靠性和正确性。
传统的星载固存设计时,一般采取了简单的坏块管理和纠错检错算法来进行数据的管理维护;并且针对潜在坏块识别,通过与业务数据无关的定期自检操作来实现。但是针对芯片LUN级的数据出错情况,基本未采取相应处理措施,从而导致在芯片LUN失效时会造成存放数据的出错而无法恢复;要么采取多组芯片进行冗余备份,所花费的资源和成本较大。另外针对在高速数据写入时因页编程失败导致的数据错误,需要采取数据重写操作,会显著的降低实际写入NAND Flash中的有效数据速率,从而会因缓存资源不足或者数据处理不及时造成数据丢失现象。因此,需要一种占用资源少,能够适用不同层级、不同出错场景下的星载固存高可靠存取方法。
发明内容
本发明解决的技术问题是:针对目前现有技术中,传统数据存取技术容易出现的存储数据的可靠性和正确性较差的问题,提出了一种基于NAND Flash的星载固存高可靠数据存取方法。
本发明解决上述技术问题是通过如下技术方案予以实现的:
一种基于NAND Flash的星载固存高可靠数据存取方法,包括:
确定存储阵列中的所有静态坏块,建立静态坏块表;
对存储阵列进行条带页构建,获取所有LUN通道条带页并排序;
向各LUN通道条带页写入原始数据及编码校验信息,将原始数据分割处理后进行ECC编码,对各LUN通道条带页进行异或校验,获取异或校验和数据,同时对校验和数据进行ECC编码;
根据LUN通道条带页,对除静态坏块外的所有数据块,将编码后数据及异或校验和数据按照LUN通道条带页排序进行写入;
对写入失败或LUN通道条带页的编程状态字有误的块地址进行标记;
对标记的块地址进行数据回读恢复;
根据各LUN通道条带页的数据回读恢复结果进行统计,确定各LUN通道条带页的数据译码出错率,并确定动态坏块对应的出错率阈值,根据出错率阈值进行潜在坏块的提前识别;
将潜在坏块、动态坏块进行地址备份存储,用于下次存储识别。
静态坏块表的建立方法为:
对存储阵列的各数据块的第一页或第二页预备区的第一字节进行读取,确定初始坏块,对除初始坏块外的存储芯片进行擦除,对擦除失败的失效块进行记录,将擦除失效块、初始坏块均作为静态坏块,建立静态坏块表。
根据条带页构建获取LUN通道条带页的具体步骤为:
每个存储芯片由k个LUN通道组成,将n个存储阵列等效为k*n个LUN 通道,抽取各LUN通道中的一页,共k*n页组成一个条带页,进行条带化构建,各条带页均包括数据区、校验区、预留区,其中,各条带页的数据区、校验区组成RAID5,数据区由所在条带页的i个子页组成,校验区由所在条带页的1 个子页组成,预留区由条带页中的j个子页组成,i+1+j=k*n。
所述原始数据经分割处理后,分割为与LUN通道条带页数相同段数据,并进行ECC编码,根据LUN通道条带页进行异或校验,当原始数据不足1个条带页的情况采用固定数据进行填充补齐处理,其中:
将各LUN通道条带页中的前i页存放编码后数据,将各LUN通道条带页中的第i+1子页用于存放该条带的RAID5对应的编码后异或校验和数据。
进行编码后数据、异或校验和编码后数据写入的具体过程为:
对第一LUN通道条带页先写入数据,再对第二LUN通道条带页先写入数据,依此类推,直至所有数据区及校验区LUN通道条带页均完成数据写入。
数据回读过程中,对处于数据译码纠错能力范围内的LUN通道条带子页进行数据恢复,对超出数据回读纠错能力范围的LUN通道条带子页所在数据块标记为动态坏块;
其中,数据回读纠错能力范围根据最低纠错能力确定,为最低纠错能力的一倍至三倍。
数据回读恢复的具体步骤为:
依次读取各LUN通道条带页的数据并进行ECC译码,当任一LUN通道条带页的译码错误数据均在纠错能力范围内,则仅通过纠错算法进行页内数据的正确恢复,当任意LUN通道条带页的译码错误数据超出纠错能力范围时,通过条带页RAID5进行恢复处理;若条带页中任一子页数据错误超过纠错能力时,根据其他无错误或在纠错能力范围内的LUN通道条带页通过RAID5进行错误子页数据恢复,将恢复出来的正确数据输出并搬移至备用区LUN通道条带页页面,并更新地址映射表;若当前出错LUN通道条带页中出现两条或以上LUN 通道数据出错且无法恢复,则不进行恢复,标记为动态坏块。
所述出错率阈值包括页内纠错阈值、块内弱页数量阈值、LUN内弱块数量阈值,当再次进行数据回读恢复时,直接将潜在坏块排除,后续不进行写入操作。
所述动态坏块还包括动态弱块,对LUN通道条带页的数据进行译码后,数据译码出错率超过最低纠错能力的二倍但不大于最低纠错能力的三倍时,将该 LUN通道条带页定义为弱页,具体数据块定义为动态弱块,对动态弱块及动态坏块进行统一处理。
对写入失败或LUN通道条带页的编程状态字有误的动态坏块、超出数据回读纠错能力范围的动态坏块及LUN通道条带页中出现两条或以上LUN通道数据出错且无法恢复的动态坏块,对因空间辐照造成编程状态字有误的块地址进行滤除,并进行与操作处理,对处理后所有坏块进行标记并与静态坏块、潜在坏块、弱块进行地址存储。
本发明与现有技术相比的优点在于:
(1)本发明提供的一种基于NAND Flash的星载固存高可靠数据存取方法,采用统一处理架构,实现了芯片LUN级、LUN内block块级、RAID5 条带页间级、子页编码译码级的出错情况下数据可靠性存放;同时可在不同数据出错情况下实现闭环自恢复处理;
(2)本发明结合NAND Flash的特点,按照LUN为单位分为数据存放区、校验信息存放区、预备替换区,通过LUN通道级的冗余替换,相对于芯片级冗余替换,可大幅减小布局面积,提高存储空间利用率;
(3)本发明采用分层、分级的管理策略,通过页内编译码和LUN间条带页RAID5结合,对存放操作过程因新增坏块及比特位翻转、空间单粒子翻转造成的数据错误,均可正确恢复;
(4)本发明根据ECC纠错算法能力可灵活设置页内纠错阈值、块内弱页数量阈值、LUN内弱块数量阈值,在当次读操作过程中便可对潜在的坏块或坏LUN进行提前识别、隔离及替换,从而大大减小了用户后续数据读写操作时的出错概率;
(5)本发明通过芯片组间的LUN构建RAID5写入条带,针对编程出错的子页无需进行数据重写和流水线中断处理,可大幅简化处理流程,通过RAID5读操作可将页编程出错数据进行正确恢复。
附图说明
图1为发明提供的星载固存高可靠数据存取方法流程框图;
图2为发明提供的单片NAND Flash芯片的典型组织结构图;
图3为发明提供的NAND Flash存储阵列的条带页构建图;
图4为发明提供的NAND Flash页内ECC及RAID5数据写入流程图;
图5为发明提供的固存单板硬件组成框图;
图6为发明提供的页数据写入方式对比图;
图7为发明提供的条带页内流水线操作的页编程写时序图;
图8为发明提供的页编程过程出错的处理流程图对比图;
图9为发明提供的数据读操作时页内纠错及页间RAID5恢复流程图;
图10为发明提供的潜在坏块及坏LUN提前识别流程图;
具体实施方式
一种基于NAND Flash的星载固存高可靠数据存取方法,通过静态坏块链表建立、LUN通道条带页构建、页分割及页内ECC编码、条带页数据 RAID5写入、页编程错误处理、数据译码纠错、RAID5数据恢复、译码阈值判决的潜在坏LUN或坏块提前识别、关键信息异地存储备份与定期更新同步,完成NAND Flash芯片在读写操作过程中随机出现的静态坏块、动态坏块及坏LUN进行提前识别并隔离剔除,并实现不同颗粒维度下数据出错时的灵活可靠存取,具体步骤如下:
确定存储阵列中的所有静态坏块,建立静态坏块表;
对存储阵列进行条带页构建,获取所有LUN通道条带页并排序;
向各LUN通道条带页写入原始数据,将原始数据分割处理后进行ECC编码,对各LUN通道条带页进行异或校验,获取异或校验和数据;
根据LUN通道条带页,对除静态坏块外的所有数据块,将编码后数据及异或校验和数据按照LUN通道条带页排序进行写入;
对写入失败或LUN通道条带页的编程状态字有误的块地址进行标记;
对标记的块地址进行数据回读恢复;
根据各LUN通道条带页的数据回读恢复结果进行统计,确定各LUN通道条带页的数据译码出错率,并确定动态坏块对应的出错率阈值,根据出错率阈值进行潜在坏块的提前识别;
将潜在坏块、动态坏块进行地址备份存储,用于下次存储识别。
静态坏块表的建立方法为:
对存储阵列的各数据块的第一页或第二页预备区的第一字节进行读取,确定初始坏块,对初始坏块的存储芯片进行擦除,对擦除失败的擦除失效块进行记录,将擦除失效块、初始坏块均作为静态坏块,建立静态坏块表;
根据条带页构建获取LUN通道条带页的具体步骤为:
将n个存储阵列等效为k*n个LUN通道,进行条带化构建,抽取各LUN 通道中的一页,共k页组成一个条带页,各条带页均包括数据区、校验区、预留区,其中,各条带页的数据区、校验区组成RAID5,数据区由所在条带页的 i个子页组成,校验区由所在条带页的子页组成,预留区由条带页中的j个子页组成,i+1+j=k*n;
原始数据经分割处理后,分割为与LUN通道条带页数相同段数据,并进行 ECC编码,根据LUN通道条带页进行异或校验,其中:
将各LUN通道条带页中的前i页存放编码后数据,将各LUN通道条带页中的第i+1子页用于存放该条带的RAID5对应的异或校验和数据;
进行编码后数据、异或校验和数据写入的具体过程为:
对第一LUN通道条带页先写入数据,再对第二LUN通道条带页先写入数据,依此类推,直至所有LUN通道条带页均完成数据写入;
数据回读过程中,对处于数据回读纠错能力内的LUN通道条带页进行数据恢复,对超出数据回读纠错能力的LUN通道条带页所在数据块标记为动态坏块;
数据回读恢复的具体步骤为:
依次读取各LUN通道条带页的数据并进行ECC译码,当任一LUN通道条带页的译码错误数据均在纠错能力范围内,则仅通过纠错算法进行页内数据的正确恢复,当任意LUN通道条带页的译码错误数据超出纠错能力范围时,通过纠错能力范围;
根据其他无错误的LUN通道条带页的RAID5的正确数据输出至备用区 LUN通道条带页页面,若当前出错LUN通道条带页中出现两条或以上LUN通道数据出错且无法恢复,则不进行恢复,标记为动态坏块,否则利用备用区LUN 通道条带页的正确数据对当前出错LUN通道条带页数据进行恢复;
出错率阈值包括页内纠错阈值、块内弱页数量阈值、LUN内弱块数量阈值,当再次进行数据回读恢复时,直接将潜在坏块排除,后续不进行写入操作;
动态坏块还包括动态弱块,对LUN通道条带页的数据进行译码后,数据译码出错率超过最低纠错能力的二倍但不大于最低纠错能力的三倍时,将该LUN 通道条带页定义为弱页,具体数据块定义为动态弱块,对动态弱块及动态坏块进行统一处理;
对写入失败或LUN通道条带页的编程状态字有误的动态坏块、超出数据回读纠错能力范围的动态坏块及LUN通道条带页中出现两条或以上LUN通道数据出错且无法恢复的动态坏块,对因空间辐照造成编程状态字有误的块地址进行滤除,并进行与操作处理,对处理后所有坏块进行标记并与静态坏块、潜在坏块、弱块进行地址存储。
下面根据说明书附图及优选实施例进行进一步说明:
星载固存设计时,一般采用多片NAND Flash芯片组成存储阵列来实现容量和速率带宽上的提升,其典型硬件框图如图5所示,主要由FPGA 芯片或其它控制器、外部非易失性MRAM/NOR Flash、RAM缓存(SRAM、 DRAM、DDR等)、NAND Flash存储阵列及输入输出接口组成。若单板使用的NAND Flash芯片个数为n(n为自然数),每个芯片中的LUN个数为k(k为自然数),于是单板的总LUN个数为k*n。
基于NAND Flash的星载固存高可靠数据存取方法流程具体操作如下:
(1)由于NAND Flash出厂时的无效块事先被厂家进行了标记,可通过读取存储阵列的每块第一页或第二页预备区的第一字节,从而获取到初始坏块表,记为Tinit;将除初始坏块外的存储芯片块擦除,对擦除失效块进行统计,记为Ter,于是存储阵列的静态坏块Tst=Tinit+Ter;
(2)对全部n片NAND Flash芯片,每个芯片由k个LUN组成。针对 NAND Flash芯片的组织结构特点,将k*n个LUN进行RAID条带化构建,如图3所示。每个LUN的相应一页共k*n页组成一个条带页,其中每个条带页分为数据区、校验区、预留区共3部分,条带页中的数据区和校验区组成RAID5。数据区由条带页中的i个子页组成,校验区由条带页中的1个子页组成,预留区由条带页中的j个子页组成,按照条带页组织结构特点,i+1+j=k*n。由于芯片LUN失效的概率极小,为了尽可能的充分利用所有NAND Flash的存储空间,一般取j为1,j的值也可根据实际情况进行灵活调整;
(3)每个厂家NAND Flash芯片均要求具备一定的ECC纠错能力,定义芯片最低需求的ECC纠错能力为Emin,以256Gbit的美光公司SLC芯片为例,手册要求的最低ECC纠错能力需求为每540字节纠正8bit数据错误,即Emin=8/(540*8))。常用的ECC算法有汉明码、RS码、BCH码、LDPC码等,不同算法的复杂度相差较大;同样的算法,纠错能力越强,所消耗的资源越多。设计的纠错能力均要求大于Emin,结合实际资源,一般设计的纠错能力Ed按照 3倍的Emin进行考虑(Ed可按照实际情况进行灵活调整)。
由于NAND Flash读写的基本单位是页,为了提高NAND Flash芯片阵列的写入速率,将写入的原始数据进行缓存后,每次从请求缓存队列中发送一个请求,并将该请求分割为若干个以页为单位的子请求,先将这些子请求页数据进行ECC算法编码,然后按照如图3所示构建LUN通道条带页,最后分别进行每个条带子页异或校验和数据的生成,即P=D1xor D2 xor D3 xor…xor Di。将每个条带中的前i页存放用户数据及ECC编码,每个条带中的第(i+1)子页用于存放RAID5条带对应的异或和(一般采用异或或者奇偶校验,本专利采用异或方式)。页分割及页内ECC编码流程图参如图4所示;
(4)基于上述步骤(2)构建的条带页,对除静态坏块Tst外的全部存储空间,将图4中的用户页数据及编码信息和条带页校验信息及编码信息按照图 3中的条带页的顺序,先对条带页0写入数据,即先对LUN1的第一页Page10页编程写入,再对LUN2的第一页Page20页编程写入,…,然后对LUN(i)的第一页Page(i)0页编程写入,将前(i)页的数据进行异或得到该条带页的校验信息和编码信息,最后将该校验及编码信息写入到LUN(i+1)的第一页Page(i+1)0;至此第一个条带页数据写入完成。其它条带页数据写入按照条带页0的操作顺序依次类推。本专利与其他方法的页数据写入方式对比参如图6所示;
(5)虽然NAND Flash芯片的读写时钟周期非常快,但是在读、写、擦除操作过程中均需要一定的等待时间。若每次在等待当次操作完成之后再执行下次操作,较长的等待时间会大幅影响平均速率。通常NAND Flash芯片的写入操作主要包括三步:
加载操作,主要完成编程命令、地址及数据的载入工作;
自动编程操作,即由Flash芯片主动完成将载入到页数据寄存器的数据写入到内部存储单元(Cell)的编程操作;
检测操作,自动编程结束后,检测写入的数据是否编程正确,若正确,可以进行后续的操作;若不正确,需要采取其他处理措施;
根据存储芯片的页编程工作原理,其自动编程由芯片内部自动完成,此时芯片不能响应新的命令,同时无无需外部干预。通过流水线技术,充分利用芯片内部编程时间,对其它芯片的进行加载操作。由于每个芯片的LUN作为一个独立的逻辑操作单元,其分别可以独立的响应指令和操作,条带页内数据写入操作的流水线时序图参如图7所示。当(i+1)个LUN流水线运转起来后,在任一时间段内,总有若干个小操作在同时执行,从而实现了时间片上的数据复用,大大的提升了数据的写入速率。因不同规格的NAND Flash芯片差异性,其内部编程时间时间不一样,可以根据不同的内部编程时间设置不同的流水线操作级数。
按照图7所示,连续加载完毕流水线的(i+1)个页数据后,一般最初的一个LUN内数据Flash内部自动编程应该已经结束,可通过对其LUN的R/B信号进行检测进行确认。本专利中,将连续的(i)页用户数据及ECC编码和前 (i)页用户数据的异或和及EEC编码数据分布式写入到LUN1~LUN(i+1)中,因此在某个页编程失败时,仅需对该页所在的块地址进行标记便可Twr。对于该页编程失败的错误数据,可通过后面的步骤(6)数据纠错检错及步骤(7)RAID5 读数据来进行正确恢复。
其他处理方法在数据写入时,先将数据连续写入到某个LUN1对应的全部块中,然后将其他数据顺序写入到LUN2中,依次类推。当出现页编程失败时,一般采用将后备替代的Flash芯片组进行重新加载命令、地址,同时将缓存中相应LUN的数据重写加载到存储区,待数据页编程成功后,恢复到正常的流水线操作序列中。由于页数据的重写,会导致实际有效写入固存中的速率显著降低;同时由于流水线的中断及恢复,也会造成控制逻辑较为复杂。针对星载宇航应用,若出现空间单粒子效应,在页编程完读取状态字发生了单粒翻转,也会造成误重写操作情况。尤其是针对某个LUN内出现连续的坏块时,所需的缓存空间非常大,消耗的资源巨大。
本专利由于在写的过程中无需对页编程失败的数据进行备用区的重新写入,从而大大简化了页编程失败时的复杂处理流程,也不会因为数据的重写导致缓存空间溢出或者写入固存中的有效数据速率明显降低。按照上文所述,由于采取的是通过不同LUN之间的条带页内构成RAID5,这样即便是某个LUN内的一个block全部失效造成块内所有页编程失败,也可以通过RAID5进行数据的正确恢复。本专利所用方法无需对编程失败的页数据进行重写操作处理,从而写入流水线操作便不会中断,于是写入Flash的数据速率可以保持在较高水平。本专利页编程出错的处理流程参如图8所示;
(6)在回读数据时,根据选择的算法纠错能力,可以对在设计的纠错能力 Ed内的错误情况进行纠正恢复,对超出算法能力的情况无法纠正。在使用上,将超出纠错能力的数据页所在块标记为坏块。受限于纠错算法能力,ECC算法只能对其能力范围的数据出错时进行纠正。对于超出ECC纠错能力情况,可通过步骤(7)RAID5数据恢复来获取正确的数据;
(7)根据上文描述,通过LUN通道条带化构建、页分割及RAID5条带数据页写入,每个条带中前(i)个子页中写入的数据为用户数据和编码信息(将用户数据和编码信息统称为数据信息),将前(i)列每页中对应字节进行异或计算得到第(i+1)子页的校验信息P,并对校验信息P进行ECC编码。于是存储阵列条带中,不仅写入了数据信息,还写入校验位信息。每个LUN对应的页构成了RAID5条带页,条带页中数据存放示意图参见表1所示;
表1一个条带页数据存放示意
对NAND Flash存放数据的读取过程如下:
根据回放指令,依次读取每个页条带中存放的数据;
对读取的每个LUN中的页数据进行ECC译码,当一页中所有字节的译码错误均在Ed纠错能力范围内,则仅通过纠错算法便可进行页内数据的正确恢复,当条带页中某一页数据出错超过Ed纠错能力时,则当前页区出错无法通过纠错算法本身进行纠正,进一步采取RAID5进行数据恢复;
针对页面数据出错超出ECC算法纠错能力范围时,便通过RAID5进行页面数据的正确性恢复。根据条带页内其他正确的页面数据恢复出错误页面数据,将恢复正确的数据进行输出,同时将正确的数据搬移至新的备用区页面,然后更新地址映射表,错误恢复原理见下表2所示;若条带页内有超过两页数据译码出错(此情况下的出错概率极其低),则超过了RAID5的数据恢复能力,数据不进行恢复操作。数据回读的纠错及RAID5恢复流程图如图9所示;
表2一个条带页数据错误示意
子页3数据恢复原理:待恢复的数据=校验数据(i+1)xor正确数据1xor 正确数据2xor正确数据4xor……xor正确数据(i-1)xor正确数据(i);
(8)潜在坏LUN或坏块提前识别
潜在坏LUN或坏块提前识别是重要的用途,每个芯片厂家在多个LUN进行叠层集成封装及工程应用硬件布局布线设计时,不同LUN之间的特性会存在一些细微差异性,从而导致焊接在实物单板上NAND Flash芯片的部分LUN或 Block在出厂时没有被标记为坏块,但是随着宇航应用时高低温变化或热真空环境下多次擦写操作,呈现出弱LUN或者弱块现象。弱LUN介于坏LUN和好 LUN之间,随着使用次数频繁或环境恶劣加剧,趋于向坏LUN变化;弱块同样介于坏块和好块之间,趋于向坏块方向发展。若对弱LUN及弱块不进行提前识别和剔除,会导致存放的数据严重出错,并且会影响读写操作时的有效吞吐率。
由于设计的纠错算法均大于存储芯片所需的最低纠错能力范围,对数据回读过程中LUN通道条带页在ECC算法纠错能力范围内的译码情况进行统计,将条带页内数据译码出错率Ec按照不同的阈值进行判决,根据设置的页内纠错阈值、块内弱页数量阈值、LUN内弱块数量阈值,在当次回读操作时,便可将潜在的坏块或坏LUN进行提前识别,并标记为Tweak,后续不再进行写入操作;
对弱块的定义如下:NAND Flash芯片中某页page数据译码出错率Ec超过芯片所需的2倍最低纠错能力但又在所实际设计的纠错算法能力范围之内 (即2Emin<Ec≤Ed),则定义该页为弱页;当某个块block的弱页数量a超过一定的门限阈值(定义门限阈值为b,该门限阈值可以根据需要进行调整),即a≥b 时,便可将所在块标记为“弱块”,在后续使用时将该块列入到坏块表中,后续不再进行写入操作。同样的,当一个LUN中累积出现了多个“弱块”(弱块数量记为f)的情况,当该LUN内的弱块总数量f超过的门限阈值(定义门限阈值为g,该门限阈值可以根据需要情况进行设定),即f≥g时,便可将当前LUN 标记为“弱LUN”,后续对该LUN不再进行写入操作,采用如图4中所示的预留区LUN进行替换。当全部n片NANDFlash的k*n个LUN中,若出现了一个弱LUN,通过在预留的j个LUN中选取一个作为替换,于是所使用的全部好 LUN个数仍保持i个不变,从而不会因为弱LUN造成可用存储容量的减小和读写速率的下降。潜在坏块及坏LUN提前识别流程图如图10所示;
(9)关键信息异地存储备份与定期更新同步
将步骤(5)中页编程失败所在的块地址Twr与标记的超ECC纠错能力Trd地址进行取“与操作”处理,可以将因空间辐照造成页编程状态字误判的块地址进行滤除,将Twr与Trd取“与操作”后的坏块记为动态坏块,记为Tdyn。将静态坏块Tst、动态坏块Tdyn、潜在坏块或坏LUN所在的弱块Tweak以及地址映射表信息不仅存放在NAND Flash自身的存储阵列中,还在FPGA外挂的非易失性 MRAM或NOR FLASH等外部器件中进行异地备份存放。为了确保该信息存放的正确性和可靠性,采取经过EDAC及存放三份取二冗余的方式进行。同时为了星载使用的高可靠性,固存在每次操作空闲时,将固存的相关信息定期更新存放在外部的MRAM或者NORFLASH中,这样即便存储阵列中的信息出错,也能通过外部的非易失性存储进行信息的正确恢复。
上述操作流程中,步骤(2)~(5)为NAND Flash的记录操作;步骤(6) ~(8)为NANDFlash的回放操作。本发明基于独立的LUN通道构建RAID5 数据写入,将连续的i页数据经过ECC编码后分布式写入到条带页中,将前i 页数据进行异或操作得到该条带页数据的校验信息,将校验信息经过ECC编码后写入到条带中。将ECC纠错与RAID5进行联合,并且按照自定义的阈值门限,可实现用户数据的可靠存放,还可将潜在的坏块及坏LUN进行提前识别和剔除。本发明采用统一处理架构,实现了星载固存存储芯片LUN级、LUN 内块级、RAID5条带页间级、子页编码译码级的出错情况下数据可靠性存放管理;同时可在不同数据出错情况下实现闭环自恢复处理。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
本发明说明书中未作详细描述的内容属于本领域技术人员的公知技术。
Claims (10)
1.一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于包括:
确定存储阵列中的所有静态坏块,建立静态坏块表;
对存储阵列进行条带页构建,获取所有LUN通道条带页并排序;
向各LUN通道条带页写入原始数据及编码校验信息,将原始数据分割处理后进行ECC编码,对各LUN通道条带页进行异或校验,获取异或校验和数据,同时对校验和数据进行ECC编码;
根据LUN通道条带页,对除静态坏块外的所有数据块,将编码后数据及异或校验和数据按照LUN通道条带页排序进行写入;
对写入失败或LUN通道条带页的编程状态字有误的块地址进行标记;
对标记的块地址进行数据回读恢复;
根据各LUN通道条带页的数据回读恢复结果进行统计,确定各LUN通道条带页的数据译码出错率,并确定动态坏块对应的出错率阈值,根据出错率阈值进行潜在坏块的提前识别;
将潜在坏块、动态坏块进行地址备份存储,用于下次存储识别。
2.根据权利要求1所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
静态坏块表的建立方法为:
对存储阵列的各数据块的第一页或第二页预备区的第一字节进行读取,确定初始坏块,对除初始坏块外的存储芯片进行擦除,对擦除失败的失效块进行记录,将擦除失效块、初始坏块均作为静态坏块,建立静态坏块表。
3.根据权利要求1所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
根据条带页构建获取LUN通道条带页的具体步骤为:
每个存储芯片由k个LUN通道组成,将n个存储阵列等效为k*n个LUN通道,抽取各LUN通道中的一页,共k*n页组成一个条带页,进行条带化构建,各条带页均包括数据区、校验区、预留区,其中,各条带页的数据区、校验区组成RAID5,数据区由所在条带页的i个子页组成,校验区由所在条带页的1个子页组成,预留区由条带页中的j个子页组成,i+1+j=k*n。
4.根据权利要求3所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
所述原始数据经分割处理后,分割为与LUN通道条带页数相同段数据,并进行ECC编码,根据LUN通道条带页进行异或校验,当原始数据不足1个条带页的情况采用固定数据进行填充补齐处理,其中:
将各LUN通道条带页中的前i页存放编码后数据,将各LUN通道条带页中的第i+1子页用于存放该条带的RAID5对应的编码后异或校验和数据。
5.根据权利要求4所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
进行编码后数据、异或校验和编码后数据写入的具体过程为:
对第一LUN通道条带页先写入数据,再对第二LUN通道条带页先写入数据,依此类推,直至所有数据区及校验区LUN通道条带页均完成数据写入。
6.根据权利要求5所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
数据回读过程中,对处于数据译码纠错能力范围内的LUN通道条带子页进行数据恢复,对超出数据回读纠错能力范围的LUN通道条带子页所在数据块标记为动态坏块;
其中,数据回读纠错能力范围根据最低纠错能力确定,为最低纠错能力的一倍至三倍。
7.根据权利要求6所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
数据回读恢复的具体步骤为:
依次读取各LUN通道条带页的数据并进行ECC译码,当任一LUN通道条带页的译码错误数据均在纠错能力范围内,则仅通过纠错算法进行页内数据的正确恢复,当任意LUN通道条带页的译码错误数据超出纠错能力范围时,通过条带页RAID5进行恢复处理;若条带页中任一子页数据错误超过纠错能力时,根据其他无错误或在纠错能力范围内的LUN通道条带页通过RAID5进行错误子页数据恢复,将恢复出来的正确数据输出并搬移至备用区LUN通道条带页页面,并更新地址映射表;若当前出错LUN通道条带页中出现两条或以上LUN通道数据出错且无法恢复,则不进行恢复,标记为动态坏块。
8.根据权利要求7所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
所述出错率阈值包括页内纠错阈值、块内弱页数量阈值、LUN内弱块数量阈值,当再次进行数据回读恢复时,直接将潜在坏块排除,后续不进行写入操作。
9.根据权利要求6所述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
所述动态坏块还包括动态弱块,对LUN通道条带页的数据进行译码后,数据译码出错率超过最低纠错能力的二倍但不大于最低纠错能力的三倍时,将该LUN通道条带页定义为弱页,具体数据块定义为动态弱块,对动态弱块及动态坏块进行统一处理。
10.根据权利要求9述的一种基于NAND Flash的星载固存高可靠数据存取方法,其特征在于:
对写入失败或LUN通道条带页的编程状态字有误的动态坏块、超出数据回读纠错能力范围的动态坏块及LUN通道条带页中出现两条或以上LUN通道数据出错且无法恢复的动态坏块,对因空间辐照造成编程状态字有误的块地址进行滤除,并进行与操作处理,对处理后所有坏块进行标记并与静态坏块、潜在坏块、弱块进行地址存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210910171.2A CN115357185A (zh) | 2022-07-29 | 2022-07-29 | 一种基于NAND Flash的星载固存高可靠数据存取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210910171.2A CN115357185A (zh) | 2022-07-29 | 2022-07-29 | 一种基于NAND Flash的星载固存高可靠数据存取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115357185A true CN115357185A (zh) | 2022-11-18 |
Family
ID=84031041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210910171.2A Pending CN115357185A (zh) | 2022-07-29 | 2022-07-29 | 一种基于NAND Flash的星载固存高可靠数据存取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115357185A (zh) |
-
2022
- 2022-07-29 CN CN202210910171.2A patent/CN115357185A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10324789B2 (en) | Flash memory controller and memory device for accessing flash memory module, and associated method | |
US8725944B2 (en) | Implementing raid in solid state memory | |
US8788876B2 (en) | Stripe-based memory operation | |
US8990476B2 (en) | Power interrupt management | |
US20140164824A1 (en) | Error detection/correction based memory management | |
US20130024735A1 (en) | Solid-state memory-based storage method and device with low error rate | |
CN104156174A (zh) | 基于条带的固态硬盘raid实现方法及装置 | |
CN102543196B (zh) | 数据读取方法、存储器储存装置及其控制器 | |
US20200409787A1 (en) | Error correction scheme in flash memory | |
US20160283319A1 (en) | Data storage device and encoding method thereof | |
CN105808371A (zh) | 数据备份与恢复方法、控制芯片及存储装置 | |
US11500569B2 (en) | Rolling XOR protection in efficient pipeline | |
CN107885620B (zh) | 一种提高固态盘阵列性能和可靠性的方法及系统 | |
TWI744049B (zh) | 記憶體控制器與資料處理方法 | |
CN107329850B (zh) | 一种满足海量读写次数操作的存储器及数据存储方法 | |
CN113094307B (zh) | 映射信息管理方法、存储器存储装置及存储器控制器 | |
US20220254435A1 (en) | Semiconductor storage device and error processing method for defective memory cell in the device | |
CN115357185A (zh) | 一种基于NAND Flash的星载固存高可靠数据存取方法 | |
US10922025B2 (en) | Nonvolatile memory bad row management | |
US8885406B2 (en) | Memory device, memory control device, and memory control method | |
CN112486419A (zh) | 基于raid5的数据存储方法、装置、恢复方法及固态硬盘 | |
US11966638B2 (en) | Dynamic rain for zoned storage systems | |
US11507304B1 (en) | Diagonal page mapping in memory systems | |
US20240289040A1 (en) | Controlling memory overhead for storing integrity data in solid state drives | |
JP2021118011A (ja) | 半導体記憶装置及び半導体記憶装置のリフレッシュ方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |