CN117331491A - Nand Flash芯片数据存储方法及装置 - Google Patents
Nand Flash芯片数据存储方法及装置 Download PDFInfo
- Publication number
- CN117331491A CN117331491A CN202311079361.5A CN202311079361A CN117331491A CN 117331491 A CN117331491 A CN 117331491A CN 202311079361 A CN202311079361 A CN 202311079361A CN 117331491 A CN117331491 A CN 117331491A
- Authority
- CN
- China
- Prior art keywords
- data
- block
- chip
- blocks
- nand flash
- 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
- 238000000034 method Methods 0.000 title claims abstract description 87
- 238000013500 data storage Methods 0.000 title claims abstract description 63
- 238000004590 computer program Methods 0.000 claims description 16
- 238000012937 correction Methods 0.000 claims description 6
- 230000015556 catabolic process Effects 0.000 abstract description 7
- 238000006731 degradation reaction Methods 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000012795 verification Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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
- 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/1068—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 in sector programmable memories, e.g. flash disk
-
- 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
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- 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)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供一种Nand Flash芯片数据存储方法及装置,其方法包括:确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或第一类目标块中的数据。本发明通过预估Nand Flash芯片每个块中的数据是否存在劣化风险和潜在风险,通过在写入数据前,避免将影响设备启动的内核启动数据或其他数据写入高风险块中,实现Nand Flash芯片的高可靠数据存储。
Description
技术领域
本发明涉及Nand Flash存储技术领域,尤其涉及一种用于NandFlash的存储方法。
背景技术
使用Nand Flash的工程用嵌入设备通常会提前采购,然后会长时间存放于库房或架设于建筑现场,在其所属的建筑工程完工后才会开始运行,因此,其从购买到正式使用的时间跨度通常达到几个月。
而施工现场的环境温度和湿度难以保证,当环境温度达到30℃以上时,NandFlash芯片的浮栅失电荷的情况呈指数增加,所以即使是新安装的设备的Nand Flash里保存的数据也有可能发生错误,若错误数据是系统文件之类的重要数据,则会表现为设备无法启动。
因此,需要一种用于Nand Flash的数据存储方法以降低NandFlash中数据出现错误导致设备无法启动的可能性。
发明内容
本发明提供一种Nand Flash芯片数据存储方法,用以解决现有技术中Nand Flash芯片的数据存储在高温环境下出错导致设备无法启动的缺陷,提高Nand Flash芯片的数据存储的可靠性。
本发明提供一种Nand Flash芯片数据存储方法,包括:
确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;
将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;
从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
根据本发明提供的一种Nand Flash芯片数据存储方法,所述确定芯片中每个块的数据出错次数的步骤包括:
基于ECC校验方法确定芯片中每个块的数据出错次数;或者,
基于三模冗余算法确定芯片中每个块的数据出错次数。
根据本发明提供的一种Nand Flash芯片数据存储方法,所述基于ECC校验方法确定芯片中每个块的数据出错次数的步骤包括:
基于ECC校验方法确定每个块中的每页数据是否出现错误;
统计每个块中数据出现错误的总页数,将所述总页数作为每个块的数据出错次数。
根据本发明提供的一种Nand Flash芯片数据存储方法,所述基于三模冗余算法确定芯片中每个块的数据出错次数的步骤包括:
基于三模冗余算法确定每个块中每个逻辑区域的每位数据是否出现错误;
统计所述逻辑区域中数据出现错误的总次数,将所述所有数据出现错误的总次数作为每个块的数据出错次数。
根据本发明提供的一种Nand Flash芯片数据存储方法,所述确定芯片中每个块中的数据出错次数的步骤包括:
从所述芯片的最后一个块中统计每个块对应的区域中0值的个数,将所述个数作为每个块中的数据出错次数;每个块对应的区域中0值是在确定各块每出现一次错误时,将各块对应区域中的一个1值更改为0值获取。
根据本发明提供的一种Nand Flash芯片数据存储方法,所述确定芯片中每个块的首次数据写入时间距离当前时间的时长的步骤包括:
在基于ECC校验方法确定芯片中每个块的数据出错次数的情况下,在每个所述块的第零页的扩展区域读取每个所述块中首次写入数据的时间;
在基于三模冗余算法确定芯片中每个块的数据出错次数的情况下,在每个所述块的第零页的描述区读取每个所述块中首次写入数据的时间;
确定每个所述块中首次写入数据的时间距离当前时间的时长。
根据本发明提供的一种Nand Flash芯片数据存储方法,所述从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据的步骤包括:
将所述其他块中所述数据出错次数大于第三预设阈值且小于等于所述第二预设阈值的块作为第二类目标块;
在所述第一类目标块中的数据或所述新数据为内核启动数据的情况下,在所述其他块中除所述第二类目标块以外的块中选择块,写入所述第一类目标块中的数据或所述新数据;
在所述第一类目标块中的数据或所述新数据不为内核启动数据的情况下,从所述其他块中选择块写入所述第一类目标块中的数据或所述新数据。
本发明还提供一种Nand Flash芯片数据存储装置,包括:
确定模块,用于确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;
分类模块,用于将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;
写入模块,从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述Nand Flash芯片数据存储方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述NandFlash芯片数据存储方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述Nand Flash芯片数据存储方法。
本发明提供的一种Nand Flash芯片数据存储方法,通过每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数,确定每个块中的数据是否劣化以及每个块中存储的数据的准确性,进而确定每个块是否为不适宜存储数据的第一类目标块;通过将第一类目标块中的数据重写于其他块,以及避免在第一类目标块中写入新数据,提高Nand Flash芯片数据存储的准确性,进而降低存储于Nand Flash芯片中的数据出错导致设备无法启动的可能性。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的Nand Flash芯片数据存储方法的流程示意图之一;
图2是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用ECC校验方法判决每页数据是否出现错误的流程示意图;
图3是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用三模冗余算法时每个逻辑区域的结构图;
图4是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用三模冗余算法判决每位数据是否出现错误的流程示意图;
图5是本发明提供的Nand Flash芯片数据存储方法中主要用于展示损伤表的示意图;
图6是本发明提供的Nand Flash芯片数据存储方法中主要用于展示坏块表的示意图;
图7是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用ECC校验方法时每个块中第零页的示意图。
图8是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用ECC校验方法时记录首次数据写入时间的流程图;
图9是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用三模冗余算法时记录首次数据写入时间的流程图;
图10是本发明提供的Nand Flash芯片数据存储方法中主要用于展示使用三模冗余算法中的数据勘误表的示意图;
图11是本发明提供的Nand Flash芯片数据存储装置的结构示意图;
图12是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图10描述本发明的Nand Flash芯片数据存储方法,参照图1,包括:
步骤101,确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;
记录Nand Flash芯片中的每个块首次写入数据时,记录首次写入数据的时间,作为每个块的首次数据写入时间。
可选地,本实施例对记录首次数据写入时间的位置不做限定,可以在首次数据写入时间对应的块中记录,也可以在该芯片中选择另外的块记录。
可选地,首次数据写入时间的记录精度可以为秒、分、小时或日。
可选地,本实施例对记录首次数据写入时间的格式不做限定。
在一种可行的实施方式中,将每个块首次写入数据时的UTC时间(CoordinatedUniversal Time,世界标准时间)作为首次数据写入时间,以BCD码的编码格式写入合适的区域。
计算芯片的每个块首次数据与当前时间的时间差,作为首次数据写入时间距离当前时间的时长,表示芯片中记录有数据的每个块的使用时长,用于根据使用时长评估该块中数据发生劣化的概率。
进一步地,对每个存有数据的块中的数据进行判决,确定每个块的数据出错次数,用于判断每个块中存储数据的准确性,进而确定每个块用于存储数据时的风险率。
需要注意的是,无论采取何种方法对个块中的数据进行判决,至少需要判决得到该块中每页数据是否正确。
步骤102,将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;
第一预设阈值根据经验确定。
若块中首次数据写入时间距离当前时间的时长大于第一预设阈值,则表示该块可能出现浮栅失电荷的情况,块中数据将劣化。
第二预设阈值根据经验确定。
若块中数据出错次数大于第二预设阈值,则认为该块中存储数据的准确性较低,继续使用该块存储数据的风险率较大。
第一类目标块为不适宜存储数据的块。
将时长大于第一预设阈值或数据出错次数大于第二预设阈值的块作为第一类目标块,也就是该块中数据随着时间劣化或该块用于存储数据的风险率较大,则不再继续使用该块进行数据存储,以保障芯片中存储数据的准确性。
步骤103,从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
芯片中除第一类目标块以外的其他块,即能够用于存储数据的块。
在芯片中选择其他块,将第一类目标块中的数据写入其他块,即将第一类目标块中存储的数据重写至存储风险率更低的块,以避免存储于第一类目标块中的数据进一步损坏。
将新数据写入其他块,即避免将新数据写入不适宜存储数据的第一类目标块,以降低新数据在存储时损坏的风险率,进而提高新数据存储的准确性。
本发明通过每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数,确定每个块中的数据是否劣化以及每个块中存储的数据的准确性,进而确定每个块是否为不适宜存储数据的第一类目标块;通过将第一类目标块中的数据重写于其他块,以及避免在第一类目标块中写入新数据,提高Nand Flash芯片数据存储的准确性,进而降低存储于Nand Flash芯片中的数据出错导致设备无法启动的可能性。
本发明Nand Flash芯片数据存储方法中,所述确定芯片中每个块的数据出错次数的步骤包括:
基于ECC校验方法确定芯片中每个块的数据出错次数;或者,
基于三模冗余算法确定芯片中每个块的数据出错次数。
ECC(Error Checking and Correction)校验方法是一种用于NandFlash芯片的差错检测和修正算法。
使用ECC校验方法对芯片中存储数据的正确性进行判决时,不额外占用冗余空间,但只能对芯片的每页数据的正确性做出判决。
三模冗余算法是一种冗余技术,它通过将系统中的关键模块复制三份分别存放于三个逻辑区域中,并在输出端采用多数表决的方式来实现错误的检测和纠正。使用三模冗余算法判决每个块中数据的正确性时,会占用三倍的存储区域,但可以实现对错误数据的纠正。
可选地,三模冗余算法的逻辑区域可以划分于一个块中,也可以用不同的块甚至使用多芯片作为一个逻辑区域,具体可依据实际需求来设计。
本发明Nand Flash芯片数据存储方法中,所述基于ECC校验方法确定芯片中每个块的数据出错次数的步骤包括:
基于ECC校验方法确定每个块中的每页数据是否出现错误;
在读取每个块的一页数据之后,基于用ECC校验方法对每个块中的每页数据进行逐页判决,以确定每个块中的每页数据是否出现错误。
具体地,参照图2,使用ECC校验方法对每个块中的数据进行判决时,读出指定阅读地址read addr的整页数据,由CPU硬件完成ECC校验,可以直接获知校验结果,其校验结果记为判决结果。
若块中至少一页数据出现错误,则表示该块中存储的数据已经出现错误。
因此,需要对其错误次数进行统计,以便确定该块用于数据存储的风险率。
统计每个块中数据出现错误的总页数,将所述总页数作为每个块的数据出错次数。
对每个块中的数据进行逐页判决时,在一页数据的判决结果为出现错误时,记录一次错误。
可选地,错误可以记录于芯片中,也可记录于其他位置。
可选地,错误可以以顺序编号的方式记录,也可以每次错误记录为同一标记,统计标记出现的总次数作为块中数据出现错误的总页数。
统计记录为错误的总页数,作为每个块的数据出错次数
当数据出错次数大于第二预设阈值,即该块中每页数据出错次数大于风险阈值,该块为不适宜存储数据的第一类目标块。
在一个具体的实施方式中,参照图2,读取地址addr,解析addr得到块地址block_addr和页地址page_addr,根据块地址和页地址确定该页的数据的位置,读取该页数据,使用ECC校验方法判决该页数据是否出错,若出错,则记录该页数据对应的块的块地址。
对每个块的每页数据进行判决,统计判决结果为错误的页的总次数,作为该块的数据出错次数。
本发明Nand Flash芯片数据存储方法中,所述基于三模冗余算法确定芯片中每个块的数据出错次数的步骤包括:
基于三模冗余算法确定每个块中每个逻辑区域的每位数据是否出现错误;
采用三模冗余算法确定每个块中数据是否出现错误,需要先确定三模系统的三个逻辑区域。
在一种可行的实施方式中,可以将三模系统的逻辑区域建立在一个块中,参照图3,以MT29F32芯片为例,该芯片共有4096个块,每个块有256页,每页有4096字节+224字节。
将每个块分为三个逻辑区域,其中第一个逻辑区域作为一模区,包括第1页到第85页,第二个逻辑区域作为二模区,包括第86页至第170页,第三个逻辑区域作为三模区,包括第171页至第255页。
使用三模冗余算法对每个块中数据的准确性进行判决时,分别读出一模区、二模区和三模区相同页地址偏移的数据。其中,相同页地址偏移值每个逻辑区域中对应的位置。
例如,一模区第1页的第2位,二模区第86页的第2位和三模区第171页的第2位为相同页地址偏移。
对相同页地址偏移的每位数据进行逐位判决,当三个逻辑区域数据中有两个是相同时,就认为相同的数值是该bit位的正确值,如果另一个逻辑区域的数据与此不一致,则认为该位地址的数据发生一次错误。
可选地,三模冗余算法的三个逻辑区域也可使用不同的块或不同的芯片建立,具体可根据实际需求进行设计。
本申请通过将三模冗余算法的三个逻辑区域设计于一个块中,其板卡可以只选用一片大容量Nand Flash芯片,减小板卡面积,充分利用Nand Flash大容量低成本的特点。而且不必频繁跨块地址写入,也可以缩短写入时间,提高存储效率。当判决有错误时,可以按照通常的处理马上擦掉旧数据重新写入数据。
若至少一位地址的数据出现错误,则表示该块中的数据出现错误,因此,需要统计该块的地址,以便在该块成为第一类目标块时,根据记录的地址读取该块的数据,并将其写入其他块。
或在写入新数据时,避免将新数据写入记录的地址中。
统计所述逻辑区域中数据出现错误的总次数,将所述所有数据出现错误的总次数作为每个块的数据出错次数。
统计每个块的三个逻辑区域中每位数据出现错误的总次数,将总次数作为该块的数据出错次数。
当数据出错次数大于第二预设阈值,即该块中每页数据出错次数大于风险阈值,则认为该块用于数据存储时风险较高,该块为不适宜存储数据的第一类目标块。
在一个具体的实施方式中,参照图4,读取地址addr,解析addr得到块地址block_addr和页地址page_addr,根据块地址和页地址确定该页的数据的位置。
读取一模区的数据到buf_1,读取二模区的数据到buf_2,读取三模区的数据到buf_3,对buf_1、buf_2和buf_3中相同地址偏移的每位数据进行判决,将地址偏移的至少2个相同的值,作为该地址偏移正确值存入data_buf相同偏移位置,将与另2个不同的值作为一次错误次数记录。
对每个块的每个逻辑区域的数据进行判决,统计判决结果为错误的位数据的总次数,作为该块的数据出错次数。
本发明Nand Flash芯片数据存储方法中,所述确定芯片中每个块中的数据出错次数的步骤包括:
从所述芯片的最后一个块中统计每个块对应的区域中0值的个数,将所述个数作为每个块中的数据出错次数;每个块对应的区域中0值是在确定各块每出现一次错误时,将各块对应区域中的一个1值更改为0值获取。
预留芯片的最后的一个块,无论采取何种方法对每个块中的数据进行判决,确定块中数据是否出现错误,均将出现错误的块的地址记录于芯片的最后一个块中。
可选地,本申请对最后一个块中错误次数的记录方式不做限定。
在一种可行的实施方式中,在最后一个块中确定每个块的对应区域,在判决确定每个块出现一次错误时,在该块的对应区域中将一个1值修改为0值。
在另一种可行的实施方式中,在判决确定每个块出现一次错误时,在最后一个块中将一个1值修改为0值,在对一个块的数据判决完成后,在记录的0值后写入该块的地址,统计每个地址前的0值个数,作为该块的数据出错次数。
在另一种可行的实施方式中,在最后一个块中预先写入每个块的地址,在判决确定每个块出现一次错误时,将每个块的地址后最近的一个1值修改为0值,统计每个地址前的0值个数,作为该块的数据出错次数。
在另一种可行的实施方式中,如图5所示,在芯片的最后一个块中建立损伤表,损伤表用于作为预估每个块的数据存储风险的依据,损伤表采用bit位记录的方式,也就是将第一次出现错误的块的地址记录于损伤表中,并损伤表中将该地址后最近的1值修改为0值。
需要注意的是,在未写入信息前,块中的每一位均处于1值。
具体地,在判决确定每个块出现一次错误时,在损伤表中查找,若损伤表中不存在该地址,则在损伤表中记录该地址,并将其后最近的1值修改为0值。
若损伤表中查找并匹配至该地址,则在该地址后将其后最近的1值修改为0值。
统计0值出现的个数作为出现错误的所述块的数据出错次数。
统计损伤表中,每个块的地址后0值的个数,作为该地址对应的块的数据出错次数。
由于Nand Flash芯片的读写最小单位是页,写操作时,可以不用擦除直接从1写为0,而从0写为1则必须先擦除,且擦除的最小单位是块。因此,通过在地址后面将1改写0的方式统计每个地址对应的块的数据出错次数,一方面无需每次擦除重写,另一方面无需每次记录出错的块时重复写入32位块地址,只需改写1位数据即可实现数据出错次数的统计。
可选地,如图6所示,在芯片的最后一个块中建立坏块表,坏块表用于记录第一类目标块的地址。
具体地,当损伤表中某一块的地址后0的数量大于第二预设阈值时,将该地址写入坏块表中。
在一种可行的实施方式中,内核启动时,Uboot获取启动参数中的内核存放地址core_addr,然后从该地址开始读取内核启动数据。
根据内核存放地址确定对应的块地址core_block_addr和页地址ead_page_addr,对该地址中的块中每页的数据进行判决,确定数据是否出现错误,并在出现错误时,将对应的块地址记录于损伤表中,完成每个块中损失表的建立。循环读取一个block的内核启动数据,放入内存。
判断内核启动数据是否全部读取,若是则Uboot跳转该内存地址,内核启动;若否,则继续读取,判断core_addr_block的下一个block是否有内核启动数据,若有则继续对该块中的数据进行判决,并在判决结果为错误时将对应的地址记录于损伤表中;若下一个block无内核启动数据,则继续对下一个block进行判断。
本发明Nand Flash芯片数据存储方法中,所述确定芯片中每个块的首次数据写入时间距离当前时间的时长的步骤包括:
在基于ECC校验方法确定芯片中每个块的数据出错次数的情况下,在每个所述块的第零页的扩展区域读取每个所述块中首次写入数据的时间;
在基于三模冗余算法确定芯片中每个块的数据出错次数的情况下,在每个所述块的第零页的描述区读取每个所述块中首次写入数据的时间;
每个块的第零页用于存储块描述信息,采用不同的数据判决方法,块描述信息也有不同。
块描述信息包括该块的首次数据写入时间。
可选地,采用ECC校验方法时,以MT29F32芯片为例,如图7所示,在每个块首次数据写入时,将每个块的首次数据写入时间记录于每个块第零页的扩展区域。
可选地,采用三模冗余算法时,以MT29F32芯片为例,如图3所示,在每个块首次数据写入时,将每个块的首次数据写入时间记录于每个块第零页的块描述区。
在此基础上,读取每个块中存储的首次数据写入时间即可获得该块首次写入数据的时间。
确定每个所述块中首次写入数据的时间距离当前时间的时长。
根据每个块中记录的首次写入数据的时间与当前时间的时间差,计算首次数据写入时间距离当前时间的时长。
可选地,以天或月为单位计算首次数据写入时间距离当前时间的时长。
在一个具体的实施方式中,参照图8,采用ECC校验方法时,在芯片的每个块第一次写入数据时,根据写入的地址addr得到对应的块地址block_addr和页地址page_addr,判断该块是否首次写入数据,若是,则以BCD码的格式将当前的UTC时间写入该块第零页的扩展区的最后4字节,例如,当前UTC时间为2023年3月31日,即为0x20230331;若否,则将数据写入该块中对应的页地址内。
在一个具体的实施方式中,参照图9,采用三模冗余算法时,在芯片的每个块第一次写入数据时,根据写入的地址addr得到对应的块地址block_addr和页地址page_addr,判断该块是否首次写入数据,若是,则以BCD码的格式将当前的UTC时间写入该块第零页的数据区的0地址;若否,则将数据依次写入该块的一模区、二模区和三模区对应位置。
进一步地,采用三模冗余算法时,参照图10,第零页的块描述区还包括数据位勘误表。
数据位勘误表用来记录对应的块中判决结果出现错误的位地址。具体地,使用三模冗余算法对每个逻辑区域进行逐位判决时,当判决某位地址的数据出现错误,则将错误的位地址记录于该块第零页的数据位刊物表中。
无需在每次判决发现错误的位地址时擦除整块数据重写,只需记录错误的位地址,对整块数据判决结束后,再基于数据位勘误表中记录的位地址重写该块中的数据。
本发明Nand Flash芯片数据存储方法中,所述从所述芯片中除所述第一类目标块以外的其他块中选择块写入所述第一类目标块中的数据的步骤包括:
从所述芯片中除所述第一类目标块以外的其他块中选择所述数据出错次数大于第三预设阈值且小于所述第二预设阈值的块作为第二类目标块;
第三预设阈值根据经验确定。
数据出错次数大于第三预设阈值且小于第二预设阈值表示该块有较大的损坏风险,但仍未损坏,可以用于存储对数据准确性要求较低的数据。
在一种可行的实施方式中,将地址记录于损伤表中,但未记录于坏块表中的地址对应的块,作为第二类目标块。
在所述第一类目标块中的数据或所述新数据为内核启动数据的情况下,在除所述第二类目标块以外的所述其他块中选择块,写入所述第一类目标块中的数据或所述新数据;
内核启动数据是指操作系统内核中存储的数据,内核是操作系统的核心部分,负责管理计算机的硬件资源和提供系统服务。若存储于Nand Flash芯片中的内核启动数据出现错误,则会导致使用该芯片的设备无法启动。
因此,需要避免将对数据准确性要求较高的内核启动数据存储于第二类目标块中。
在此基础上,对于存储于第一类目标块中的数据,在其为内核启动数据的情况下,在除第二类目标块以外的其他块中选择块,将第一类目标块中的数据重写于选择的块中。
在所述新数据为内核启动数据的情况下,在所述其他块中除所述第二类目标块以外的块中选择块,根据选择的块的地址在所述选择的块中写入所述新数据;
例如,内核升级时,需要选择合适的块写入新的内核启动数据,也就是将新的内核启动数据写入除第二类目标块以外的其他块中。
需要注意的是,其他块为除第一类目标块以外的块。
在一种可行的实施方式中,设置预估块出错率模块,对于任意一个块,如果在坏块表中查到该块地址,则认为其出错率为100%;如果在损伤表中查找到该块地址,确定第一预设阈值Q,其出错率为出错次数/Q,将每个块的出错率认为是该块的潜在风险值P0。
将上一次内核启动数据使用的块地址作为预估块出错率模块的入参,获取其潜在风险值P0,当P0>高风险阈值M时,认为该块不适合用来保存内核启动数据;接着将其块地址+1,继续使用“预估块出错率模块”计算其后下一个块的潜在风险值;反之则认为该块地址对应的块出错风险低,可以用来保存内核启动数据。其中,高风险阈值M的值可以为第二预设阈值除以第一预设阈值的取整结果。
设置页数据写入模块,用于在每个块中写入数据,并记录每个块首次写入数据的时间。
将按照上述步骤选出的能用于存储内核启动数据的块的块地址block_addr、页地址write_page_addr和页数据page_buf作为“页数据写入模块”的入参,将内核启动数据一页一页地循环写入,当写完一个块中,使用预估块出错率模块选出可用于存储内核数据的下一个块,并确定下一个块的地址block_addr1,直至写完所有内核启动数据。
在所述第一类目标块中的数据或所述新数据不为内核数据的情况下,从所述其他块中选择块,写入所述第一类目标块中的数据或所述新数据。
对于存储于第一类目标块中的数据,在其不为内核数据的情况下,也就是对数据准确性要求较低,能够存储于第二类目标块中。
因此,可以在除第一类目标块以外的其他块中选择块,将存储于第一类目标块中的数据重写于其他块中。
例如,设置块数据劣化预估模块,用于从每个块的第零页中读取块描述信息,从而读取每个块的首次数据写入时间first_use_date,在第一预设阈值<当前时间-first_use_date的情况下,认为该地址对应的块的数据将劣化,也就是该块的首次数据写入时间距离当前时间的时长大于第一预设阈值,该块为第一类目标块。
在巡视块存续状态时,从第一个块开始,循环使用数块据劣化预估模块判断指定块地址的块中数据是否有劣化风险,也就是确定块是否为第一类目标块、对于被判断为第一类目标块的块,在其中存储的数据不为内核启动数据的情况下,读出其中的整块数据后,擦除这一个块中的数据,再将读出的整块数据写入除第一类目标块以外的其他块中。
可选地,设置页读取模块,用于读取块描述信息。若读取的是块描述信息,则直接读一页数据并返回;若是存储的实际数据,则需要使用判决算法判断数据是否出现错误。
对于新数据,在新数据不为内核启动数据的情况下,从其他块中选择块,写入新数据。
在待写入的新数据不为内核启动数据的情况下,也就是对数据准确性要求较低,能够存储于第二类目标块中。
在此基础上,从其他块中选择块,根据选择的块的地址将新数据写入所选的块中。
本发明通过每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数来预估Nand Flash芯片每个块中的数据是否存在劣化风险和潜在风险,通过在写入数据前,避免将影响设备启动的内核启动数据或其他数据写入高风险块中,以及将高风险块中的数据重写于低风险块中,实现Nand Flash芯片的高可靠数据存储。
下面对本发明提供的Nand Flash芯片数据存储装置进行描述,下文描述的NandFlash芯片数据存储装置与上文描述的Nand Flash芯片数据存储方法可相互对应参照。
参照图11,本发明Nand Flash芯片数据存储装置包括确定模块1101,分类模块1102,写入模块1103,其中:
确定模块1101,用于确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;
记录Nand Flash芯片中的每个块首次写入数据时,记录首次写入数据的时间,作为每个块的首次数据写入时间。
可选地,本实施例对记录首次数据写入时间的位置不做限定,可以在首次数据写入时间对应的块中记录,也可以在该芯片中选择另外的块记录。
可选地,首次数据写入时间的记录精度可以为秒、分、小时或日。
可选地,本实施例对记录首次数据写入时间的格式不做限定。
在一种可行的实施方式中,将每个块首次写入数据时的UTC时间(CoordinatedUniversal Time,世界标准时间)作为首次数据写入时间,以BCD码的编码格式写入合适的区域。
计算芯片的每个块首次数据与当前时间的时间差,作为首次数据写入时间距离当前时间的时长,表示芯片中记录有数据的每个块的使用时长,用于根据使用时长评估该块中数据发生劣化的概率。
进一步地,对每个存有数据的块中的数据进行判决,确定每个块的数据出错次数,用于判断每个块中存储数据的准确性,进而确定每个块用于存储数据时的风险率。
需要注意的是,无论采取何种方法对个块中的数据进行判决,至少需要判决得到该块中每页数据是否正确。
分类模块1102,用于将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;
第一预设阈值根据经验确定。
若块中首次数据写入时间距离当前时间的时长大于第一预设阈值,则表示该块可能出现浮栅失电荷的情况,块中数据将劣化。
第二预设阈值根据经验确定。
若块中数据出错次数大于第二预设阈值,则认为该块中存储数据的准确性较低,继续使用该块存储数据的风险率较大。
第一类目标块为不适宜存储数据的块。
将时长大于第一预设阈值或数据出错次数大于第二预设阈值的块作为第一类目标块,也就是该块中数据随着时间劣化或该块用于存储数据的风险率较大,则不再继续使用该块进行数据存储,以保障芯片中存储数据的准确性。
写入模块1103,从所述芯片中除所述第一类目标块以外的其他块中选择块写入所述新数据或第一类目标块中的数据。
芯片中除第一类目标块以外的其他块,即能够用于存储数据的块。
在芯片中选择其他块,将第一类目标块中的数据写入其他块,即将第一类目标块中存储的数据重写至存储风险率更低的块,以避免存储于第一类目标块中的数据进一步损坏。
将新数据写入其他块,即避免将新数据写入不适宜存储数据的第一类目标块,以降低新数据在存储时损坏的风险率,进而提高新数据存储的准确性。
本发明通过每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数,确定每个块中的数据是否劣化以及每个块中存储的数据的准确性,进而确定每个块是否为不适宜存储数据的第一类目标块;通过将第一类目标块中的数据重写于其他块,以及避免在第一类目标块中写入新数据,提高Nand Flash芯片数据存储的准确性,进而降低存储于Nand Flash芯片中的数据出错导致设备无法启动的可能性。
图12示例了一种电子设备的实体结构示意图,如图12所示,该电子设备可以包括:处理器(processor)1210、通信接口(CommunicationsInterface)1220、存储器(memory)1230和通信总线1240,其中,处理器1210,通信接口1220,存储器1230通过通信总线1240完成相互间的通信。处理器1210可以调用存储器1230中的逻辑指令,以执行Nand Flash芯片数据存储方法,该方法包括:确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
此外,上述的存储器1230中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的Nand Flash芯片数据存储方法,该方法包括:确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的Nand Flash芯片数据存储方法,该方法包括:确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (11)
1.一种Nand Flash芯片数据存储方法,其特征在于,包括:
确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;
将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;
从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
2.根据权利要求1所述的Nand Flash芯片数据存储方法,其特征在于,所述确定芯片中每个块的数据出错次数的步骤包括:
基于ECC校验方法确定芯片中每个块的数据出错次数;或者,
基于三模冗余算法确定芯片中每个块的数据出错次数。
3.根据权利要求1所述的Nand Flash芯片数据存储方法,其特征在于,所述基于ECC校验方法确定芯片中每个块的数据出错次数的步骤包括:
基于ECC校验方法确定每个块中的每页数据是否出现错误;
统计每个块中数据出现错误的总页数,将所述总页数作为每个块的数据出错次数。
4.根据权利要求1所述的Nand Flash芯片数据存储方法,其特征在于,所述基于三模冗余算法确定芯片中每个块的数据出错次数的步骤包括:
基于三模冗余算法确定每个块中每个逻辑区域的每位数据是否出现错误;
统计所有所述逻辑区域中数据出现错误的总次数,将所述总次数作为每个块的数据出错次数。
5.根据权利要求1所述的Nand Flash芯片数据存储方法,其特征在于,所述确定芯片中每个块中的数据出错次数的步骤包括:
从所述芯片的最后一个块中统计每个块对应的区域中0值的个数,将所述个数作为每个块中的数据出错次数;每个块对应的区域中0值是在确定各块每出现一次错误时,将各块对应区域中的一个1值更改为0值获取。
6.根据权利要求2所述的Nand Flash芯片数据存储方法,其特征在于,所述确定芯片中每个块的首次数据写入时间距离当前时间的时长的步骤包括:
在基于ECC校验方法确定芯片中每个块的数据出错次数的情况下,在每个所述块的第零页的扩展区域读取每个所述块中首次写入数据的时间;
在基于三模冗余算法确定芯片中每个块的数据出错次数的情况下,在每个所述块的第零页的描述区读取每个所述块中首次写入数据的时间;
确定每个所述块中首次写入数据的时间距离当前时间的时长。
7.根据权利要求1-6任一项所述的Nand Flash芯片数据存储方法,其特征在于,所述从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据的步骤包括:
将所述其他块中所述数据出错次数大于第三预设阈值且小于等于所述第二预设阈值的块作为第二类目标块;
在所述第一类目标块中的数据或所述新数据为内核启动数据的情况下,在所述其他块中除所述第二类目标块以外的块中选择块,写入所述第一类目标块中的数据或所述新数据;
在所述第一类目标块中的数据或所述新数据不为内核启动数据的情况下,从所述其他块中选择块,写入所述第一类目标块中的数据或所述新数据。
8.一种Nand Flash芯片数据存储装置,其特征在于,包括:
确定模块,用于确定芯片中每个块的首次数据写入时间距离当前时间的时长和每个块的数据出错次数;
分类模块,用于将所述时长大于第一预设阈值或所述数据出错次数大于第二预设阈值的块作为第一类目标块;
写入模块,从所述芯片中除所述第一类目标块以外的其他块中选择块写入新数据或所述第一类目标块中的数据。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述Nand Flash芯片数据存储方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述Nand Flash芯片数据存储方法。
11.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述Nand Flash芯片数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311079361.5A CN117331491A (zh) | 2023-08-24 | 2023-08-24 | Nand Flash芯片数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311079361.5A CN117331491A (zh) | 2023-08-24 | 2023-08-24 | Nand Flash芯片数据存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117331491A true CN117331491A (zh) | 2024-01-02 |
Family
ID=89281843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311079361.5A Pending CN117331491A (zh) | 2023-08-24 | 2023-08-24 | Nand Flash芯片数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117331491A (zh) |
-
2023
- 2023-08-24 CN CN202311079361.5A patent/CN117331491A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108646982B (zh) | 一种基于ubifs的数据自动修复方法及装置 | |
JP4950886B2 (ja) | 不揮発性記憶装置、メモリコントローラ及び不良領域検出方法 | |
CN107239411B (zh) | 一种车载控制器内存管理方法及系统 | |
TWI436369B (zh) | 記憶裝置之使用壽命量測方法及系統內編程碼置換方法、及其資料儲存系統 | |
CN102024502B (zh) | 闪存器件测试方法、装置及板卡和网络设备 | |
US20190317698A1 (en) | Disk Data Reading/Writing Method and Device | |
CN115407946A (zh) | 一种存储器及其控制方法与控制系统 | |
CN114721602B (zh) | 一种基于FreeRTOS的Nor Flash滚动存储方法及装置 | |
CN107992268B (zh) | 一种坏块标记的方法及相关装置 | |
CN114089915B (zh) | 基于flash存储器的文件追加写操作方法及装置 | |
CN117742588A (zh) | 使用Flash模拟EEPROM的数据存储方法及系统 | |
CN116185563B (zh) | 一种基于车规级微控制器数据闪存的软件模拟算法 | |
JP3675375B2 (ja) | 不揮発性メモリ並びに不揮発性メモリのデータ書き換え方法 | |
CN115509466B (zh) | 一种数据管理方法、装置及电子设备和存储介质 | |
CN117331491A (zh) | Nand Flash芯片数据存储方法及装置 | |
CN112908390B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
JP2003196165A (ja) | 不揮発性メモリ及びそのデータ更新方法 | |
CN113434086B (zh) | 数据存储方法、装置、非易失性存储器件和存储器 | |
CN110795155B (zh) | 系统启动方法及装置、电子设备、存储介质 | |
US9880926B1 (en) | Log structured reserved zone for a data storage device | |
CN113467724A (zh) | 一种crc校验码存储方法、装置、设备及介质 | |
CN110795275A (zh) | 基于异常掉电过程中的异常块识别方法和装置 | |
CN112988037A (zh) | 静态磨损均衡方法、终端和计算机可读存储介质 | |
CN111090542A (zh) | 基于异常掉电的异常块识别方法、装置及计算机设备 | |
CN112540882A (zh) | 闪存设备检测系统及闪存设备检测方法 |
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 |