引言
NANDFlash具有快速访问、低功耗、抗震性、尺寸小、重量轻等特性,并且稳定性良好,即使在系统电源关闭的情况下仍可保存数据。随着技术的发展,其价格降低且容量增大,这些使得NANDFlash逐渐成为嵌入式系统的一个独立部件,系统存储的工业标准。
对Flash存储器的测试与编写,目前流行的工业方法是采用遵守IEEE-1149.1标准,又称JTAG(joint test action group)规范的边界扫描技术,运用专门的商业测试板和配套软件来完成。不论是板级还是生产线级,都有厂家提供配套的软硬件解决方案。
基于JTAG规范的Flash控制电路,使用支持边界扫描的微处理器,配套专门的控制硬件和软件,逐渐形成一套Flash存储器PCB级的控制体系规范。然而,不论是支持边界扫描的微处理器,还是配套的硬件和软件,价格都是较昂贵的。不仅如此,使用这种方案将增加用户PCB的设计难度和产品成本,使用户产品结构变得复杂,硬件设计失去独立性,产品升级存在依赖性。
针对运用边界扫描技术进行Flash控制的上述弊端,本文提出一种控制结构复用的存储系统,包括存储卡和写卡器两部分。文中首先给出本存储系统的总体框架,而后阐述存储卡与写卡器的硬件结构,接着着重讲述存储系统软件架构与NANDFlash典型操作实现,用写卡器对三星公司各种存储容量的NANDFlash进行读、写、擦测试,结果表明本存储系统能高效完成对NANDFlash的各种操作。在所有测试成功后,将本存储系统的控制结构复用到嵌入式车载导航设备中,并成功移植控制软件。通过与边界扫描技术对比软硬件结构和测试结果可以看出,本存储系统具有结构简单、操作时间短、性价比高3大优点。
存储系统总体框架
本存储系统分为存储卡和写卡器两部分,其总体框架如图1所示。
图1 存储系统框架
图1中填充左斜线的箭头序列给出了编写NANDFlash的数据流向。PC通过标准打印口(line printer,LPT)控制NANDFlash,中间用50针卡座与50孔卡口配合,连接写卡器与存储卡。由于打印口的控制口线有限,不能对NANDFlash进行全面控制,因而在打印口和NANDFlash之间添加573锁存器,复用数据口线来扩充控制口线。
此外,由于嵌入式系统各元器件对工作电压都有较高的要求,必须在额定电压范围内工作,因此在写卡器和存储卡上都添加了稳压器,在写卡器上还添加了电压调节器。写卡器外部供电为12V直流电源。
从存储系统框架可以看出,整个系统并未使用控制芯片与类似边界扫描技术的高成本复杂控制电路,结构简单性价比高。后续实验结果表明,与边界扫描技术相比,本系统的NANDFlash操作时间有所缩短。
存储卡
通常,一个NANDFlash存储器的价格较一个NORFlash存储器便宜40%左右。与NOR Flash存储器相比,NANDFlash存储器的写访问时间快20倍。尽管NORFlash具有快速随机访问速度,而NANDFlash具有一个长的随机读反映时间,但其具有功耗低、存储容量大、快速擦/写的优点[8]。基于NANDFlash的上述优点,存储卡选择使用NANDFlash作为数据存储载体。
存储卡主要包括50孔卡口、NANDFlash、直流电源稳压器3个部分,其他还有一些电阻和电容,起辅助和增加电路稳定性作用。50孔卡口与写卡器的50针卡座配合,连接存储卡和写卡器。
写卡器
写卡器主要由标准打印口、直流电压调节器、直流电源稳压器、573锁存器和一些电阻电容组成,采用外接+12V直流电源供电,50针卡座采用机械式上下卡,使得存储卡与卡座的接触与分离相当方便。
打印口
标准打印口分为3个端口,基地址为数据端口,基地址+1为状态端口,基地址+2为控制端口。控制PC的CMOS设置打印口模式为ECP+EPP,打印口首地址即为0x378。以下阐述写卡器中如何使用打印口的3个端口。
(1)数据端口(0x378)
数据端口中有8根数据线,与NANDFlash相连传输一个字节的数据。其中,D0和D1被复用,通过573锁存器连接NANDFlash的CLE和ALE两个控制引脚。
(2)状态端口(0x379)
状态端口仅使用了第6个状态位作为NANDFlash的R/?B应答信号,其余3、4、5、7这4位打印机的标准应答未使用,保留供以后功能扩展使用。
(3)控制端口(0x37A)
控制端口使用了5个控制位,具体意义如图2所示。
图2 控制端口对NANDFlash的控制
D0、D1、D2位对NANDFlash进行控制,D3位对锁存器进行控制,D5位控制打印口数据端口的输入/输出方向。D5位置0时,PC通过打印口数据端口输出数据到NANDFlash;置1时,通过打印口数据端口接收NAND2Flash数据。在打印口连接器处,D0、D1、D3位反相输出,而D2位是正相输出,即D0、D1、D3位输出1,NAND2Flash获得0;D2位输出1,NANDFlash获得1。
打印口与存储卡连接
打印口通过50针卡座与存储卡的50孔卡口相连,从而连接存储卡上的NANDFlash,具体的口线连接如图3所示。
图3 写卡器与NANDFlash连接
在图3中,并未画出卡座与卡口的具体连接线,因为它们只是起连接中转作用。
由图3可知,打印口的引脚1控制NANDFlash芯片有效,引脚2~9控制NANDFlash的8个IO口,其中引脚2和3通过573锁存器复用控制NANDFlash的CLE(命令允许)和ALE(地址允许),引脚10接收NANDFlash的(状态信号),引脚14控制NANDFlash的(写有效),引脚16控制NANDFlash的(读有效),引脚17控制锁存器的(允许锁存)。其他的打印口引脚未使用,一些接高电阻,一些接地,在图中未画出。
NANDFlash需要+3.3V直流电供电,写卡器通过直流电源变压器调整电压后为NANDFlash供电。
存储系统软件
存储系统软件采用标准C编写,编译器为Borland公司的BC3.0。由于采用标准C编写程序,使得软件具有良好的兼容性和可移植性。目前,本系统软件支持三星公司的各种存储容量的NANDFlash,如32MB(兆字节)、64MB、128MB、256MB。
存储系统软件框架
存储系统由上至下分控制层、应用层、基础层3个层次,软件框架如图4所示。基础层封装了对NANDFlash操作的底层实现,构成一个底层平台,为应用层提供调用接口。应用层完成各种NANDFlash应用操作,为控制层提供调用接口。控制层执行全局调用。
控制层由主控模块组成,根据命令行参数调用应用层各模块。
应用层包括:
(1)初始化模块:读取NANDFlash的设备信息,获得其存储容量和分页分块参数。
(2)读数据模块:首先调用基础层的NANDFlash块偏移模块获得相对地址,而后调用读一页模块读取所需数据。
(3)写数据模块:首先同于读数据模块获得相对地址,而后调用基础层的写一页模块将数据写入指定地址。
(4)擦除模块:首先同于读模块获得相对地址,而后反复调用基础层的擦一页模块将整个NANDFlash擦除。
(5)帮助模块:提示使用者本软件系统的功能和相关命令行参数设置。
(6)NANDFlash复位模块:使NANDFlash复位,恢复到未发生任何操作前的状态。
(7)NANDFlash检查模块:显示NANDFlash的设备号、坏块个数、存储容量等相关信息。
基础层包括:
(1)NANDFlash块偏移模块:根据NANDFlash坏块记录模块记录的坏块信息,进行地址转换,将NAND2Flash中所有正常块的物理地址转换为相对地址。
(2)计时模块:记录读数据、写数据、擦除3种应用层操作所花费的时间,与此3种操作同时运行。
(3)读一页模块:根据NANDFlash读操作的时序图,向NANDFlash送入正确的命令字和地址,读取一页数据并存放到接收缓冲区中。
图4 存储系统软件框架
(4)写一页模块:根据NANDFlash写操作的时序图,向NANDFlash送入正确的命令字和地址,在NAND2Flash的指定地址写入一页数据。
(5)擦一页模块:根据NANDFlash擦操作的时序图,向NANDFlash送入正确的命令字和地址,擦除NAND2Flash指定地址的一页数据。
(6)NANDFlash坏块记录模块:在进行应用层擦除操作的同时,将发现的坏块全部记录下来,存放在NANDFlash的个块的页中。当NANDFlash的个块是坏块,或其坏块个数超过10时,此NAND2Flash将不再被使用。
(7)写命令模块:向NANDFlash送入命令字,控制NANDFlash下一步将进行何种操作。
(8)写地址模块:向NANDFlash送入地址,控制NANDFlash下一步将在什么地址进行操作。
(9)读NANDFlash状态模块:在对NANDFlash进行任何操作前,都必须读取NANDFlash当前的状态,判断其处于READY状态还是BUSY状态。
典型操作实现
NANDFlash操作中,为典型的是读操作。NANDFlash以存储容量128MB为界,界两端因分页分块参数不同而导致操作时序不同。以下以64MB和128MB的NANDFlash为例,分析它们读操作时序的不同,并给出关键的实现过程。
图5 64MB和128MBNANDFlash读操作时序对比
图5给出了64MB和128MB两种典型存储容量的NANDFlash的读操作时序对比,两者之间主要的不同集中在I/OX上。要进行数据的读取,首先必须向NANDFlash发送数据存放的地址。ANDFlash的地址分为列地址和行地址,列地址用于页内寻址,而行地址用于页寻址。128M字节NANDFlash的页容量为2048字节,而64MBNANDFlash的页容量为512字节,这使得它们的列地址线数目有所不同,前者为11根,后者为9根。128MB以下的NANDFlash将页容量固定为512字节,随着存储容量的增大,行地址线也随之增加;而128MB及以上的NANDFlash页容量是可以改变的,容量为64KB,同时页寻址空间也可以扩大,这增加了扩大寻址空间的灵活性和数据访问效率。I/OX上另一个重要不同点是128MB及以上存储容量的NANDFlash,在向其发送列地址和行地址后,还要发送一个命令字0x30,然后读取NANDFlash中指定地址的数据,而64MB的NANDFlash发送地址后直接读取数据。
以下给出从两种典型NANDFlash中读取一页数据的代码描述:
/*向NAND Flash发送读开始命令字*/
Flash Write CMD(CMD_READ_1_0);
/*按存储容量区分NANDFlash*/
switch(FlashLevel){
/*存储容量64MB的NAND Flash*/
Case FLASH_TYPE_64MB:
/*向64MB的NANDFlash发送列地址和行地址*/
Flash WriteADR(0x00);
Flash WriteADR((PageAddr)&0xFF);
Flash WriteADR((PageAddr>>8)&0xFF);
/*等待NANDFlash就绪,置打印口的数据端口为输入状态*/
Flash Write ADB((Page Addr>>16)&0xFF);
break;
/*存储容量128MB的NAND Flash*/
Case FLASH_TYPE_128MB:
/*向128MB的NAND Flash发送列地址和行地址*/
Flash Write ADR(0x00);
Flash Write ADR(0x00);
Flash Write ADR((Page Addr)&0xFF);
Flash Write ADR((Page Addr>>8)&0xFF);
/*等待NANDFlash就绪,置打印口的数据端口为输入
状态*/
FlashWriteCMB(CMD_READ_3);
break;
}
/*读取一页数据存放到接收缓冲区中*/
for(i=0;ipTarget[i]=FlashReadDAT();
}
/*使NANDFlash无效*/
FLASH_CE_HIGH;
读数据流程完全遵从时序图,首先送第1个读命令字和行列地址,128MB的NANDFlash要送第2个读命令字,然后通过将打印口控制端口的第5位置1使数据端口处于输入状态,以接收NANDFlash中指定地址的一页数据,并将数据写入接收缓冲区,使NANDFlash无效,读取一页数据操作完成。
对时序图中NANDFlash各控制命令的控制,由打印口的控制端口完成,通过控制端口各位的电平输出实现对NANDFlash的控制。
实验
在设计实现了存储系统软硬件的基础上,针对三星公司不同存储容量的NANDFlash进行了一系列的实验,实验环境为赛阳1.8G,128MB内存,CMOS并口设置为基地址0x378,模式ECP+EPP,操作系统为Windows98。
表1 擦/读/写NANDFlash实验数据
表1给出了擦/读/写NANDFlash的实验数据。对64MB、128MB、256MB3种存储容量的NANDFlash进行了5次擦除实验,针对6种尺寸的实验文件进行了读取和写入实验,根据这些实验数据绘出了图6的实验曲线。
图6(a)给出了擦除64MB、128MB、256MB的NANDFlash的5条实验曲线。由图可知,5条曲线非常接近,且擦除时间随NANDFlash存储容量的变化基本呈线性变化。
图6 擦/读/写NANDFlash
图6(b)给出了从64MB、128MB、256MB的NAND2Flash中读取不同尺寸数据所花费时间的实验曲线。由图可知,不管是何种存储容量的NANDFlash,其读取时间随读取数据尺寸变化基本呈线性变化。
图6(c)给出了向64MB、128MB、256MB的NAND2Flash中写入不同尺寸文件所花费时间的实验曲线。由图可知,不管是何种存储容量的NANDFlash,其写入时间随写入文件尺寸变化基本呈线性变化。
对比图6的(b)和(c),不难发现对于相同存储容量的NANDFlash,写入时间比读取时间稍长一些,这与读和写的控制时序有关。
从图6的(b)和(c)中还能发现对64MB的NAND2Flash读取和写入相同尺寸数据所花费的时间较128MB和256MB稍长,说明增大页容量后NANDFlash的存取速度得到了提高。
表2 测试1MBFlashs
表2为文中通过边界扫描技术对Flash编写的测试结果,其中采用FFC方法获得的Flash编写时间是短的,编写1MB为7.5s。图6的实验曲线表明Flash编写时间随其存储容量基本呈线形变化,由此推算采用FFC方法编写容量为64MB、128MB、256MB的时间分别为480s、960s、1920s,与表1的实验数据比较,编写时间明显加长了。尽管NANDFlash复用数据线和地址线,缩短了边界扫描链的长度,使得对NANDFlash的编写时间有所缩短,但边界扫描技术对NANDFlash的控制信号始终是通过TAP(testaccessport)板驱动微处理器产生的,信号周期总是长于直接控制信号周期。
由表1和表2的实验数据和实验结果分析可知,与边界扫描技术相比,本存储系统对NANDFlash的操作时间有明显缩短。
表1的实验数据表明,本存储系统能很好地完成对NANDFlash的各种操作。由于本系统结构简单,未使用任何微处理器,因而性价比较高。
在成功进行NANDFlash擦/读/写实验后,本存储系统对NANDFlash的控制结构复用到了嵌入式车载导航设备中。由于软件采用标准C编写,控制结构复用,使得软件移植非常方便,仅需改动对GPIO(general purpose input output)控制部分的程序。将本存储系统的软硬件复用到嵌入式车载导航设备的成功,表明本系统对NANDFlash的控制结构具备良好的复用性和较高的实用性。
结论
本文提出一种控制结构复用的NANDFlash存储系统,完成了对NANDFlash的各种操作。与边界扫描技术相比,本存储系统结构简单、操作时间短、性价比高。本存储系统的成功实现,为其他嵌入式产品存储系统的设计开发提供了一种切实可行的思路。一类采用NANDFlash作为数据存储介质的嵌入式产品均可复用本存储系统对NANDFlash的控制结构,实现对NANDFlash的控制.下一步的工作在于优化存储系统的硬件和软件,加快NANDFlash操作的速度。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。