不同Nand闪存兼容方法及装置制造方法

文档序号:6493811阅读:388来源:国知局
不同Nand闪存兼容方法及装置制造方法
【专利摘要】本发明公开了一种不同Nand闪存兼容方法及装置。该方法包括:将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中保留区;在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载引导区中的Nand闪存驱动、USB驱动、以及其它系统程序到RAM中运行,初始化Nand闪存,重新建立Nand闪存的逻辑到物理块转换表,并根据需要将保留区中的软件包加载到RAM中;根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据。
【专利说明】不同Nand闪存兼容方法及装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,特别是涉及一种不同Nand闪存兼容方法及装置。
【背景技术】
[0002]对于消费电子产品而言,由于更新换代快、竞争异常激烈,同质化的产品非常之多,低成本是一个不容忽视的竞争优势,而存储介质是非常重要的一个影响成本的因素。
[0003]Nand闪存(Nand Flash)由于其低成本的特性,使其在各种消费电子产品上应用非常广泛,然而生产Nand Flash的厂家众多,而并没有统一的标准,不同厂家生产的NandFlash除了存在时序上的差异外,即便同一厂家生产的NandFlash的架构、容量、页面大小(Page size)、冗余区大小(spare size)等物理特性也存在差异,其价格也有非常大的差

[0004]正是由于Nand Flash产品物理特性上的差异,从而导致其驱动、文件系统等研发周期较长且不易兼容,导致消费电子产品往往不能做到同时支持多款Nand Flash,这样对消费电子产品这样一个竞争白热化的行业来说,无疑会严重影响产品的竞争力。

【发明内容】

[0005]本发明提供一种不同Nand闪存兼容方法及装置,以解决现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题。
[0006]本发明提供一种不同Nand闪存兼容方法,包括:将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区,其中,引导区为物理分区,保留区为逻辑分区;在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载引导区中的Nand闪存驱动、USB驱动、以及其它系统程序到RAM中运行,初始化Nand闪存,根据Nand闪存冗余区中的信息重新建立Nand闪存的逻辑到物理块转换表,并根据需要将保留区中的软件包加载到RAM中;根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据,其中,用户数据区为逻辑分区。
[0007]优选地,将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区具体包括:获取Nand闪存的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand闪存特性参数;根据Nand闪存特性参数将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区。
[0008]优选地,上述方法还包括:在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand闪存中预先划分的保留区的过程中,通过Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand闪存的相应冗余区。
[0009]优选地,将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区具体包括:根据Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据逻辑到物理块转换表将与Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
[0010]优选地,上述方法还包括:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充;在只需I比特ECC与4比特ECC兼容,且冗余区足够的情况下,对于需要I比特ECC的Nand闪存采用4比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充。
[0011]优选地,建立逻辑到物理块转换表具体包括:遍历所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立逻辑到物理块转换表,其中,逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
[0012]优选地,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区、以及在系统运行过程中,当用户有相应操作时,根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据具体包括:步骤1,对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;步骤2,查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则执行步骤3,否则执行步骤4 ;步骤3,判断是否为覆盖写,若是,则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,执行步骤5 ;若不是覆盖写,则直接执行步骤6 ;步骤4,根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,执行步骤5 ;步骤5,更新逻辑到物理块转换表,执行步骤6 ;步骤6,将数据写入扇区地址;步骤7,判断扇区地址是否最后一个扇区,若是,则将旧物理块进行回收,否则,结束操作。
[0013]本发明还提供了一种不同Nand闪存兼容装置,包括:系统数据写入模块,用于将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区,其中,引导区为物理分区,保留区为逻辑分区;上电模块,用于在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载弓丨导区中的Nand闪存驱动、USB驱动、以及其它系统程序到RAM中运行,初始化Nand闪存,根据Nand闪存冗余区中的信息重新建立Nand闪存的逻辑到物理块转换表,并根据需要将保留区中的软件包加载到RAM中;用户数据写入模块,用于根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据,其中,用户数据区为逻辑分区。
[0014]优选地,系统数据写入模块具体用于:获取Nand闪存的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand闪存特性参数;根据Nand闪存特性参数将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区。
[0015]优选地,系统数据写入模块进一步用于:在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand闪存中预先划分的保留区的过程中,通过Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand闪存的相应冗余区。
[0016]优选地,系统数据写入模块进一步用于:根据Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据逻辑到物理块转换表将与Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
[0017]优选地,系统数据写入模块进一步用于:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充;在只需I比特ECC与4比特ECC兼容,且冗余区足够的情况下,对于需要I比特ECC的Nand闪存采用4比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充。
[0018]优选地,上电模块具体用于:遍历所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立逻辑到物理块转换表,其中,逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
[0019]优选地,系统数据写入模块具体包括:第一计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;第一查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第一判断子模块,否则调用第二查找子模块;第一判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第一更新子模块;若不是覆盖写,则直接调用第一写入子模块;第二查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第一更新子模块;第一更新子模块,用于更新逻辑到物理块转换表,调用第一写入子模块;第一写入子模块,用于将数据写入扇区地址,调用第一回收子模块;第一回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块进行回收;用户数据写入模块具体包括:第二计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;第三查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第二判断子模块,否则调用第四查找子模块;第二判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第二更新子模块;若不是覆盖写,则直接调用第二写入子模块;第四查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第二更新子模块;第二更新子模块,用于更新逻辑到物理块转换表,调用第二写入子模块;第二写入子模块,用于将数据写入扇区地址,调用第一回收子模块;第二回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块进行回收,否则,结束操作。
[0020]本发明有益效果如下:
[0021]借助于本发明的技术方案,解决了现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题,能够使一款产品可兼容市面上已有的Nand Flash,同时提供良好的扩展接口,能够快速支持新的Nand Flash,从而缩短了产品上市时间,提高了产品的竞争力。
[0022]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。
【专利附图】

【附图说明】
[0023]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0024]图1是本发明实施例的不同Nand闪存兼容方法的流程图;
[0025]图2是本发明实施例的对Nand Flash分区的示意图;
[0026]图3是本发明实施例的通过烧写工具烧写软件包的流程图;
[0027]图4是本发明实施例的系统上电过程的流程图;
[0028]图5是本发明实施例的逻辑到物理转换表的建立过程的流程图;
[0029]图6是本发明实施例的写扇区的流程图;
[0030]图7本发明实施例的不同Nand闪存兼容装置的结构示意图。
【具体实施方式】
[0031]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0032]为了解决现有技术中Nand Flash的驱动和文件系统不易兼容不同架构的NandFlash的问题,本发明提供了一种不同Nand闪存兼容方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。[0033]方法实施例
[0034]根据本发明的实施例,提供了一种不同Nand闪存兼容方法,图1是本发明实施例的不同Nand闪存兼容方法的流程图,如图1所示,根据本发明实施例的不同Nand闪存兼容方法包括如下处理:
[0035]步骤101,在工厂模式下通过PC端的烧写工具将Nand Flash驱动、以及USB驱动写入到Nand Flash中预先划分的引导(boot)区(BlockO),在此过程中烧写工具通过usb与系统交互,此时系统运行的是ROM中的程序;然后加载blockO中的驱动程序到RAM中运行,初始化Nand Flash,建立逻辑到物理块转换表,并根据该逻辑到物理块转换表将包含系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区(Reserved Area),其中,引导区为物理分区,保留区为逻辑分区。此处描述的软件包中的数据是按功能模块划分的,例如系统分为5个模块Μ0-Μ5,则在保留区中这5个模块都有相应的存放区域AREA(TAREA5。
[0036]也就是说,在步骤101中,需要首先将Nand Flash划分为boot区、保留区、用户数据区(User Area),除了 boot区(对应于物理块blockO)是直接对Nand Flash物理块(block)进行操作外,保留区和用户区都是逻辑分区,对它们的操作也都是逻辑上的的操作,这样的好处是屏蔽了物理分区对分区大小的限制,可以根据需要任意配置逻辑分区大小。在本发明实施例中,逻辑分区采用块映射的方式与物理块对应,在Nand Flash初始化时建立对应关系。Boot区中存放基本Nand Flash驱动及USB驱动程序,保留区中存放完整的系统代码及系统配置信息,用户区存放用户数据。
[0037]具体地,为了解决不同的Nand Flash如何兼容的问题,步骤101包括如下处理:
[0038]1、获取Nand Flash的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand Flash特性参数;
[0039]2、根据Nand Flash特性参数在工厂模式下将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区。
[0040] 也就是说,为了解决不同的Nand Flash如何兼容的问题,首先需要构建完整的市面存在的各厂家的不同架构不同容量的Nand Flash列表,在PC端烧写工具侧维护一套与不同架构不同容量的Nand Flash对应的Nand Flash特性参数,烧写时根据不同的NandFlash ID加以区分,烧写与Nand Flash ID所对应的Nand Flash特性参数相匹配的软件包。当有新的Nand Flash出现时只需要在Nand Flash列表中添加Nand Flash ID等信息即可。
[0041]在步骤101中,为了使lbit、4bit、以及8bit的ECC兼容,可以通过以下两种方式实现:
[0042]方式一:在将Nand Flash驱动、以及USB驱动写入到Nand Flash中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区的过程中,通过Nand Flash驱动计算错误检查和纠正(Error CorrectingCode,简称为ECC)码,并将计算的ECC码写入Nand Flash的相应冗余区。
[0043]其中,通过Nand Flash驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand Flash的相应冗余区具体包括:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand Flash采用8比特ECC纠错算法;同样地在只需要I比特ECC于4比特ECC兼容,且冗余区足够的情况下,对于需要I比特ECC的Nand Flash采用4比特的ECC兼容;根据Nand Flash ID获取冗余区的实际大小,对于冗余区多出的区域进行填充。
[0044]方式二:根据Nand Flash特性参数制作不同的包含ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand Flash驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;随后,根据Nand Flash特性参数将相应的包含ECC码的Nand Flash驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据逻辑到物理块转换表将与Nand Flash特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
[0045]也就是说,在实际应用中,lbit、4bit、以及8bit ECC之间的兼容有两种方法:第一种方法:软件包本身不带ECC码,在烧写时通过烧写工具与设备底层驱动配合,获取NandFlash ID,烧写相应的软件包并在烧写的过程中通过Nand Flash驱动计算ECC码(硬件实现或软件实现计算ECC码),然后写入Nand Flash的冗余(Spare)区;第二种方法:针对lbit、4bit、以及8bit ECC分别制作不同的包含ECC码的大镜像软件包,在烧写时根据获取到的不同的Nand Flash ID,烧写不同的大镜像软件包而不需要在烧写过程中计算ECC。
[0046]如果只需4bit与8bit ECC兼容,且Spare区足够的情况下,可采用8bit ECC向下兼容的方法,即对于需要4bit ECC的Flash也采用8bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用OXfT进行填充。
[0047]如果只需Ibit与4bit ECC兼容,且Spare区足够的情况下,可采用4bit ECC向下兼容的方法,即对于需要Ibit ECC的Flash也采用4bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用OXfT进行填充。
[0048]步骤102,在Normal模式下系统上电时,通过只读存储器(Read-Only Memory,简称为ROM)中的程序对不同构架的Nand Flash的枚举,加载引导区中的Nand Flash驱动和USB驱动以及其它系统程序到随机存储器(Random Access Memory,简称为RAM)中运行,初始化Nand Flash,根据Nand Flash冗余(Spare)区中的信息重新建立Nand闪存的逻辑到物理块转换表(需要说明的是,逻辑到物理转换表是在上电时重新建立的,无论是保留区还是用户数据区,每次上电都会根据spare区中的信息重新建立),并根据需要根据逻辑到物理块转换表将保留区中的系统代码和系统配置信息加载到RAM中运行,例如加载MO模块则会从保留区中的AREAO中读取,与此同时系统会根据需要读取保存在保留区中的配置数据信息到RAM中。
[0049]在上述步骤中,建立逻辑到物理块转换表具体包括:遍历所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立逻辑到物理块转换表,其中,逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。在实际应用中,也可以单独建立一个表,用于保存物理块的使用情况。
[0050]也就是说,在步骤102中,在boot阶段,ROM (这一部分代码是固化在ROM中的)通过对归纳出的不同架构的Nand Flash的枚举,读取预先存放在boot区(blockO)中的代码,从而获得基本的Nand Flash驱动和USB驱动,再通过基本的读写接口读取保留区中的系统代码到RAM的代码区域(Code area),以及读取系统配置信息到数据区域(Data area),根据系统配置信息在RAM中运行系统代码。
[0051]步骤103,在系统运行过程中,当用户有相应操作时,根据用户数据区逻辑到物理块转换表将用户数据(文件)写入用户数据区或者从用户数据区中读取数据(文件),其中,用户数据区为逻辑分区。
[0052]在步骤101及步骤103中,根据保留区逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区、以及根据用户数据区逻辑到物理块转换表将用户数据写入用户数据区的数据写入方法具体包括:
[0053]步骤1,对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
[0054]步骤2,查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则执行步骤3,否则执行步骤4 ;
[0055]步骤3,判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,执行步骤5 ;若不是覆盖写,则直接执行步骤6 ;
[0056]步骤4,根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,执行步骤5 ;
[0057]步骤5,更新逻辑到物理块转换表,执行步骤6 ;
[0058]步骤6,将数据写入扇区地址;
[0059]步骤7,判断扇区地址是否最后一个扇区,如是则将旧物理块加入回收表中,待CPU空闲时进行回收。
[0060]以下结合附图,对本发明实施例的上述技术方案进行详细说明。
[0061]图2是本发明实施例的对Nand Flash分区的示意图,如图2所示,在本发明实施例中,可以将Nand Flash划分为三个分区。其中blockO分区对应的是物理blockO,其中存放基本的Nand Flash驱动(Nand Flash Driver)和USB驱动(USB Driver),因为受物理block大小的限制,这一部分代码可以是精简版的,不能超过block大小。保留区(ReservedArea)是逻辑分区,其中存放的是完整的系统代码,逻辑分区内部可根据具体模块再进行划分,由于是逻辑意义上的分区,已与具体的物理特性隔离,故而对该区域进行读、写操作时是对连续的逻辑地址进行操作,只需要知道各个模块的起始逻辑地址和长度即可将该模块代码读取出来。这样带来的好处是显而易见的,如减少空间浪费、最大限度上规避坏块的影响、将一个分区需要增大或缩小时对其它分区的影响减小到最小。用户数据区用于保存用户数据。
[0062]图3是本发明实施例的通过烧写工具烧写软件包的流程图,如图3所示,烧写工具烧写前会先获取Nand Flash ID,随后根据Nand Flash ID查找对应的软件包,最后再烧写。这样做的好处是可在PC端工具侧维护一张完整的Nand Flash列表,无论将来有多少新增的Flash都很方便维护。
[0063]图4是本发明实施例的系统上电过程的流程图,如图4所示,当系统上电后,ROM中的程序首先跑起来,它的任务就是读Nand Flash BlockO中的程序(Nand Flash驱动和USB驱动)到RAM的Code Area中运行,BlockO中的代码加载起来后,会初始化Nand Flash、建立逻辑到物理块的转换表操作。最后,将Reserved Area中的程序根据需要读取到RAM中运行。
[0064]图5是本发明实施例的逻辑到物理转换表的建立过程的流程图,如图5所示,首先遍历整片Nand Flash的所有物理块,从物理块的第I个Page和最后一个Page的spare区中获取该物理块对应的逻辑块信息,建立一张逻辑块到物理块的转换表Log2PhyTable,其中记录了逻辑块编号与物理块编号的对应关系;同时也建立一张Assign Table,该表中每一个比特(bit)用来标记一个物理块的使用情况,其中,Ob表示该物理block尚未使用,Ib表示该物理block已被使用或为坏块;在实际应用中,Log2PhyTable是存放在RAM中的,由于系统资源限制,实际分配的RAM空间可能不足以存放完整的Log2PhyTable,此时可将Log2PhyTable划分为N张表,同时Nand Flash也分为N个zone,每张表对应NandFlash的一个区域(Zone)每张表的大小为Log2PhyTable Size/N ;在系统初始化建立逻辑到物理转换表时,首先建立ZoneO对应的Log2PhyTable,它是常驻内存的,在ZoneO中找一个block用来存放其它ZonefZone (η-1)的Log2PhyTable。当需要用到Zone x时,就将Zone X的Log2PhyTable从Nand中读到RAM中来,也就是在内存中只有ZoneO和Zone x的Log2PhyTable ;
[0065]图6是本发明实施例的写扇区(Write Sector)的流程图,如图6所示,Nand Flash具有按块(block)擦除按扇区(sector)或页(page)写的物理特性,而对逻辑块的写操作是不用关注这一物理特性的。故而在写的过程中经常会存在“搬移”的动作。如图6所示:
[0066]步骤I,将线性的逻辑sector地址进行计算,得到逻辑blockX及SectorY地址;
[0067]步骤2,查找逻辑到物理转换表,如果该逻辑block已经分配物理block,则跳到步骤3,否则跳到步骤4;
[0068]步骤3,进一步判断是否为覆盖写,若是则查找AssignTable找一个空的blockZ,将SectorY之前的数据从当前的物理block (OldBlock)搬移到blockZ,若不是覆盖写则直接跳到步骤4 ;
[0069]步骤4,写 SectorY ;
[0070]步骤5,判断SectorY是否最后一个Sector,如是则将OldBlock放入回收表。
[0071]需要说明的是,在上述处理中,如果当写操作不成功时需要做相应的保护;回收废弃的block时,一般是在系统空闲时进行处理。
[0072]综上所述,借助于本发明实施例的技术方案,解决了现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题,能够使一款产品可兼容市面上已有的Nand Flash,同时提供良好的扩展接口,能够快速支持新的Nand Flash,从而缩短了产品上市时间,提高了产品的竞争力。
[0073]装置实施例
[0074]根据本发明的实施例,提供了一种不同Nand闪存兼容装置,图7是本发明实施例的不同Nand闪存兼容装置的结构示意图,如图7所示,根据本发明实施例的不同Nand闪存兼容装置包括:系统数据写入模块70、上电模块72、以及用户数据写入模块74,以下对本发明实施例的各个模块进行详细的说明。
[0075]系统数据写入模块70,用于在工厂模式下通过PC端的烧写工具将Nand Flash驱动、以及USB驱动写入到Nand Flash中预先划分的引导(boot)区(BlockO),在此过程中烧写工具通过usb与系统交互,此时系统运行的是ROM中的程序;然后加载blockO中的驱动程序到RAM中运行,初始化Nand Flash,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区(Reserved Area),其中,引导区为物理分区,保留区为逻辑分区。此处描述的软件包中的数据是按功能模块划分的,例如系统分为5个模块Μ0-Μ5,则在保留区中这5个模块都有相应的存放区域AREA(TAREA5。
[0076]也就是说,系统数据写入模块70需要首先将Nand Flash划分为boot区、保留区、用户数据区(User Area),除了 boot区(对应于物理块blockO)是直接对Nand Flash物理块(block)进行操作外,保留区和用户区都是逻辑分区,对它们的操作也都是逻辑上的的操作,这样的好处是屏蔽了物理分区对分区大小的限制,可以根据需要任意配置逻辑分区大小。在本发明实施例中,逻辑分区采用块映射的方式与物理块对应,在Nand Flash初始化时建立对应关系。Boot区中存放基本Nand Flash驱动及USB驱动程序,保留区中存放完整的系统代码及系统配置信息,用户区存放用户数据。
[0077]系统数据写入模块70具体用于:获取Nand闪存的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand闪存特性参数;根据Nand闪存特性参数将相应的Nand闪存驱动和相应的USB驱动写入到引导区中,并根据保留区逻辑到物理块转换表将与Nand闪存特性参数相对应的系统代码以及系统配置信息写入到保留区中;
[0078]也就是说,为了解决不同的Nand Flash如何兼容的问题,首先需要构建完整的市面存在的各厂家的不同架构不同容量的Nand Flash列表,在PC端烧写工具侧维护一套与不同架构不同容量的Nand Flash对应的Nand Flash特性参数,烧写时根据不同的NandFlash ID加以区分,烧写与Nand Flash ID所对应的Nand Flash特性参数相匹配的软件包。当有新的Nand Flash出现时只需要在Nand Flash列表中添加Nand Flash ID等信息即可。
[0079]为了使lbit、4bit、以及Sbit的ECC兼容,系统数据写入模块70可以通过以下两种方式实现:
[0080]方式一:系统数据写入模块70在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据保留区逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand闪存中预先划分的保留区的过程中,通过Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand闪存的相应冗余区;其中,在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据闪存ID获取冗余区的实际大小,对于冗余区多出的区域进行填充;
[0081]如果只需Ibit与4bit ECC兼容,且Spare区足够的情况下,可采用4bit ECC向下兼容的方法,即对于需要Ibit ECC的Flash也采用4bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用OXfT进行填充。
[0082]方式二:系统数据写入模块70进一步用于:根据Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据保留区逻辑到物理块转换表将与Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
[0083]也就是说,在实际应用中,lbit、4bit、以及8bit ECC之间的兼容有两种方法:第一种方法:软件包本身不带ECC码,在烧写时通过烧写工具与设备底层驱动配合,获取NandFlash ID,烧写相应的软件包并在烧写的过程中通过Nand Flash驱动计算ECC码(硬件实现或软件实现计算ECC码),然后写入Nand Flash的冗余(Spare)区;第二种方法:针对lbit、4bit、以及8bit ECC分别制作不同的包含ECC码的大镜像软件包,在烧写时根据获取到的不同的Nand Flash ID,烧写不同的大镜像软件包而不需要在烧写过程中计算ECC。
[0084]如果只需4bit与8bit ECC兼容,且Spare区足够的情况下,可采用8bit ECC向下兼容的方法,即对于需要4bit ECC的Flash也采用8bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用OXfT进行填充。
[0085]如果只需Ibit与4bit ECC兼容,且Spare区足够的情况下,可采用4bit ECC向下兼容的方法,即对于需要Ibit ECC的Flash也采用4bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用OXfT进行填充。
[0086]系统数据写入模块70具体包括:
[0087]第一计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
[0088]第一查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第一判断子模块,否则调用第二查找子模块;
[0089]第一判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第一更新子模块;若不是覆盖写,则直接调用第一写入子模块;
[0090]第二查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第一更新子模块;
[0091]第一更新子模块,用于更新逻辑到物理块转换表,调用第一写入子模块;
[0092]第一写入子模块,用于将数据写入扇区地址,调用第一回收子模块;
[0093]第一回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块进行回收;
[0094]上电模块72,用于在Normal模式下系统上电时,通过只读存储器(Read-OnlyMemory,简称为ROM)中的程序对不同构架的Nand Flash的枚举,加载引导区中的NandFlash驱动和USB驱动以及其它系统程序到随机存储器(Random Access Memory,简称为RAM)中运行,初始化Nand Flash,根据Nand Flash冗余(Spare)区中的信息重新建立Nand闪存的逻辑到物理块转换表(需要说明的是,逻辑到物理转换表是在上电时重新建立的,无论是保留区还是用户数据区,每次上电都会根据spare区中的信息重新建立),并根据需要将保留区中的系统代码和系统配置信息加载到RAM中运行,例如加载MO模块则会从保留区中的AREAO中读取,与此同时系统会根据需要读取保存在保留区中的配置数据信息到RAM中。[0095]上电模块72具体用于:遍历用户数据区的所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立用户数据区逻辑到物理块转换表,其中,用户数据区逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
[0096]也就是说,在boot阶段,ROM (这一部分代码是固化在ROM中的)通过对归纳出的不同架构的Nand Flash的枚举,读取预先存放在boot区(blockO)中的代码,从而获得基本的Nand Flash驱动和Usb驱动,再通过基本的读写接口读取保留区中的系统代码到RAM的代码区域(Code area),以及读取系统配置信息到数据区域(Data area),根据系统配置信息在RAM中运行系统代码。
[0097]用户数据写入模块74,用于在系统运行过程中,当用户有相应操作时,根据用户数据区逻辑到物理块转换表将用户数据(文件)写入用户数据区或者从用户数据区中读取数据(文件),其中,用户数据区为逻辑分区。
[0098]用户数据写入模块74具体包括:
[0099]第二计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
[0100]第三查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第二判断子模块,否则调用第四查找子模块;
[0101]第二判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第二更新子模块;若不是覆盖写,则直接调用第二写入子模块;
[0102]第四查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第二更新子模块;
[0103]第二更新子模块,用于更新逻辑到物理块转换表,调用第二写入子模块;
[0104]第二写入子模块,用于将数据写入扇区地址,调用第一回收子模块;
[0105]第二回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块如是则将旧物理块加入回收表中,待CPU空闲时进行回收。
[0106]综上所述,借助于本发明实施例的技术方案,解决了现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题,能够使一款产品可兼容市面上已有的Nand Flash,同时提供良好的扩展接口,能够快速支持新的Nand Flash,从而缩短了产品上市时间,提高了产品的竞争力。
[0107]在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0108]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0109]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身都作为本发明的单独实施例。
[0110]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0111]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0112]本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的不同Nand闪存兼容装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0113]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
【权利要求】
1.一种不同Nand闪存兼容方法,其特征在于,包括: 将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区,其中,所述引导区为物理分区,所述保留区为逻辑分区; 在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载所述引导区中的所述Nand闪存驱动、所述USB驱动、以及其它系统程序到所述RAM中运行,初始化所述Nand闪存,根据Nand闪存冗余区中的信息重新建立所述Nand闪存的逻辑到物理块转换表,并根据需要将所述保留区中的所述软件包加载到所述RAM中; 根据所述逻辑到物理块转换表将用户数据写入所述用户数据区或者从用户数据区中读取数据,其中,所述用户数据区为逻辑分区。
2.如权利要求1所述的方法,其特征在于,将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区具体包括: 获取所述Nand闪存的闪存标识ID,根据所述闪存ID在预先设置的闪存列表中查找与所述闪存ID对应的Nand闪存特性参数; 根据所述Nand闪存特性参数将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区, 加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区。
3.如权利要求2所述的方法,其特征在于,所述方法还包括: 在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到所述Nand闪存中预先划分的保留区的过程中,通过所述Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入所述Nand闪存的相应冗余区。
4.如权利要求3所述的方法,其特征在于,所述方法还包括: 在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充; 在只需I比特ECC与4比特ECC兼容,且冗余区足够的情况下,对于需要I比特ECC的Nand闪存采用4比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充。
5.如权利要求2所述的方法,其特征在于,将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区具体包括: 根据所述Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,所述大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息; 根据所述Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到所述引导区中,并根据所述逻辑到物理块转换表将与所述Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到所述保留区中。
6.如权利要求1所述的方法,其特征在于,建立逻辑到物理块转换表具体包括: 遍历所有物理块,从所述物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立所述逻辑到物理块转换表,其中,所述逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
7.如权利要求6所述的方法,其特征在于,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区、以及在系统运行过程中,当用户有相应操作时,根据所述逻辑到物理块转换表将用户数据写入所述用户数据区或者从用户数据区中读取数据具体包括: 步骤1,对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址; 步骤2,查找逻辑到物理块转换表,如果与所述逻辑块地址相对应的逻辑块已经分配物理块,则执行步骤3,否则执行步骤4 ; 步骤3,判断是否为覆 盖写,若是,则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将所述扇区地址之前的数据从当前的旧物理块搬移到所述空的新物理块,执行步骤5 ;若不是覆盖写,则直接执行步骤6 ; 步骤4,根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,执行步骤5 ; 步骤5,更新逻辑到物理块转换表,执行步骤6 ; 步骤6,将数据写入所述扇区地址; 步骤7,判断所述扇区地址是否最后一个扇区,若是,则将所述旧物理块进行回收,否贝U,结束操作。
8.—种不同Nand闪存兼容装置,其特征在于,包括: 系统数据写入模块,用于将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区,其中,所述引导区为物理分区,所述保留区为逻辑分区; 上电模块,用于在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载所述引导区中的所述Nand闪存驱动、所述USB驱动、以及其它系统程序到所述RAM中运行,初始化所述Nand闪存,根据Nand闪存冗余区中的信息重新建立所述Nand闪存的逻辑到物理块转换表,并根据需要将所述保留区中的所述软件包加载到所述RAM中; 用户数据写入模块,用于根据所述逻辑到物理块转换表将用户数据写入所述用户数据区或者从用户数据区中读取数据,其中,所述用户数据区为逻辑分区。
9.如权利要求8所述的装置,其特征在于,所述系统数据写入模块具体用于:获取所述Nand闪存的闪存标识ID,根据所述闪存ID在预先设置的闪存列表中查找与所述闪存ID对应的Nand闪存特性参数;根据所述Nand闪存特性参数将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区。
10.如权利要求9所述的装置,其特征在于,所述系统数据写入模块进一步用于:在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到所述Nand闪存中预先划分的保留区的过程中,通过所述Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入所述Nand闪存的相应冗余区。
11.如权利要求9所述的装置,其特征在于,所述系统数据写入模块进一步用于:根据所述Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,所述大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据所述Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到所述引导区中,并根据所述逻辑到物理块转换表将与所述Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到所述保留区中。
12.如权利要求10或11所述的装置,其特征在于,所述系统数据写入模块进一步用于:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充。
13.如权利要求8所述的装置,其特征在于,所述上电模块具体用于:遍历所有物理块,从所述物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立所述逻辑到物理块转换表,其中,所述逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
14.如权利要求8所述的装置,其特征在于,所述系统数据写入模块具体包括: 第一计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址; 第一查找子模块,用于查找逻辑到物理块转换表,如果与所述逻辑块地址相对应的逻辑块已经分配物理块,则调用第一判断子模块,否则调用第二查找子模块; 第一判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将所述扇区地址之前的数据从当前的旧物理块搬移到所述空的新物理块,调用第一更新子模块;若不是覆盖写,则直接调用第一写入子模块; 第二查找子模块,用于根据逻辑 到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用所述第一更新子模块; 第一更新子模块,用于更新逻辑到物理块转换表,调用所述第一写入子模块; 第一写入子模块,用于将数据写入所述扇区地址,调用所述第一回收子模块; 第一回收子模块,用于判断所述扇区地址是否最后一个扇区,如是则将所述旧物理块进行回收; 所述用户数据写入模块具体包括:第二计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址; 第三查找子模块,用于查找逻辑到物理块转换表,如果与所述逻辑块地址相对应的逻辑块已经分配物理块,则调用第二判断子模块,否则调用第四查找子模块;
第二判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将所述扇区地址之前的数据从当前的旧物理块搬移到所述空的新物理块,调用第二更新子模块;若不是覆盖写,则直接调用第二写入子模块;第四查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用所述第二更新子模块; 第二更新子模块,用于更新逻辑到物理块转换表,调用所述第二写入子模块; 第二写入子模块,用于将数据写入所述扇区地址,调用所述第一回收子模块; 第二回收子模块,用于判断所述扇区地址是否最后一个扇区,如是则将所述旧物理块进行回收,否则,结束操作。
【文档编号】G06F12/02GK103902461SQ201210578349
【公开日】2014年7月2日 申请日期:2012年12月27日 优先权日:2012年12月27日
【发明者】阮贤章, 黄延军, 曹知渊 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1