关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于FPGA的NAND FLASH坏块表的设计与实现

基于FPGA的NAND FLASH坏块表的设计与实现

作者:曾锋,徐忠锦(北京青云航空仪表有限公司,北京 101399)时间:2022-12-21来源:电子产品世界收藏
编者按:在现代电子设备中,越来越多的产品使用NAND FLASH芯片来进行大容量的数据存储,而且使用FPGA作为核心处理芯片与NAND FLASH直接交联。根据NAND FLASH的特点,需要识别NAND FLASH芯片的坏块并进行管理。FPGA对坏块的管理不能按照软件的坏块管理方式进行。本文提出了一种基于FPGA的NAND FLASH芯片坏块表的设计方法,利用FPGA中RAM模块,设计了状态机电路,灵活地实现坏块表的建立、储存和管理,并且对该设计进行测试验证。


本文引用地址:http://www.amcfsurvey.com/article/202212/441876.htm

0 引言

随着技术的发展,越来越多的电子设备的数据采用 芯片存储产生的大量数据。在传统的电路设计中,常用ARM、DSP 等处理器来用于NANDFLASH 的接口。但是随着实时性要求的提高,越来越多的设备中采用了 来对 进行管理,释放处理器任务资源。

由于 的特点,NAND FLASH 不可避免地会有产生,使用NAND FLASH 时,需要对进行管理,建立坏坏表(以下简称“BBT”)。一般处理管理BBT 的方法,是采用建立数组的方式,将检测到的坏块编号记录在数组中,在操作NAND FLASH 时,对将要操作的块的编号与BBT 的数据进行对比,如果是坏块,则跳过该块,不使用。但是这是建立数组的方法并不适用于 的设计操作,本文根据 的特点,利用FPGA 的Block RAM 资源,提出了一种、存储的方法。

1 电路说明

1.1 NAND Flash芯片说明

NAND Flash芯片使用型号是三星公司的K9K8G08U0A,单片容量为1 G×8 Bit。该芯片总共有8 192 块,每块中含有64 页,每页共2 112 个字节(前2 048 个为主存储空间,后64 个为扩展存储空间)。芯片的读写操作均以页为单位进行。芯片容量结构如图1 所示。

1671583664340013.png

图1 NAND Flash内部存储空间结构图

其中,NAND Flash 芯片分为列地址(Column Address)和行地址(Row Address),列地址用于每页中的字节寻址,行地址用于芯片的块、页的寻址,其中行地址的A18~A30 为芯片的块地址。

1.2 FPGA电路说明

FPGA 使用型号为Xilinx(现AMD)公司Virtex II系列的XC2V1000,芯片内部有5 120 个Slice、40 个乘法器、720 kbit 的RAM 模块资源,8 个DCM 时钟管理模块。其主要参数如图2 所示。

image.png

图2 FPGA芯片说明

2 坏块表设计

2.1 坏块表检测机理

根据NAND FLASH 芯片的检测原理,芯片出厂后的需要检测芯片每个部分的页1和页2中列地址为2 048的存储的数据值。若值为0xFF,则该部分为好块;若值不为0xFF,则该部分为坏块。NANDFLASH 流程如图3所示。

1671583833851639.png

2.2 坏块表的设计思路

根据FPGA 的应用特点,本次NAND Flash 的坏块表采用对所有块建立坏块信息的方式,建立一个完整的块状态信息表,即每一个块用1 个Bit 表征其是否是好块还是坏块,定义为:0 代表该块是良好的,1 代表该块是故障的。本设计中,NAND Flash 有8 192 个块,用8 192 个Bit 代表每个块的状态信息,正好用一个1 024×8 bit 的RAM 对所有的坏块表数据位进行存储,坏块表存储示意图见图4。

1671583928396169.png

2.3 坏块表的存储

在本设计中,NAND FLASH的坏块表储存在NAND FLASH的第1 块的第1 页处。第1 块只用于坏块表的存储,不再用于存储其他数据,坏块表在第1 块中的位置见图5。

1671583992566178.png


2.4 坏块表的建立流程

NAND FLASH 在使用时,初次上电后,写入数据之前需要对芯片的块的好坏进行扫描,从而得到坏块表。在本型号中,NAND FLASH 的出厂坏块信息需要查询每个块的第1 个页和第2 个页中的列地址为2 048 的空间上数据是否都为“0xFF”,数据为“0xFF”,则当前块为好块,否则当前块为坏块。

坏块表的建立的状态机流程如图6 所示:上电后,状态机从状态1 跳转至状态2,读取第一块中的数据,判断是否为数据头0xAA、0x55、0xAA、0x55、0xAA、0x55、0xAA、0x55。如果数据头相符,则状态跳转至11,直接读取坏块表到RAM,建立起坏块表信息。如果读到的数据头与上述的数据头不相符,则意味NAND FLASH 未存在坏块表,需要建立坏块表。状态机状态依次跳转至状态4、状态5、状态6,即状态机对当前块的中的第1 页和第2 页的中列地址为2 048 的空间进行访问,根据读值判别当前块是否为坏块,如果是坏块将对应的寄存器位置1。当扫描完8 个块,状态机跳转至状态7,则将8 个块的坏块信息写入RAM;当未扫描满8 个块,状态机跳转至状态8,块地址加1,对下一个块进行检测。当所有的8 092 个块都被检测后,则状态机跳转至状态10,将数据头以及RAM 数据全部写入NAND FLASH 的第0 块,至此,初始坏块表建立完成。

坏块表建立完成后,坏块信息存在RAM 中,在正常存取操作时,就可以直接读取RAM 模块,获取坏块信息。

当电路下电,再次上电后,状态机就可以从块0 中读取到数据头,跳过初次坏块表的建立过程,状态机从第1 块中继续读取到坏块表,加载到RAM 中,完成后交其他模块进行后续的操作。

1671584113376937.png

3 验证情况

为验证是否正确的建立和存储坏块表,需要将坏块表的处理模块嵌入FPGA 的中整个NAND FLASH 的接口控制器中,验证的电路如图7 所示。坏块表处理模块与1 个1 024×8 Bit 的RAM 连接,该RAM 用于存储坏块表。NAND FLASH 接口模块根据NAND FALSH芯片的读写接口时序设计,包含基本的Read 模块,Write 模块和擦除模块。NAND FLASH 接口模块受坏块表处理模块的控制。正常工作模块在坏块表处理模块工作完成之后开始工作,通过UART 接收上位机的命令,控制NAND FLASH 接口模块与NAND FLASH 交联;同时,正常工作模块也通过UART 上报数据和信息给上位机。

1671584198970082.png

验证时,通过上位机发送读取命令,正常工作模块控制NAND FLASH 接口模块将NAND FLASH 块0 中的内容读取出来,从而判断是否正确地建立了坏块表,见图8。

1671584279357118.png

image.png

1671584245323786.png

图8 坏块表

通过读取内容发现,新板卡中的NAND FLASH 成功地建立了坏块表,本测试电路中NAND FLASH 芯片有1 个坏块,为第1 761 块。

4 结束语

通过验证证明,本文设计的基于FPGA 的坏块表设计方式能够正确地实现坏块表建立和存储,坏块表能够方便地被FPGA 使用,坏块表能完整地表征整个NANDFLASH 芯片的块的状态,RAM 结构能很灵活方便地在FPGA 中进行调用,满足对FPGA 对NAND FLASH 芯片的控制需要。

参考文献:

[1] 舒文丽,吴云峰.基于NAND FLASH的海量存储器的设计[J].电子器件,2012,2(35):44-46.

[2] 赵亚慧.基于NAND Flash的高速大容量存储系统的设计[J].电光与控制,2016,5(23):37-40.

[3] 乔亚飞,,李华旺.基于FPGA的星载NAND FLASH控制器的设计[J].电子设计工程 2018,7(26):29-32.

[4] 周浩,王浩全.基于FPGA和NAND FLASH的便携式信号采集系统设计[J].测控技术与仪器仪表,2018,44(9):82-86.

[5] 张雯,崔建杰.一种多通道NAND FLASH阵列的坏块管理方案[J].电子器件,2014,10(37):33-36.

[6] 乔立岩,张鹏.一种新型NAND FLASH 坏块管理算法的研究与实现[J].电子测量技术, 2015,11(38):19-21.

(本文来源于《电子产品世界》杂志2022年12月期)



评论


相关推荐

技术专区

关闭