首页> 中国专利> 一种在Windows CE环境下建立大页面NAND Flash存储系统的方法

一种在Windows CE环境下建立大页面NAND Flash存储系统的方法

摘要

本发明公开了一种在Windows CE操作系统环境下建立大页面NAND Flash存储系统的方法,其采用大页面NAND Flash器件,以及其与内部自带NAND Flash控制器的嵌入式处理器之间的硬件接口方式;将Windows CE系统启动装载程序EBoot代码中设备块尺寸定义等于NAND Flash器件的块尺寸,设备页面的尺寸定义等于NAND Flash器件的页面尺寸,页地址和块地址之间互相转换的宏定义符合实际器件定义;设备驱动程序代码中FMD xxx系列函数的实现中的存取缓冲区大小与大页面NAND Flash存储器件的页尺寸相同;通过修改FAT文件系统的扇区大小来匹配大页面NAND Flash的页面大小。适用于任意页面尺寸和块尺寸的NAND Flash。

著录项

  • 公开/公告号CN101923570A

    专利类型发明专利

  • 公开/公告日2010-12-22

    原文格式PDF

  • 申请/专利号CN201010235291.4

  • 发明设计人 陈一新;莫家贵;廖颖;汪玮;

    申请日2010-07-21

  • 分类号G06F17/30(20060101);

  • 代理机构34114 合肥金安专利事务所;

  • 代理人金惠贞

  • 地址 230088 安徽省合肥市蜀山区香樟大道199号

  • 入库时间 2023-12-18 01:39:26

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-07-04

    授权

    授权

  • 2011-02-02

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20100721

    实质审查的生效

  • 2010-12-22

    公开

    公开

说明书

技术领域

本发明涉及一种在Windows CE环境下建立大页面Nand Flash存储系统的方法,属于计算机操作系统与存储系统领域。

背景技术

NAND Flash是一种新型的存储器件,由于其具有存储密度大、写入擦除速度快、成本低廉等突出优点,目前已经成为市场上嵌入式系统的主流存储器件。和另一种主流的闪存技术NOR Flash相比,NAND Flash写(编程)和擦除操作快,但随机存取慢;NOR Flash随机存取快,能以字节为单位写,但擦除慢。NAND相对于NOR存储单元密度高、成本低、性价比好,适合作为大容量存储。

Windows CE嵌入式操作系统是微软公司在1996年推出的一种全新开发的操作系统,具备抢先式多任务功能以及强大的通信能力,专门应用在信息设备、移动应用、消费类电子产品以及嵌入式应用等非PC领域。

NAND Flash由块(block)构成,块由页(page)构成。擦写以块为单位,读写以页为单位。每个页包含数据区和空闲(spare)区,spare区用于纠错码(ECC)等软件开销。NAND Flash复用指令、地址和数据总线,串行地存取数据和发指令,节省芯片引脚数,不用改变硬件设计就可支持更大容量的芯片。

对NAND的操作主要有读、写、擦除三种:页写入、块擦除将块全部字节编程为0xFF来回收空间.工作时序都是:先发操作指令,再发要操作单元的地址,待芯片就绪后进行各自的处理,如读操作是读数据并做ECC校验。

早期的Nand Flash器件(如三星的K9K5608、K9F1208等型号)页面大小均为512字节,其最大容量一般不超过1Gbit,读写速度一般限制在12.65MByte/s和2.33MByte/s以下。为了进一步扩大容量,提高性能,目前新一代的NAND Flash(如三星的K9F1G08、K9K2G08,现代的HY27UF084G等型号)普遍采用了2048字节的大页面结构,最大容量可达32Gbit,理论读写速度分别可以达到16.13MByte/s和5.2M/s,使器件的容量和性能得到了显著的提高。在未来,采用4096乃至8192字节页面的超大容量NAND Flash也即将问世。

但与常规页面器件相比,大页面NAND Flash在命令码、读写地址等方面的操作都有所不同;目前在Windows CE操作系统环境下使用的主要是FAT文件系统,目前仅能应用于512字节页面的常规NAND Flash,无法应用于大页面NAND Flash器件;有其他专利提出将大页面NAND Flash器件虚拟成多个常规页面器件的方法,但是操作效率低下,不能充分利用器件本身的特点和性能优势,且占用了额外的系统资源。

发明内容

本发明的目的在于克服上述Windows CE操作系统环境下FAT文件系统扇区与实际大页面NAND Flash器件页面大小不一致而无法建立存储系统的问题,提供一种在WindowCE操作系统环境下建立大页面NAND Flash器件存储系统的方法。

本发明解决其技术问题采用的技术方案如下:

一种在Windows CE环境下建立大页面Nand Flash存储系统的方法,其特征在于:采用2048字节及其以上大页面的NAND Flash器件,以及其与内部自带NAND Flash控制器的嵌入式处理器之间的硬件接口方式;

将Windows CE系统启动装载程序EBoot代码中设备块尺寸定义等于NAND Flash器件的块尺寸,设备页面的尺寸定义等于NAND Flash器件的页面尺寸,页地址和块地址之间互相转换的宏定义符合实际器件结构的定义;

设定Windows CE设备驱动程序代码中FMD xxx系列函数的实现中的存取缓冲区大小与大页面NAND Flash存储器件的页尺寸相同,以及向FAL闪存抽象层返回的信息符合器件内部结构信息;

根据大页面NAND Flash器件的实际页面大小改造FAT文件系统扇区大小,包括对核心文件fatfsd.dll和fatutil.dll的修改和重编译方法使文件系统扇区大小与实际器件页面大小相一致。

本发明通过修改FAT文件系统的扇区大小来匹配新型大页面NAND Flash的页面大小的方法,有效的解决了Windows CE操作系统环境下FAT文件系统扇区与实际大页面NAND Flash器件页面大小不一致而无法建立存储系统的问题,且最大程度地利用了器件本身的结构特点,使存储系统的存取效率达到了极大的优化。适用于任意页面尺寸和块尺寸的NAND Flash。

附图说明

图1为大页面NAND Flash与嵌入式处理器的连接关系图;

图2为S3C2440与K9F1G08U0A接口电路图;

图3为S3C2440处理器NAND Flash操作信号时序图;

图4为Windows CE环境下NAND Flash存储系统软件结构。

具体实施方式

下面结合附图对本发明作进一步的说明。

1、硬件接口电路设计

图1所示为三星公司S3C2440A嵌入式处理器。S3C2440A采用ARM920T内核,主频为400MHz,并自带NAND Flash控制器,能方便地与各种NAND Flash器件进行接口,通过对内部寄存器的读写实现对NAND Flash器件的操作。Nand Flash器件采用三星的2048字节大页面K9F1G08芯片。其管脚作用见表1。

表1

S3C2440通过内部寄存器进行对外部NAND Flash器件的控制,并通过管脚NCON、GPG13、GPG14、GPG15来设置外部NAND Flash的类型;根据K9F1G08U0A的特征,NCON设置为高电平表示大页面器件,GPG13设置为高电平表示页面大小为2048字节,GPG14设置为低电平表示NAND Flash需要4次地址周期操作,GPG15设置为低电平表示器件数据总线宽度为8位。电路设计如图2所示。

在操作前,首先需要先对S3C2440的NAND Flash配置寄存器NFCONF进行正确的设置,以确定外部连接的NAND Flash器件的页面大小、地址周期以及数据总线宽度等信息。

当需要进行一次写数据操作时,首先对寄存器NFCMMD写入命令码,处理器就会自动先将命令控制信号CLE置高,然后通过8位数据总线DATA[7..0]发出写命令码,并通过发出低电平的写使能信号nFWE将命令码写入NAND Flash器件,最后通过设备就绪信号RnB确定操作是否成功。在命令发送成功后,对寄存器NFADDR写入地址,处理器会将地址使能信号ALE置高,并通过8位数据总线DATA[7..0]送出地址,待RnB信号反馈操作成功后,对寄存器NFDATA写入数据即可实现NAND Flash的数据写入。读数据以及擦除等其他操作也与此过程类似。信号时序关系如图3所示(图中HCLK信号为处理器内部总线时钟信号)。

如果所用处理器不含NAND Flash控制器,则需要根据NAND Flash的信号时序要求用通用输入输出引脚模拟出所需的命令使能、地址使能、数据总线等信号。

2、软件设计实现步骤

Windows CE环境下与NAND Flash相关的软件包括EBoot、块设备驱动程序和FAT文件系统三个部分;其中,块设备驱动程序、文件系统和Windows CE的分区管理程序构成了操作系统的存储子系统。各个功能模块的结构关系如图4所示。

步骤1:修改EBoot

EBoot是Windows CE自带的一个Bootloader程序,其中包含了系统启动和初始化的一系列代码,完成系统参数初始化、创建分区及文件系统、提供USB接口及以太网通信、烧写、装载和运行操作系统镜像等一系列功能,其中对分区及文件系统的操作就包含了对NAND Flash进行操作的代码。

EBoot的代码中和NAND Flash有关的部分主要涉及对分区及文件系统进行操作的几个函数,其对NAND Flash的操作也是通过调用与块设备驱动程序共用的FMD_xxx系列函数来完成的。除此之外还需要对EBoot的头文件Loader.h中的几个相关的宏定义进行修改:

#define SECTOR_SIZE      204811  //定义页面大小

#define PAGES_PER_BLOCK  64      //定义块中的页面数

#define SECTOR_TO_BLOCK(sector)      ((sector)>>6)//页地址到块地址的转换,页地址右移6位即为块地址

#define BLOCK_TO_SECTOR(block)((block)<<6)//块地址到页地址的转换,块地址左移6位即为页地址

步骤2:编写块设备驱动程序

Windows CE操作系统为包括NAND和Nor在内的Flash器件建立了统一的块设备驱动程序结构,由MDD层的FAL(闪存抽象层)和PDD层的FMD_xxx系列函数组成。FAL包含存储组织、损耗平衡、坏块管理等代码,通过调用FMD_xxx系列函数完成器件的底层操作,向上层操作系统提供完备的块设备驱动程序接口,其成员和功能见表2所示。

表2

  函数  功能  FMD_Init  驱动程序加载初始化  FMD_Deinit  驱动程序卸载  FMD_GetInfo  获取Flash器件信息(器件类型、块页的大小、数量等)  FMD_GetBlockStatus  获取块状态  FMD_SetBlockStatus  设置块状态  FMD_ReadSector  读取页面数据  FMD_WriteSector  写入页面数据  FMD_EraseBlock  擦除块  FMD_PowerUp  电源管理  FMD_PowerDown  电源管理  FMD_OEMIoControl  为上层的DeviceIoControl函数调用提供底层实现

EBoot和块设备驱动程序Flashdrv.dll都通过FMD_xxx系列函数对NAND Flash进行底层操作,下面是读扇区函数FMD_ReadSector的部分代码:

BOOL FMD_ReadSector(SECTOR_ADDR startSectorAddr,LPBYTE pSectorBuff,

                      PSectorInfo pSectorInfoBuff,DWORD dwNumSectors)

{

……

  NF_CLEAR_RB();//释放Ready信号

  NF_CMD(0x00);//送第一次读操作码

  NF_ADDR(0x00);//送列地址低位

  NF_ADDR(0x00);//送列地址高位

  NF_ADDR((startSectorAddr)&0xff);//送行地址低位

  NF_ADDR((startSectorAddr>>8)&0xff);//送行地址高位

  NF_CMD(0x30);//送第二次读操作码

  NF_DETECT_RB();//等待器件的Ready信号

for(i=0;i<2048;i++){

              pSectorBuff[i]=(BYTE)NF_DATA_R();//读取一个页面的数据到缓冲区

    }

    ……

}

其他函数的实现也与此类似。同时,FMD_GetInfo函数还需要向FAL返回当前器件的各种信息:

BOOL FMD_GetInfo(PFlashInfo pFlashInfo)

{

  pFlashInfo->flashType=NAND;//Flash器件类型,NAND或NOR

  pFlashInfo->dwNumBlock=1024;//块数目

  pFlashInfo->dwBytesPerBlock=64*2048;//每块包含的字节数

  pFlashInfo->wSectorsPerBlock=64;//每块内的页面数目

  pFlashInfo->wDataBytesPerSector=2048;//页面大小

  return TRUE;

}

步骤3:改造FAT文件系统

文件管理系统处于整个存储系统的最上层,包括分区装载程序和文件系统。操作系统启动时,由分区加载程序mspart.dll检查块设备的分区表,并根据每个分区的文件系统标识加载相应的文件系统。系统一般设有二个分区,第一个采用BinFS文件系统,用于存储Windows CE操作系统的镜像文件NK.bin;另一个分区采用FAT文件系统,用于存储用户数据。FAT文件系统一般由fatfsd.dll和fatutil.dll两个文件组成,前者负责文件系统的挂载、卸载、读取、写入、搜索等操作,后者则包含了对FAT分区的扫描、格式化等功能代码;应用层软件通过FAT文件系统对存储子系统及存储器件进行操作。

常规页面NAND Flash和Nor Flash的页面大小与FAT文件系统所定义的扇区大小恰好相同,均为512字节,因此微软公司在设计Windows CE操作系统的FAT文件系统时就利用了这一特性,使文件系统的虚拟扇区大小与Flash器件的页面大小相同。Windows CE操作系统启动时,会通过分区加载程序mspart.dll加载NAND Flash分区;由于其加载时会通过fatutil.dll判断存储设备的页面大小是否为512字节,如果不是就停止装载,因此需要解决NAND Flash器件的页面大小与FAT文件系统虚拟扇区大小不一致的问题。

假设Windows CE开发包安装在D盘下,首先在目录D:\WINCE420\PRIVATE\WINCEOS\COREOS\FSD\FATFS\下找到文件fatfmt.h,在目录D:\WINCE420\PUBLIC\COMMON\OAK\DRIVERS\FSD\FATUTIL\MAIN目录下找到文件fatutilp.h,将两个文件中的参数宏定义DEFAULT_SECTOR_SIZE由512改为2048,并根据该参数修改FAT文件系统源代码的相关部分;然后在Windows CE 4.2版本的开发工具Platform Builder(PB)环境下,点击菜单“Build->Open Build Release Directory”,打开编译环境命令行窗口,在两个目录下分别执行build命令重新编译,在目录D:\WINCE420\PUBLIC\COMMON\OAK\LIB\ARMV4I\RETAIL下就会生成全新的静态库文件fatfsd.lib和fatutil_main.lib。最后在PB工程中加入对FAT文件系统的支持,重新编译生成镜像文件NK.bin;这样,新生成的FAT文件系统使用的虚拟扇区大小为2048,就能够完善地支持大页面NAND Flash器件。

3、性能测试结果

将K9F1208(页面大小512字节)和K9F1G08(页面大小2048字节)二种器件,在同样的条件下(Windows CE环境,采用400MHz S3C2440A处理器)采用不同的读缓冲区大小进行了速度测试。从测试结果来看,利用本方法实现的大页面NAND Flash存储系统与常规页面NAND Flash器件实现的存储系统相比有着显著的性能优势;测试结果如表3所示

表3

(单位:MByte/s)

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号