一种基于大容量数据记录仪的坏块管理设计

2014-03-28 01:53:42胡红王少云叶艳
电子设计工程 2014年8期
关键词:存储芯片记录仪芯片

胡红,王少云,叶艳

(1.南京航空航天大学电子信息工程学院,江苏南京210016;2.南京航空航天大学无人机研究院,江苏南京210016)

Flash芯片作为一种新兴的半导体存储器件,具有集成度高、非易失性、功耗低、价格低、容量大、可擦除次数多等优点,被广泛应用于大容量数据存储系统中。Samsung公司的K9F8G08U0M单片容量达到8GB,可通过多片NAND Flash串联的方法扩大系统容量。但是由于工艺和使用环境等因素,NAND Flash较其他形式的存储芯片更易出现坏块问题,同时由于NAND Flash存储芯片的容量大,出现坏块问题也更多。因此,在使用NAND Flash存储芯片时,对坏块的管理愈显重要。

使用NAND Flash存储芯片时,对坏块的管理的一般方法有:1)基于FPGA的片内RAM,存储有效块信息,将有效块地址作为数据存入RAM中。进行读写操作时,从RAM中读出有效块地址。2)基于FPGA内部RAM,RAM地址与块地址相对应,在与坏块地址相对应的RAM中存储1,而其他存储0[1]。

本文提出了一种基于FPGA的大容量数据记录仪的坏块管理方法,利用FPGA[2]内部RAM[3]空间建立坏块地址信息存储区,通过查询存储区中的信息,来确定当前存储块是否损坏,若是坏块则跳过,从而避免对坏块的操作,实现了对Flash存储空间的有效管理。该坏块管理方案在不增加FPGA使用的复杂程度的条件下,需要的内存资源比方法1、方法2明显减少。

1 NAND Flash K 9F8G08U0M简介

文中的大容量数据记录仪采用9片Samsung公司的NAND Flash芯片K9F8G08U0M,其总容量达到72G。K9F8G08U0M芯片由4096个块组成,每个块有64页,每个页为(4K+128)Bytes,其中4KBytes为Main Area,128Bytes为Spare area,Main Area专门存储数据,Spare Area存储其他信息,如ECC校检码、坏块信息等。K9F8G08U0M的读写操作以页为最小单位,擦除操作以块为最小单位进行,禁止按位擦除。8个I/O引脚为多路复用,既可以作为数据线进行数据传输,也可以作为地址线进行寻址。这个方案显著减少了芯片引脚,允许在保持系统板不变的情况下升级存储密度[4]。

2 坏块管理设计方案

K9F8G08U0M芯片是数据记录仪的核心部分,若某个块发生损坏时,视为坏块。记录仪工作时,剔除坏块,只将数据存储到好块中,从而提高存储数据的正确性,即数据记录仪使用NAND Flash存储芯片时,需要对存储板坏块进行管理。

2.1 坏块产生原因及分类

由于Flash的制造工艺不能保证其存储阵列在其生命周期中保持性能的可靠,因此,在Flash的生产与使用过程中会产生坏块。

NAND Flash的坏块可分为两类:固有坏块、使用坏块。固有坏块是出厂前,由于生产工艺所产生的坏块。厂商已经对固有坏块进行了坏块标记,在每个块第1页的第一个备份字节标志坏块值,若为0xff,则为好块,若为非0xff,则为坏块。为了保持与固有坏块信息一致,使用过程中发现新的坏块时,将新的坏块第一页的第一个备份字节标志为非0xff。

使用坏块是出厂后,用户对芯片使用产生过程中产生的新坏块。

2.2 坏块管理设计方案分析与实现

本文提出的坏块管理方法是对方法1上进行改进后形成的。我们称为方法3。方法3在FPGA中内建片上RAM来存储坏块地址信息,通过坏块查询模块来辨别当前存储块是否有效。坏块管理需要做以下工作:识别坏块并建立坏块表(BBT,bad block table),将坏块地址信息存储到坏块表中;在对当前存储块进行操作时,发生错误需更新BBT,并且通过坏块查询模块来跳过坏块,从而对有效块进行操作。

2.2.1 识别坏块与存储信息

第一次对NAND Flash进行操作之前,先要识别固有坏块,建立初始BBT。其操作流程为:设置块初始地址为0,检查块中备份区的第一个字节是否为0xff,如果是,则为有效块,如果不是,则为坏块,产生初始坏块表(后面的块为坏块,则需更新BBT),将该坏块地址信息存储进去,增加块地址,继续上面的步骤,直到最后一块。流程图如图1所示。

图1 创建坏块表的流程图Fig.1 Flow chart of creating initial bad block table

在坏块管理过程中,不仅仅要识别坏块,而且必须将坏块地址信息存储起来,这样在对存储块进行操作时只需要检查该块是否在BBT中,不需要每次去识别,节省了大量时间。首先在FPGA中建立RAM空间,将坏块地址信息存储到RAM坏块地址信息存储区,然后再写入到NAND Flash的一个有效块中。为了防止意外掉电,每个BBT必须在Flash里保存两份[5]。当发现两个BBT不一样时,说明出现状况,必须重新建立坏块表[7]。

NAND Flash除了固有坏块,对NAND Flash进行读写擦除操作过程中也会随机产生新的坏块,这时需要更新BBT。NAND Flash读操作失败时,一般不会造成整页全部出错,仅仅是页中的一个或几个比特出错。文中使用一种比较专用的校检—ECC(Error Correction Code)。ECC能够纠正一个比特错误以及检测两个比特错误,而且计算速度很快[6]。本设计中,对每个512Bytes原始数据生成3个字节ECC校检码:8比特的列校检码和16比特的行校检码。对于每页4KB的数据来说,会产生24Bytes的ECC校检码。当出现1bit错误时,可纠正;当出现2bits以上的错误,就将该块标记为坏块,这时需要更新BBT,如图2所示。当擦写操作失败时,其状态会相应地反映到状态寄存器上,将坏块里面的内容备份到有效块中,然后将其标志为坏块,这时也需要更新BBT,如图3所示。

图2 读操作失败更新BBTFig.2 Update BBT with failure of read operation

2.2.2 坏块查询模块

对当前存储块进行操作时,需要调用坏块查询模块。上电时,首先将坏块信息从Flash的存储区读入到RAM中。当对第n块进行操作时,只需调用坏块查询模块,查询FPGA内部RAM的坏块地址信息,如果该块为坏块,则对第n+1个坏块查询,直至查询到一个有效块。查询坏块模块部分代码如下所示。

always@(posedge clk or negedge rst)

if(!rst)

begin

valid_blockaddr<=12'b0;

i<=5'b0;

read<=1'b0;

图3 擦写操作失败更新BBTFig.3 Update BBT with failure of erase and write operation

num<=5'b0;

end

else

begin

if(i<64)

begin

block_addr<=addr[30:19]+num;

read<=1'b1;

address<=i;

if(block_addr==data)//说明该块为坏块,设num为1,则块地址加1

begin

i<=0;

num<=num+5'b1;

end

else//与下一个地址信息对比,num不变,则地址不变

begin

i<=i+5'b1;

num<=num;

end

end

else//当i大于63时,说明已与所有坏块地址信息对比过,并且该块不在坏块中

begin

valid_blockaddr<=block_addr;

i<=0;

num<=5'b0;

end

end

其中read、address分别为存储坏块地址信息RAM的读使能端、地址,数据宽度为12,深度为64。addr为31位操作地址,data为RAM输出的坏块地址,将操作地址与坏块地址data相比较,如果数据相同,说明该块为坏块,则将块地址加1,从而跳过坏块。由于所选型号不同以及工艺上的差别,坏块数目自然不同,因此根据实际情况建立RAM[5]。

2.3 坏块管理设计方法比较

由于一般坏块的数量不超过总量的2%,所以其坏块信息量较有效块信息量小很多。方法3只占用FPGA较少的RAM资源。对于单片K9F8GU0M而言,对方法1、方法2以及本文所提出的方法进行存储信息以及占用RAM资源的比较,如表1所示。方法3占用RAM的资源大约是方法1的2.5%,是方法3的30%。

表1 坏块管理设计方法比较Tab.1 The comparison of bad block storage methods

3 仿真分析

3.1 仿真试验

本文使用Verilog HDL语言进行编程,在QuartusII软件平台上对实现的功能进行编译、运行,并且在Modelsim仿真平台上编写测试[8]平台,对模块进行功能仿真。图4、图5分别为识别坏块仿真图、坏块查询仿真图。

图4 识别坏块仿真图Fig.4 Simulation diagram of identifying bad block

3.2 结果分析

图5 坏块查询仿真图Fig.5 Stimulation graph of checking bad block

图4为识别固有坏块仿真时序。该数据记录仪由9片K9F8G08U0M组成,图中CE_L为9位片选信号,低电平有效;ALE_H为地址锁存使能,高电平有效;CLE_H为命令锁存使能,高电平有效;WE_L为写使能,低电平有效;RE_L为读使能,低电平有效;RB为设备状态对于识别坏块的仿真,本设计片选第1个芯片,读出每块的第一个备份字节。块的初始地址为0,读出数据后,将块地址加1。由仿真图可知第0,1块为好块,第2块为坏块,依次类推。仿真结果表明该坏块管理中的坏块识别模块能够实现识别坏块的功能。

图5为坏块查询模块仿真图。为了便于观察,设置RAM中第1、2、3、4地址存储的坏块地址为第1、3、5、6块。图5中addr为31位操作地址,分别设置为0x00000000、0x00180000、0x00280000,其对应的块地址为第0、3、5块;valid_block为12位有效块地址。由图5可知,当对第3块操作时,由于该块为坏块,所以跳过坏块,对第4块进行操作;当对第5块进行操作时,由于该块为坏块,并且下一个块即第6块也为坏块,所以跳到第7块进行操作。仿真结果表明,该坏块管理中坏块查询模块能够实现辨别当前存储块是否为坏块,并且跳过坏块的功能。

4 结束语

文中的大容量数据记录仪的存储板由9片NAND Flash串联组成,存储容量大,出现坏块问题的可能也多,因此提出了一种基于FPGA存储坏块地址信息的坏块管理方案,来解决存储板中的坏块管理问题。仿真分析表明,该坏块管理方案能够有效地解决NAND Flash的坏块管理问题,具有占用FPGA资源少的优点,也可供其他类型的大容量数据记录仪作为参考。

[1] 张胜勇,高世杰,吴志勇,等.基于FPGA的NAND Flash坏块处理方法[J].计算机工程,2010,36(6):239-243.ZHANG Sheng-yong,GAO Shi-jie,WU Zhi-yong,et al.Bad block handle method of NAND flash memory based on FPGA[J].Computer Engineering,2010,36(6):239-243.

[2] 华清远见嵌入式培训中心.FPGA应用开发入门与典型实例[M].北京:人民邮电出版社,2008.

[3] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008.

[4] Samsung Electronics.K9F8G08UXMFLASH Memory[M].2007.

[5] 罗晓,刘昊.一种基于FAT文件系统的NAND Flash坏块处理方法[J].电子器件,2008,31(2):716-719.LUO Xiao,LIU Hao.Method of NAND flash memory bad block management based on FAT file system[J].Chinese Journal Of Electron Devices,2008,31(2):716-719.

[6] 韩勇豪,王少云.一种固态飞行参数记录仪的研制[J].电子设计工程,2011,19(16)159-162.HAN Yong-hao,WANG Shao-yun.Design of a solid flight parameter recorder[J].Electronic Design Engineering,2011,19(16)159-162.

[7] 周军.NAND Flash的坏块管理设计[J].单片机与嵌入式系统应用,2010(9):15-17.ZHOU Jun.Bad block management for NAND flash[J].Microcontrollers&Embedded Systems,2010(9):15-17.

[8] 王文龙,张少博,陈海峰.一种试验数据处理软件设计[J].火箭推进,2012(1):76-80.WANG Wen-long,ZHANG Shao-bo,CHEN Hai-feng.Design of a test data processing software[J].Journal of Rocket Propulsion,2012(1):76-80.

猜你喜欢
存储芯片记录仪芯片
做梦记录仪
基于GPS的便携式汽车行驶记录仪的研制
中国存储芯片打破韩美日垄断局面迈出坚实一步
多通道NAND Flash存储芯片控制器的设计与实现
无线电工程(2018年9期)2018-08-23 02:11:20
汽车记录仪保险丝搭接转换装置及其模具设计
芯片测试
多通道采样芯片ADS8556在光伏并网中的应用
iPhone换闪存加容量这事靠谱吗?
电脑迷(2015年12期)2015-04-29 23:22:51
大容量Flash在井下记录仪中的应用
武汉新芯3D NAND将成为中国存储芯片产业弯道超车的切入点
电子世界(2015年24期)2015-01-16 03:19:38