一种提高NAND-FLASH存储可靠性的FPGA控制方法转让专利

申请号 : CN202010318546.7

文献号 : CN111596860B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 宁永慧刘春香石俊霞袁航飞司国良

申请人 : 中国科学院长春光学精密机械与物理研究所

摘要 :

本发明提供一种提高NAND‑FLASH存储可靠性的FPGA控制方法,首先采用EEPROM实现坏块表的存取,实现了坏块表的掉电保护功能;通过坏块检测操作获得的坏块表和EEPROM读取的坏块表进行对比,综合得出新的坏块表,提高了NAND‑FLASH存数数据的可靠性;由此可见,本发明设计了新的坏块表寻址数据结构,实现了坏块的正确寻址,提高NAND‑FLASH的运行速度和可靠性。

权利要求 :

1.一种提高NAND‑FLASH存储可靠性的FPGA控制方法,其特征在于,采用EEPROM存储坏块表;所述NAND‑FLASH的存储区间分为存储区和块替换区,其中,存储区和块替换区均包含多个存储块,且每个存储块对应一个状态位和一个地址码;

所述方法包括以下步骤:

S1:上电时,NAND‑FLASH进行坏块检测操作,得到坏块信息,然后将坏块信息发送到FPGA,其中,坏块信息包括坏块的地址码、坏块映射到的好块的地址码;

所述坏块检测操作为:读取各存储块的状态位判断存储块的好坏,在块替换区中查询当前未存储数据的好块的地址码,并将确认的坏块的地址码映射到好块的地址码;

S2:FPGA调用上一次加电时EEPROM中存储的坏块表,然后根据坏块信息更新坏块表,具体更新方法为:

如果坏块检测操作中检测到某个存储块为好块,而坏块表中该存储块为坏块,则将该存储块的状态位设置为异常,且保留坏块表中的地址码;如果坏块检测操作中检测到某个存储块为坏块,则根据该存储块的地址码及其映射到的好块的地址码更新坏块表,其中,若该存储块映射的地址码在坏块表中已被占用,则沿已被占用的地址码的顺序,在块替换区中重新选取映射的地址码;若该存储块映射的地址码对应的存储块在坏块表中被标记为坏块,则沿该被标记为坏块的地址码的顺序,在块替换区中重新选取映射的地址码;若该存储块映射的地址码与该存储块在坏块表中存储的地址码不同,则保留坏块表中的地址码;

S3:对NAND‑FLASH的存储区进行写入与擦除,其中,在擦除过程中,实时读取各存储块的状态位判断存储块的好坏,在写入过程中,通过对存储块进行数据校验判断存储块的好坏,从而得到各存储块对应的坏块信息,实时更新坏块表;

S4:完成写入与擦除而下电时,NAND‑FLASH再次进行坏块检测操作,得到各存储块对应的坏块信息,然后将最后更新得到的坏块表存储于EEPROM中供下次上电时使用。

2.如权利要求1所述的一种提高NAND‑FLASH存储可靠性的FPGA控制方法,其特征在于,当映射的地址码超过警戒值时,NAND‑FLASH向FPGA发送损坏报警信号。

3.如权利要求1所述的一种提高NAND‑FLASH存储可靠性的FPGA控制方法,其特征在于,在擦除过程中,如果检测到当前擦除的存储块为坏块,除了实时更新坏块表外,还要擦除当前存储块映射的好块中的数据。

4.如权利要求1所述的一种提高NAND‑FLASH存储可靠性的FPGA控制方法,其特征在于,在写入过程中,如果检测到当前写入的存储块为坏块,除了实时更新坏块表外,还要将当前存储块写入的数据转移到映射的好块中。

说明书 :

一种提高NAND‑FLASH存储可靠性的FPGA控制方法

技术领域

[0001] 本发明属于存储控制技术领域,尤其涉及一种提高NAND‑FLASH存储可靠性的FPGA控制方法。

背景技术

[0002] NAND‑FLASH是大规模数据存储的一种有效介质。由于NAND‑FLASH的存储特性,在设计存储控制电路时,需要设计一套完备的具有高可靠性的电路结构,实现大规模数据的
长期有效存储。
[0003] NAND‑FLASH存储控制结构包括块地址映射、坏块表(EBT)管理、负载平衡、数据检错纠错等功能,这些功能需要形成流畅的管理机制,实现数据在存取过程中的可靠处理流
程。目前,Nand‑FLASH的FPGA存储控制模块没有开源的代码,一些专用的芯片制造商开发的
nand‑flash存储控制模块也处理IP保护之中。
[0004] NAND‑FLASH存储控制可分为软件控制和硬件控制两种,现有技术多是针对软件控制提出的。除了基于FTL(Flash Translation Layer)芯片、NAND文件系统、NAND管理中间件
这些IP保护的管理方式外,更多的是轻量化的NAND坏块管理机制,且无开源代码,主要应用
在嵌入式系统中。客观来讲,仍然输入软件管理的范畴,速度和可靠性较低。
[0005] 一般的轻量级NAND‑FALSH坏块管理机制,当出现坏块时,替换块会指定为共用好块池中的下一个好块;坏块表无掉电保护机制;擦写过程中产生的坏块需要及时更新并存
储坏块表等。

发明内容

[0006] 为解决上述问题,本发明提供一种提高NAND‑FLASH存储可靠性的FPGA控制方法,实现了坏块的正确寻址,提高NAND‑FLASH的运行速度和可靠性。
[0007] 一种提高NAND‑FLASH存储可靠性的FPGA控制方法,采用EEPROM存储坏块表;所述NAND‑FLASH的存储区间分为存储区和块替换区,其中,存储区和块替换区均包含多个存储
块,且每个存储块对应一个状态位和一个地址码;
[0008] 所述方法包括以下步骤:
[0009] S1:上电时,NAND‑FLASH进行坏块检测操作,得到坏块信息,然后将坏块信息发送到FPGA,其中,坏块信息包括坏块的地址码、坏块映射到的好块的地址码;
[0010] 所述坏块检测操作为:读取各存储块的状态位判断存储块的好坏,在块替换区中查询当前未存储数据的好块的地址码,并将确认的坏块的地址码映射到好块的地址码;
[0011] S2:FPGA调用上一次加电时EEPROM中存储的坏块表,然后根据坏块信息更新坏块表;
[0012] S3:对NAND‑FLASH的存储区进行写入与擦除,其中,在擦除过程中,实时读取各存储块的状态位判断存储块的好坏,在写入过程中,通过对存储块进行数据校验判断存储块
的好坏,从而得到各存储块对应的坏块信息,实时更新坏块表;
[0013] S4:完成写入与擦除而下电时,NAND‑FLASH再次进行坏块检测操作,得到各存储块对应的坏块信息,然后将最后更新得到的坏块表存储于EEPROM中供下次上电时使用。
[0014] 进一步地,根据坏块信息更新坏块表的具体方法为:如果坏块检测操作中检测到某个存储块为好块,而坏块表中该存储块为坏块,则将存储块的状态位设置为异常,且保留
坏块表中的地址码;如果坏块检测操作中检测到某个存储块为坏块,则根据该存储块的地
址码及其映射到的好块的地址码更新坏块表,其中,若该存储块映射的地址码在坏块表中
已被占用,则沿已被占用的地址码的顺序,在块替换区中重新选取映射的地址码;若该存储
块映射的地址码对应的存储块在坏块表中被标记为坏块,则沿该被标记为坏块的地址码的
顺序,在块替换区中重新选取映射的地址码;若该存储块映射的地址码与该存储块在坏块
表中存储的地址码不同,则保留坏块表中的地址码。
[0015] 进一步地,当映射的地址码超过警戒值时,NAND‑FLASH向FPGA发送损坏报警信号。
[0016] 进一步地,在擦除过程中,如果检测到当前写入的存储块为坏块,除了实时更新坏块表外,还要擦除当前存储块映射的好块中的数据。
[0017] 进一步地,在写入过程中,如果检测到当前写入的存储块为坏块,除了实时更新坏块表外,还要将当前存储块写入的数据转移到映射的好块中。
[0018] 有益效果:
[0019] 1、本发明提供一种提高NAND‑FLASH存储可靠性的FPGA控制方法,首先采用EEPROM实现坏块表的存取,实现了坏块表的掉电保护功能;通过坏块检测操作获得的坏块表和
EEPROM读取的坏块表进行对比,综合得出新的坏块表,提高了NAND‑FLASH存数数据的可靠
性;由此可见,本发明设计了新的坏块表寻址数据结构,实现了坏块的正确寻址,提高NAND‑
FLASH的运行速度和可靠性。
[0020] 2、本发明提供一种提高NAND‑FLASH存储可靠性的FPGA控制方法,当检测到替换区坏块时,采用链表方式进行二次映射完成坏块表的更新,进而通过坏块表链表的方式实现
了坏块表的多次寻址功能。

附图说明

[0021] 图1为本发明提供的FPGA控制NAND‑FLASH外围电路结构;
[0022] 图2为本发明提供的一种提高NAND‑FLASH存储可靠性的FPGA控制方法的流程图;
[0023] 图3为本发明提供的NAND‑Flash坏块映射示意图;
[0024] 图4为本发明提供的坏块表地址更新机制原理;
[0025] 图5为本发明提供的坏块表初始化到FPGA内部的数据结构;
[0026] 图6为本发明提供的NAND‑FLASH坏块表输出示意图(K9F4G08U0D);
[0027] 图7为本发明提供的NAND‑FLASH存储的自校图形;
[0028] 图8为本发明提供的某型号探测器的实验室成像结果。

具体实施方式

[0029] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
[0030] 如图1所示,本发明采用FPGA作为主控制芯片,采用RTL门电路设计方法设计NAND‑FLASH的驱动结构,利用EEPROM存储坏块表信息,保证每次上电后,获得上次加电后的坏块
表信息;NAND‑FLASH的端口速率较低,因此,在系统上电后,可以将NAND‑FLASH中的数据初
始化到SDRAM中,以提高存储数据的实际运行速率;同时,在坏块表初始化时,FPGA硬件初始
化方式能够缩短初始化时间。
[0031] 如图2所示,为一种提高NAND‑FLASH存储可靠性的FPGA控制方法的流程图,所述NAND‑FLASH的存储区间分为存储区和块替换区,其中,存储区和块替换区均包含多个存储
块,且每个存储块对应一个状态位和一个地址码。
[0032] 需要说明的是,本发明将NAND‑FLASH存储区间分为上下两区,两区存储空间的占比是根据芯片的使用年限和坏块频率灵活分配的;如图3所示,上半区表示图像的初始存储
区,在坏块地址码中标记为二进制数“00B”;下半区表示图像的块替换区(共用好块区),在
坏块地址码中标记为二进制数“01B”。
[0033] 所述方法包括以下步骤:
[0034] S1:上电时,NAND‑FLASH进行坏块检测操作,得到坏块信息,然后将坏块信息发送到FPGA,其中,坏块信息包括坏块的地址码、坏块映射到的好块的地址码;
[0035] 所述坏块检测操作为:读取各存储块的状态位判断存储块的好坏,在块替换区中查询当前未存储数据的好块的地址码,并将确认的坏块的地址码映射到好块的地址码;
[0036] 需要说明的是,NAND‑FLASH的每个存储块包括两页,初始化检测采用双页检测的方式,即任意的一页状态错误时,设置该块为坏块。在初始坏块检测时,当检测到当前块为
坏块时,进行首次地址映射,如图3中的曲线1和曲线6,分别为地址码为00_01的坏块映射到
地址码为01_A1的好块、地址码为00‑9f的坏块映射到地址码为01_An的好块;在存储区映射
结束后,记录当前的替换区地址码,如图3中的地址码“An”,表示替换区地址使用“An”;当检
测到替换区坏块时,采用链表方式进行二次映射,地址码自加,如图3中地址码An+1,首先是
存储区中的地址码为00_03坏块映射到地址码为01_A2的好块,但是在进行替换区检测时,
发现01_A2为坏块,则01_A2映射到01_An+1。
[0037] S2:FPGA调用上一次加电时EEPROM中存储的坏块表,然后根据坏块信息更新坏块表;
[0038] 所述根据坏块信息更新坏块表的具体方法为:如果坏块检测操作中检测到某个存储块为好块,而坏块表中该存储块为坏块,则将存储块的状态位设置为异常,且保留坏块表
中的地址码;如果坏块检测操作中检测到某个存储块为坏块,则将该存储块的地址码及其
映射到的好块的地址码写入坏块表中,其中,若该存储块映射的地址码在坏块表中已被占
用,则沿已被占用的地址码的顺序,在块替换区中重新选取映射的地址码;若该存储块映射
的地址码对应的存储块在坏块表中被标记为坏块,则沿该被标记为坏块的地址码的顺序,
在块替换区中重新选取映射的地址码;若该存储块映射的地址码与该存储块在坏块表中存
储的地址码不同,则保留坏块表中的地址码。
[0039] 也就是说,在上电坏块检测时,检测NAND‑FLASH的坏块信息,并和存储坏块表EBT信息做对比;如果检测到当前块正常,而存储坏块表EBT中显示为异常,则将该块的状态设
置为异常,更新EBT,如图4中“03_A2”,即A2已被03占用,则检测EBT中的地址码05就不能映
射到A2了,EBT中已被占用的地址码截止到An+3,则05映射到An+4,由此避免了坏块状态信
息被错误清零;如果检测到当前块异常,而存储EBT中显示为正常,则将该块的状态设置为
异常,更新EBT,末块地址自加,如图4中“05_An+4”,同时设置NAND‑FLASH错误状态标识,请
求重新注入新数据;如果检测到当前块异常,而存储EBT中显示为异常,但映射地址不同,则
采用EBT中的映射地址,如图4中“9F_An+1”与“9F_An”,更新后仍为“9F_An”。
[0040] S3:对NAND‑FLASH的存储区进行写入与擦除,其中,在擦除过程中,实时读取各存储块的状态位判断存储块的好坏,在写入过程中,通过对存储块进行数据校验判断存储块
的好坏,从而得到各存储块对应的坏块信息,实时更新坏块表;
[0041] 在擦除过程中,如果检测到当前写入的存储块为坏块,除了实时更新坏块表外,还要擦除当前存储块映射的好块中的数据。
[0042] 在写入过程中,如果检测到当前写入的存储块为坏块,除了实时更新坏块表外,还要将当前存储块写入的数据转移到映射的好块中。
[0043] 也就是说,在数据写入过程中,如果检测到当前写入块损坏,进行块地址更新,以及数据替换;在替换区查询当前未使用的块地址,进行地址映射,如图3中地址An+2;在数据
擦除过程中,如果检测到当前擦除块损坏,则进行块地址更新;在替换区查询当前未使用的
块地址,进行地址映射,如图3中地址An+3;由此可见,本发明在进行写入操作时,如果出现
坏块,则需要完成块数据的搬移,并更新坏块表;在擦除过程中,只更新坏块表,简化坏块管
理流程。
[0044] S4:完成写入与擦除而下电时,NAND‑FLASH再次进行坏块检测操作,得到各存储块对应的坏块信息,然后将最后更新得到的坏块表存储于EEPROM中供下次上电时使用。
[0045] 也就是说,每次系统下电时,将系统的坏块表及末块地址存储到EEPROM中;在下次上电后,从EEPROM中读出坏块表和末块地址,并重新检测坏块表EBT;如果新检测的坏块表
EBT有新增坏块,则证明NAND‑FLASH存储的数据有错误,需要设置错误标志上报。通过二者
对比,可以获得更加准确的坏块表,也保证存储数据的正确性;例如,如图5左边所示,系统
每次上电后,从EEPROM中读取EBT到FPGA的RAM中,EBT的存储内容中包括坏块地址和映射块
地址;将数据按照地址和值的方式存储到FPGA的内部RAM中,如图5中的右图(将坏块地址作
为RAM的地址码,映射块地址作为RAM数据)。
[0046] 可选的,当映射的地址码超过警戒值时,NAND‑FLASH向FPGA发送损坏报警信号。
[0047] 由此可见,本发明利用FPGA‑RTL级编码实现NAND‑FLASH存储控制管理,是一种采用硬件结构提高NAND‑FLASH数据存储可靠性的方法,在坏块表初始化、坏块表保存和读取、
坏块替换策略、如何提高坏块管理可靠性等方面提出了新的思路。根据NAND‑FLASH的使用
环境和使用要求,将轻量级坏块管理和负载平衡结合起来,实现了高速高可靠性设计。这种
基于FPGA硬件设计的NAND‑FLASH存储控制结构在小型电子系统设计、航空航天电子学系统
设计中具有广泛的应用前景,可以用于存储大量的图像数据和数据处理参数;同时,本发明
采用FPGA的RTL硬件设计方法,设计了一套完整的NAND‑FLASH坏块管理和读写控制流程和
控制结构,在NAND‑FLASH使用过程中,FPGA管理EBT(坏块列表),并存储到EEPROM中,每次上
电后将存储EBT和末块地址初始化到FPGA中,用于EBT对比,由此提高了NAND‑FLASH的管理
速度和可靠性;根据NAND‑FLASH应用场合和应用频率,简化坏块管理流程;通过两种EBT对
比的方法,提高了坏块表的准确性,提高了存储数据的验证能力;设计了一种坏块表地址映
射结构,标识了坏块类型和坏块映射路径,并在FPGA内实现快速映射和坏块查找,降低了设
计成本,提高了NAND‑FLASH管理运行速度。
[0048] 下面以某型号面阵CMOS探测器成像系统设计为例对本发明进行进一步说明。在某型号面阵CMOS探测器成像系统设计中,需要采用NAND‑FLASH存储探测器本底图像数据,并
在接收到一副感光图像后,在FPGA内部对两幅图像做减法处理,获得最终的感光图像。由于
探测器本底图像大小为1Gbit/幅,同时,需要存储像元校正参数,校正参数需要1Gbit,因
此,选用了三星公司的NAND‑FLASH芯片K9F4G08U0D作为存储芯片,并设置存储区2G,替换区
2G;
[0049] 首先,系统上电后,从EEPROM中读出EBT,此时的EBT为空白;然后进行坏块初始化,初始化后的坏块表信息如图6所示。由图可知,当前片的EB(坏块)数量为15个(0E),因此,替
换区使用的块数量为15;
[0050] 对NAND‑FLASH进行块写操作,写入具有一定规律的自校图形;当写入到坏块地址时,由于内部的坏块映射机制,自校图形自动写入到映射块中;从映射块中读出该自校图形
数据,与写入的自校图形数据完全一致,如图7所示。
[0051] 对NAND‑FLASH进行块擦除操作,当擦除的块地址为坏块时,实际擦除的块地址为映射后的块地址;通过直接读取映射块数据,判断擦除后的块数据均为0。
[0052] 在成像试验中,将探测器本体图像、像元校正参数存储到FLASH中。每次上电后,从NAND‑FLASH中读取探测器本体图像,以及像元校正参数,初始化到SDRAM中。当获得感光图
像后,将探测器本体图像、像元校正参数从SDRAM中读出,进行本底扣除,及像元校正计算,
得到的实际图像如图8所示,该实验表明该方法实用有效。
[0053] 当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当然可根据本发明作出各种相应的改变和变形,但这些相应的改变和
变形都应属于本发明所附的权利要求的保护范围。