CN103902461A - 不同Nand闪存兼容方法及装置 - Google Patents

不同Nand闪存兼容方法及装置 Download PDF

Info

Publication number
CN103902461A
CN103902461A CN201210578349.4A CN201210578349A CN103902461A CN 103902461 A CN103902461 A CN 103902461A CN 201210578349 A CN201210578349 A CN 201210578349A CN 103902461 A CN103902461 A CN 103902461A
Authority
CN
China
Prior art keywords
nand flash
physical block
flash memory
logic
conversion table
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201210578349.4A
Other languages
English (en)
Inventor
阮贤章
黄延军
曹知渊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201210578349.4A priority Critical patent/CN103902461A/zh
Priority to EP13794434.4A priority patent/EP2940589A4/en
Priority to PCT/CN2013/079926 priority patent/WO2013174326A2/zh
Priority to US14/758,027 priority patent/US20150347294A1/en
Publication of CN103902461A publication Critical patent/CN103902461A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0638Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • G06F9/4413Plug-and-play [PnP]
    • G06F9/4415Self describing peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1004Compatibility, e.g. with legacy hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0632Configuration or reconfiguration of storage systems by initialisation or re-initialisation of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Abstract

本发明公开了一种不同Nand闪存兼容方法及装置。该方法包括:将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中保留区;在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载引导区中的Nand闪存驱动、USB驱动、以及其它系统程序到RAM中运行,初始化Nand闪存,重新建立Nand闪存的逻辑到物理块转换表,并根据需要将保留区中的软件包加载到RAM中;根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据。

Description

不同Nand闪存兼容方法及装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种不同Nand闪存兼容方法及装置。
背景技术
对于消费电子产品而言,由于更新换代快、竞争异常激烈,同质化的产品非常之多,低成本是一个不容忽视的竞争优势,而存储介质是非常重要的一个影响成本的因素。
Nand闪存(Nand Flash)由于其低成本的特性,使其在各种消费电子产品上应用非常广泛,然而生产Nand Flash的厂家众多,而并没有统一的标准,不同厂家生产的Nand Flash除了存在时序上的差异外,即便同一厂家生产的NandFlash的架构、容量、页面大小(Page size)、冗余区大小(spare size)等物理特性也存在差异,其价格也有非常大的差异。
正是由于Nand Flash产品物理特性上的差异,从而导致其驱动、文件系统等研发周期较长且不易兼容,导致消费电子产品往往不能做到同时支持多款Nand Flash,这样对消费电子产品这样一个竞争白热化的行业来说,无疑会严重影响产品的竞争力。
发明内容
本发明提供一种不同Nand闪存兼容方法及装置,以解决现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题。
本发明提供一种不同Nand闪存兼容方法,包括:将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区,其中,引导区为物理分区,保留区为逻辑分区;在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载引导区中的Nand闪存驱动、USB驱动、以及其它系统程序到RAM中运行,初始化Nand闪存,根据Nand闪存冗余区中的信息重新建立Nand闪存的逻辑到物理块转换表,并根据需要将保留区中的软件包加载到RAM中;根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据,其中,用户数据区为逻辑分区。
优选地,将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区具体包括:获取Nand闪存的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand闪存特性参数;根据Nand闪存特性参数将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区。
优选地,上述方法还包括:在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand闪存中预先划分的保留区的过程中,通过Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand闪存的相应冗余区。
优选地,将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区具体包括:根据Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据逻辑到物理块转换表将与Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
优选地,上述方法还包括:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充;在只需1比特ECC与4比特ECC兼容,且冗余区足够的情况下,对于需要1比特ECC的Nand闪存采用4比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充。
优选地,建立逻辑到物理块转换表具体包括:遍历所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立逻辑到物理块转换表,其中,逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
优选地,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区、以及在系统运行过程中,当用户有相应操作时,根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据具体包括:步骤1,对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;步骤2,查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则执行步骤3,否则执行步骤4;步骤3,判断是否为覆盖写,若是,则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,执行步骤5;若不是覆盖写,则直接执行步骤6;步骤4,根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,执行步骤5;步骤5,更新逻辑到物理块转换表,执行步骤6;步骤6,将数据写入扇区地址;步骤7,判断扇区地址是否最后一个扇区,若是,则将旧物理块进行回收,否则,结束操作。
本发明还提供了一种不同Nand闪存兼容装置,包括:系统数据写入模块,用于将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区,其中,引导区为物理分区,保留区为逻辑分区;上电模块,用于在系统上电时,通过只读存储器ROM中的程序对不同构架的Nand闪存的枚举,加载引导区中的Nand闪存驱动、USB驱动、以及其它系统程序到RAM中运行,初始化Nand闪存,根据Nand闪存冗余区中的信息重新建立Nand闪存的逻辑到物理块转换表,并根据需要将保留区中的软件包加载到RAM中;用户数据写入模块,用于根据逻辑到物理块转换表将用户数据写入用户数据区或者从用户数据区中读取数据,其中,用户数据区为逻辑分区。
优选地,系统数据写入模块具体用于:获取Nand闪存的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand闪存特性参数;根据Nand闪存特性参数将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到Nand闪存中预先划分的保留区。
优选地,系统数据写入模块进一步用于:在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand闪存中预先划分的保留区的过程中,通过Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand闪存的相应冗余区。
优选地,系统数据写入模块进一步用于:根据Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据逻辑到物理块转换表将与Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
优选地,系统数据写入模块进一步用于:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充;在只需1比特ECC与4比特ECC兼容,且冗余区足够的情况下,对于需要1比特ECC的Nand闪存采用4比特ECC纠错算法;根据所述闪存ID获取冗余区的实际大小,对于所述冗余区多出的区域进行填充。
优选地,上电模块具体用于:遍历所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立逻辑到物理块转换表,其中,逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
优选地,系统数据写入模块具体包括:第一计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;第一查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第一判断子模块,否则调用第二查找子模块;第一判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第一更新子模块;若不是覆盖写,则直接调用第一写入子模块;第二查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第一更新子模块;第一更新子模块,用于更新逻辑到物理块转换表,调用第一写入子模块;第一写入子模块,用于将数据写入扇区地址,调用第一回收子模块;第一回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块进行回收;用户数据写入模块具体包括:第二计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;第三查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第二判断子模块,否则调用第四查找子模块;第二判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第二更新子模块;若不是覆盖写,则直接调用第二写入子模块;第四查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第二更新子模块;第二更新子模块,用于更新逻辑到物理块转换表,调用第二写入子模块;第二写入子模块,用于将数据写入扇区地址,调用第一回收子模块;第二回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块进行回收,否则,结束操作。
本发明有益效果如下:
借助于本发明的技术方案,解决了现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题,能够使一款产品可兼容市面上已有的Nand Flash,同时提供良好的扩展接口,能够快速支持新的Nand Flash,从而缩短了产品上市时间,提高了产品的竞争力。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例的不同Nand闪存兼容方法的流程图;
图2是本发明实施例的对Nand Flash分区的示意图;
图3是本发明实施例的通过烧写工具烧写软件包的流程图;
图4是本发明实施例的系统上电过程的流程图;
图5是本发明实施例的逻辑到物理转换表的建立过程的流程图;
图6是本发明实施例的写扇区的流程图;
图7本发明实施例的不同Nand闪存兼容装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了解决现有技术中Nand Flash的驱动和文件系统不易兼容不同架构的Nand Flash的问题,本发明提供了一种不同Nand闪存兼容方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
方法实施例
根据本发明的实施例,提供了一种不同Nand闪存兼容方法,图1是本发明实施例的不同Nand闪存兼容方法的流程图,如图1所示,根据本发明实施例的不同Nand闪存兼容方法包括如下处理:
步骤101,在工厂模式下通过PC端的烧写工具将Nand Flash驱动、以及USB驱动写入到Nand Flash中预先划分的引导(boot)区(Block0),在此过程中烧写工具通过usb与系统交互,此时系统运行的是ROM中的程序;然后加载block0中的驱动程序到RAM中运行,初始化Nand Flash,建立逻辑到物理块转换表,并根据该逻辑到物理块转换表将包含系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区(Reserved Area),其中,引导区为物理分区,保留区为逻辑分区。此处描述的软件包中的数据是按功能模块划分的,例如系统分为5个模块M0~M5,则在保留区中这5个模块都有相应的存放区域AREA0~AREA5。
也就是说,在步骤101中,需要首先将Nand Flash划分为boot区、保留区、用户数据区(User Area),除了boot区(对应于物理块block0)是直接对Nand Flash物理块(block)进行操作外,保留区和用户区都是逻辑分区,对它们的操作也都是逻辑上的的操作,这样的好处是屏蔽了物理分区对分区大小的限制,可以根据需要任意配置逻辑分区大小。在本发明实施例中,逻辑分区采用块映射的方式与物理块对应,在Nand Flash初始化时建立对应关系。Boot区中存放基本Nand Flash驱动及USB驱动程序,保留区中存放完整的系统代码及系统配置信息,用户区存放用户数据。
具体地,为了解决不同的Nand Flash如何兼容的问题,步骤101包括如下处理:
1、获取Nand Flash的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand Flash特性参数;
2、根据Nand Flash特性参数在工厂模式下将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,加载引导区中的驱动程序到随机存储器RAM中运行,初始化Nand闪存,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息的软件包写入到所述Nand闪存中预先划分的保留区。
也就是说,为了解决不同的Nand Flash如何兼容的问题,首先需要构建完整的市面存在的各厂家的不同架构不同容量的Nand Flash列表,在PC端烧写工具侧维护一套与不同架构不同容量的Nand Flash对应的Nand Flash特性参数,烧写时根据不同的Nand Flash ID加以区分,烧写与Nand Flash ID所对应的Nand Flash特性参数相匹配的软件包。当有新的Nand Flash出现时只需要在Nand Flash列表中添加Nand Flash ID等信息即可。
在步骤101中,为了使1bit、4bit、以及8bit的ECC兼容,可以通过以下两种方式实现:
方式一:在将Nand Flash驱动、以及USB驱动写入到Nand Flash中预先划分的引导区,并根据逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区的过程中,通过Nand Flash驱动计算错误检查和纠正(Error Correcting Code,简称为ECC)码,并将计算的ECC码写入Nand Flash的相应冗余区。
其中,通过Nand Flash驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand Flash的相应冗余区具体包括:在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand Flash采用8比特ECC纠错算法;同样地在只需要1比特ECC于4比特ECC兼容,且冗余区足够的情况下,对于需要1比特ECC的Nand Flash采用4比特的ECC兼容;根据Nand Flash ID获取冗余区的实际大小,对于冗余区多出的区域进行填充。
方式二:根据Nand Flash特性参数制作不同的包含ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand Flash驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;随后,根据Nand Flash特性参数将相应的包含ECC码的Nand Flash驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据逻辑到物理块转换表将与Nand Flash特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
也就是说,在实际应用中,1bit、4bit、以及8bit ECC之间的兼容有两种方法:第一种方法:软件包本身不带ECC码,在烧写时通过烧写工具与设备底层驱动配合,获取Nand Flash ID,烧写相应的软件包并在烧写的过程中通过Nand Flash驱动计算ECC码(硬件实现或软件实现计算ECC码),然后写入Nand Flash的冗余(Spare)区;第二种方法:针对1bit、4bit、以及8bit ECC分别制作不同的包含ECC码的大镜像软件包,在烧写时根据获取到的不同的Nand Flash ID,烧写不同的大镜像软件包而不需要在烧写过程中计算ECC。
如果只需4bit与8bit ECC兼容,且Spare区足够的情况下,可采用8bit ECC向下兼容的方法,即对于需要4bit ECC的Flash也采用8bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用0Xff进行填充。
如果只需1bit与4bit ECC兼容,且Spare区足够的情况下,可采用4bit ECC向下兼容的方法,即对于需要1bit ECC的Flash也采用4bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用0Xff进行填充。
步骤102,在Normal模式下系统上电时,通过只读存储器(Read-OnlyMemory,简称为ROM)中的程序对不同构架的Nand Flash的枚举,加载引导区中的Nand Flash驱动和USB驱动以及其它系统程序到随机存储器(RandomAccess Memory,简称为RAM)中运行,初始化Nand Flash,根据Nand Flash冗余(Spare)区中的信息重新建立Nand闪存的逻辑到物理块转换表(需要说明的是,逻辑到物理转换表是在上电时重新建立的,无论是保留区还是用户数据区,每次上电都会根据spare区中的信息重新建立),并根据需要根据逻辑到物理块转换表将保留区中的系统代码和系统配置信息加载到RAM中运行,例如加载M0模块则会从保留区中的AREA0中读取,与此同时系统会根据需要读取保存在保留区中的配置数据信息到RAM中。
在上述步骤中,建立逻辑到物理块转换表具体包括:遍历所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立逻辑到物理块转换表,其中,逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。在实际应用中,也可以单独建立一个表,用于保存物理块的使用情况。
也就是说,在步骤102中,在boot阶段,ROM(这一部分代码是固化在ROM中的)通过对归纳出的不同架构的Nand Flash的枚举,读取预先存放在boot区(block0)中的代码,从而获得基本的Nand Flash驱动和USB驱动,再通过基本的读写接口读取保留区中的系统代码到RAM的代码区域(Codearea),以及读取系统配置信息到数据区域(Data area),根据系统配置信息在RAM中运行系统代码。
步骤103,在系统运行过程中,当用户有相应操作时,根据用户数据区逻辑到物理块转换表将用户数据(文件)写入用户数据区或者从用户数据区中读取数据(文件),其中,用户数据区为逻辑分区。
在步骤101及步骤103中,根据保留区逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand Flash中预先划分的保留区、以及根据用户数据区逻辑到物理块转换表将用户数据写入用户数据区的数据写入方法具体包括:
步骤1,对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
步骤2,查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则执行步骤3,否则执行步骤4;
步骤3,判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,执行步骤5;若不是覆盖写,则直接执行步骤6;
步骤4,根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,执行步骤5;
步骤5,更新逻辑到物理块转换表,执行步骤6;
步骤6,将数据写入扇区地址;
步骤7,判断扇区地址是否最后一个扇区,如是则将旧物理块加入回收表中,待CPU空闲时进行回收。
以下结合附图,对本发明实施例的上述技术方案进行详细说明。
图2是本发明实施例的对Nand Flash分区的示意图,如图2所示,在本发明实施例中,可以将Nand Flash划分为三个分区。其中block0分区对应的是物理block0,其中存放基本的Nand Flash驱动(Nand Flash Driver)和USB驱动(USB Driver),因为受物理block大小的限制,这一部分代码可以是精简版的,不能超过block大小。保留区(Reserved Area)是逻辑分区,其中存放的是完整的系统代码,逻辑分区内部可根据具体模块再进行划分,由于是逻辑意义上的分区,已与具体的物理特性隔离,故而对该区域进行读、写操作时是对连续的逻辑地址进行操作,只需要知道各个模块的起始逻辑地址和长度即可将该模块代码读取出来。这样带来的好处是显而易见的,如减少空间浪费、最大限度上规避坏块的影响、将一个分区需要增大或缩小时对其它分区的影响减小到最小。用户数据区用于保存用户数据。
图3是本发明实施例的通过烧写工具烧写软件包的流程图,如图3所示,烧写工具烧写前会先获取Nand Flash ID,随后根据Nand Flash ID查找对应的软件包,最后再烧写。这样做的好处是可在PC端工具侧维护一张完整的NandFlash列表,无论将来有多少新增的Flash都很方便维护。
图4是本发明实施例的系统上电过程的流程图,如图4所示,当系统上电后,ROM中的程序首先跑起来,它的任务就是读Nand Flash Block0中的程序(Nand Flash驱动和USB驱动)到RAM的Code Area中运行,Block0中的代码加载起来后,会初始化Nand Flash、建立逻辑到物理块的转换表操作。最后,将Reserved Area中的程序根据需要读取到RAM中运行。
图5是本发明实施例的逻辑到物理转换表的建立过程的流程图,如图5所示,首先遍历整片Nand Flash的所有物理块,从物理块的第1个Page和最后一个Page的spare区中获取该物理块对应的逻辑块信息,建立一张逻辑块到物理块的转换表Log2PhyTable,其中记录了逻辑块编号与物理块编号的对应关系;同时也建立一张Assign Table,该表中每一个比特(bit)用来标记一个物理块的使用情况,其中,0b表示该物理block尚未使用,1b表示该物理block已被使用或为坏块;在实际应用中,Log2PhyTable是存放在RAM中的,由于系统资源限制,实际分配的RAM空间可能不足以存放完整的Log2PhyTable,此时可将Log2PhyTable划分为N张表,同时Nand Flash也分为N个zone,每张表对应Nand Flash的一个区域(Zone)每张表的大小为Log2PhyTable Size/N;在系统初始化建立逻辑到物理转换表时,首先建立Zone0对应的Log2PhyTable,它是常驻内存的,在Zone0中找一个block用来存放其它Zone1~Zone(n-1)的Log2PhyTable。当需要用到Zone x时,就将Zone x的Log2PhyTable从Nand中读到RAM中来,也就是在内存中只有Zone0和Zone x的Log2PhyTable;
图6是本发明实施例的写扇区(Write Sector)的流程图,如图6所示,NandFlash具有按块(block)擦除按扇区(sector)或页(page)写的物理特性,而对逻辑块的写操作是不用关注这一物理特性的。故而在写的过程中经常会存在“搬移”的动作。如图6所示:
步骤1,将线性的逻辑sector地址进行计算,得到逻辑blockX及SectorY地址;
步骤2,查找逻辑到物理转换表,如果该逻辑block已经分配物理block,则跳到步骤3,否则跳到步骤4;
步骤3,进一步判断是否为覆盖写,若是则查找AssignTable找一个空的blockZ,将SectorY之前的数据从当前的物理block(OldBlock)搬移到blockZ,若不是覆盖写则直接跳到步骤4;
步骤4,写SectorY;
步骤5,判断SectorY是否最后一个Sector,如是则将OldBlock放入回收表。
需要说明的是,在上述处理中,如果当写操作不成功时需要做相应的保护;回收废弃的block时,一般是在系统空闲时进行处理。
综上所述,借助于本发明实施例的技术方案,解决了现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题,能够使一款产品可兼容市面上已有的Nand Flash,同时提供良好的扩展接口,能够快速支持新的Nand Flash,从而缩短了产品上市时间,提高了产品的竞争力。
装置实施例
根据本发明的实施例,提供了一种不同Nand闪存兼容装置,图7是本发明实施例的不同Nand闪存兼容装置的结构示意图,如图7所示,根据本发明实施例的不同Nand闪存兼容装置包括:系统数据写入模块70、上电模块72、以及用户数据写入模块74,以下对本发明实施例的各个模块进行详细的说明。
系统数据写入模块70,用于在工厂模式下通过PC端的烧写工具将NandFlash驱动、以及USB驱动写入到Nand Flash中预先划分的引导(boot)区(Block0),在此过程中烧写工具通过usb与系统交互,此时系统运行的是ROM中的程序;然后加载block0中的驱动程序到RAM中运行,初始化Nand Flash,建立逻辑到物理块转换表,并将包含系统代码以及系统配置信息写入到NandFlash中预先划分的保留区(Reserved Area),其中,引导区为物理分区,保留区为逻辑分区。此处描述的软件包中的数据是按功能模块划分的,例如系统分为5个模块M0~M5,则在保留区中这5个模块都有相应的存放区域AREA0~AREA5。
也就是说,系统数据写入模块70需要首先将Nand Flash划分为boot区、保留区、用户数据区(User Area),除了boot区(对应于物理块block0)是直接对Nand Flash物理块(block)进行操作外,保留区和用户区都是逻辑分区,对它们的操作也都是逻辑上的的操作,这样的好处是屏蔽了物理分区对分区大小的限制,可以根据需要任意配置逻辑分区大小。在本发明实施例中,逻辑分区采用块映射的方式与物理块对应,在Nand Flash初始化时建立对应关系。Boot区中存放基本Nand Flash驱动及USB驱动程序,保留区中存放完整的系统代码及系统配置信息,用户区存放用户数据。
系统数据写入模块70具体用于:获取Nand闪存的闪存标识ID,根据闪存ID在预先设置的闪存列表中查找与闪存ID对应的Nand闪存特性参数;根据Nand闪存特性参数将相应的Nand闪存驱动和相应的USB驱动写入到引导区中,并根据保留区逻辑到物理块转换表将与Nand闪存特性参数相对应的系统代码以及系统配置信息写入到保留区中;
也就是说,为了解决不同的Nand Flash如何兼容的问题,首先需要构建完整的市面存在的各厂家的不同架构不同容量的Nand Flash列表,在PC端烧写工具侧维护一套与不同架构不同容量的Nand Flash对应的Nand Flash特性参数,烧写时根据不同的Nand Flash ID加以区分,烧写与Nand Flash ID所对应的Nand Flash特性参数相匹配的软件包。当有新的Nand Flash出现时只需要在Nand Flash列表中添加Nand Flash ID等信息即可。
为了使1bit、4bit、以及8bit的ECC兼容,系统数据写入模块70可以通过以下两种方式实现:
方式一:系统数据写入模块70在将Nand闪存驱动、以及USB驱动写入到Nand闪存中预先划分的引导区,并根据保留区逻辑到物理块转换表将系统代码以及系统配置信息写入到Nand闪存中预先划分的保留区的过程中,通过Nand闪存驱动计算错误检查和纠正ECC码,并将计算的ECC码写入Nand闪存的相应冗余区;其中,在只需4比特ECC与8比特ECC兼容,且冗余区足够的情况下,对于需要4比特ECC的Nand闪存采用8比特ECC纠错算法;根据闪存ID获取冗余区的实际大小,对于冗余区多出的区域进行填充;
如果只需1bit与4bit ECC兼容,且Spare区足够的情况下,可采用4bit ECC向下兼容的方法,即对于需要1bit ECC的Flash也采用4bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用0Xff进行填充。
方式二:系统数据写入模块70进一步用于:根据Nand闪存特性参数制作不同的包含错误检查和纠正ECC码的大镜像数据包,其中,大镜像数据包包括:包含ECC码的Nand闪存驱动、包含ECC码的USB驱动、包含ECC码的系统代码、以及包含ECC码的系统配置信息;根据Nand闪存特性参数将相应的包含ECC码的Nand闪存驱动和相应的包含ECC码的USB驱动写入到引导区中,并根据保留区逻辑到物理块转换表将与Nand闪存特性参数相对应的包含ECC码的系统代码和包含ECC码的系统配置信息写入到保留区中。
也就是说,在实际应用中,1bit、4bit、以及8bit ECC之间的兼容有两种方法:第一种方法:软件包本身不带ECC码,在烧写时通过烧写工具与设备底层驱动配合,获取Nand Flash ID,烧写相应的软件包并在烧写的过程中通过Nand Flash驱动计算ECC码(硬件实现或软件实现计算ECC码),然后写入Nand Flash的冗余(Spare)区;第二种方法:针对1bit、4bit、以及8bit ECC分别制作不同的包含ECC码的大镜像软件包,在烧写时根据获取到的不同的Nand Flash ID,烧写不同的大镜像软件包而不需要在烧写过程中计算ECC。
如果只需4bit与8bit ECC兼容,且Spare区足够的情况下,可采用8bit ECC向下兼容的方法,即对于需要4bit ECC的Flash也采用8bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用0Xff进行填充。
如果只需1bit与4bit ECC兼容,且Spare区足够的情况下,可采用4bit ECC向下兼容的方法,即对于需要1bit ECC的Flash也采用4bit ECC纠错算法,在烧写时根据获取到的Nand Flash ID加以区分,从而获取实际Spare区的大小,对于spare区多出的区域,使用0Xff进行填充。
系统数据写入模块70具体包括:
第一计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
第一查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第一判断子模块,否则调用第二查找子模块;
第一判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第一更新子模块;若不是覆盖写,则直接调用第一写入子模块;
第二查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第一更新子模块;
第一更新子模块,用于更新逻辑到物理块转换表,调用第一写入子模块;
第一写入子模块,用于将数据写入扇区地址,调用第一回收子模块;
第一回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块进行回收;
上电模块72,用于在Normal模式下系统上电时,通过只读存储器(Read-Only Memory,简称为ROM)中的程序对不同构架的Nand Flash的枚举,加载引导区中的Nand Flash驱动和USB驱动以及其它系统程序到随机存储器(Random Access Memory,简称为RAM)中运行,初始化Nand Flash,根据Nand Flash冗余(Spare)区中的信息重新建立Nand闪存的逻辑到物理块转换表(需要说明的是,逻辑到物理转换表是在上电时重新建立的,无论是保留区还是用户数据区,每次上电都会根据spare区中的信息重新建立),并根据需要将保留区中的系统代码和系统配置信息加载到RAM中运行,例如加载M0模块则会从保留区中的AREA0中读取,与此同时系统会根据需要读取保存在保留区中的配置数据信息到RAM中。
上电模块72具体用于:遍历用户数据区的所有物理块,从物理块的第一个页和最后一个页的冗余区中获取该物理块对应的逻辑块信息,并根据逻辑块到物理块的对应关系建立用户数据区逻辑到物理块转换表,其中,用户数据区逻辑到物理块转换表中保存了逻辑块号与物理块号的对应关系,并标记有物理块的使用情况。
也就是说,在boot阶段,ROM(这一部分代码是固化在ROM中的)通过对归纳出的不同架构的Nand Flash的枚举,读取预先存放在boot区(block0)中的代码,从而获得基本的Nand Flash驱动和Usb驱动,再通过基本的读写接口读取保留区中的系统代码到RAM的代码区域(Code area),以及读取系统配置信息到数据区域(Data area),根据系统配置信息在RAM中运行系统代码。
用户数据写入模块74,用于在系统运行过程中,当用户有相应操作时,根据用户数据区逻辑到物理块转换表将用户数据(文件)写入用户数据区或者从用户数据区中读取数据(文件),其中,用户数据区为逻辑分区。
用户数据写入模块74具体包括:
第二计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
第三查找子模块,用于查找逻辑到物理块转换表,如果与逻辑块地址相对应的逻辑块已经分配物理块,则调用第二判断子模块,否则调用第四查找子模块;
第二判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将扇区地址之前的数据从当前的旧物理块搬移到空的新物理块,调用第二更新子模块;若不是覆盖写,则直接调用第二写入子模块;
第四查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用第二更新子模块;
第二更新子模块,用于更新逻辑到物理块转换表,调用第二写入子模块;
第二写入子模块,用于将数据写入扇区地址,调用第一回收子模块;
第二回收子模块,用于判断扇区地址是否最后一个扇区,如是则将旧物理块如是则将旧物理块加入回收表中,待CPU空闲时进行回收。
综上所述,借助于本发明实施例的技术方案,解决了现有技术中Nand闪存的驱动和文件系统不易兼容不同架构的Nand闪存的问题,能够使一款产品可兼容市面上已有的Nand Flash,同时提供良好的扩展接口,能够快速支持新的Nand Flash,从而缩短了产品上市时间,提高了产品的竞争力。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的不同Nand闪存兼容装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (14)

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获取冗余区的实际大小,对于所述冗余区多出的区域进行填充;
在只需1比特ECC与4比特ECC兼容,且冗余区足够的情况下,对于需要1比特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,判断所述扇区地址是否最后一个扇区,若是,则将所述旧物理块进行回收,否则,结束操作。
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所述的装置,其特征在于,所述系统数据写入模块具体包括:
第一计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
第一查找子模块,用于查找逻辑到物理块转换表,如果与所述逻辑块地址相对应的逻辑块已经分配物理块,则调用第一判断子模块,否则调用第二查找子模块;
第一判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将所述扇区地址之前的数据从当前的旧物理块搬移到所述空的新物理块,调用第一更新子模块;若不是覆盖写,则直接调用第一写入子模块;
第二查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用所述第一更新子模块;
第一更新子模块,用于更新逻辑到物理块转换表,调用所述第一写入子模块;
第一写入子模块,用于将数据写入所述扇区地址,调用所述第一回收子模块;
第一回收子模块,用于判断所述扇区地址是否最后一个扇区,如是则将所述旧物理块进行回收;
所述用户数据写入模块具体包括:
第二计算子模块,用于对线性的逻辑扇区地址进行计算,得到相应的逻辑块地址及扇区地址;
第三查找子模块,用于查找逻辑到物理块转换表,如果与所述逻辑块地址相对应的逻辑块已经分配物理块,则调用第二判断子模块,否则调用第四查找子模块;
第二判断子模块,用于判断是否为覆盖写,若是则根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,将所述扇区地址之前的数据从当前的旧物理块搬移到所述空的新物理块,调用第二更新子模块;若不是覆盖写,则直接调用第二写入子模块;
第四查找子模块,用于根据逻辑到物理块转换表中的物理块的使用情况查找一个空的新物理块,调用所述第二更新子模块;
第二更新子模块,用于更新逻辑到物理块转换表,调用所述第二写入子模块;
第二写入子模块,用于将数据写入所述扇区地址,调用所述第一回收子模块;
第二回收子模块,用于判断所述扇区地址是否最后一个扇区,如是则将所述旧物理块进行回收,否则,结束操作。
CN201210578349.4A 2012-12-27 2012-12-27 不同Nand闪存兼容方法及装置 Pending CN103902461A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201210578349.4A CN103902461A (zh) 2012-12-27 2012-12-27 不同Nand闪存兼容方法及装置
EP13794434.4A EP2940589A4 (en) 2012-12-27 2013-07-23 METHOD AND DEVICE FOR IMPLEMENTING COMPATIBILITY BETWEEN DIFFERENT NAND FLASH STORES
PCT/CN2013/079926 WO2013174326A2 (zh) 2012-12-27 2013-07-23 不同Nand闪存兼容方法及装置
US14/758,027 US20150347294A1 (en) 2012-12-27 2013-07-23 Method and Apparatus for Implementing Compatibility between Different Nand Flash Memories

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210578349.4A CN103902461A (zh) 2012-12-27 2012-12-27 不同Nand闪存兼容方法及装置

Publications (1)

Publication Number Publication Date
CN103902461A true CN103902461A (zh) 2014-07-02

Family

ID=49624417

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210578349.4A Pending CN103902461A (zh) 2012-12-27 2012-12-27 不同Nand闪存兼容方法及装置

Country Status (4)

Country Link
US (1) US20150347294A1 (zh)
EP (1) EP2940589A4 (zh)
CN (1) CN103902461A (zh)
WO (1) WO2013174326A2 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104808953A (zh) * 2015-05-07 2015-07-29 广东欧珀移动通信有限公司 控制数据存储的方法、装置及移动终端
CN107678686A (zh) * 2017-09-19 2018-02-09 山东存储之翼电子科技有限公司 基于硬件实现闪存的ftl功能的方法及其数据存储装置
CN107729067A (zh) * 2017-09-11 2018-02-23 北京东土科技股份有限公司 一种flash芯片驱动的注册方法及装置
CN108897576A (zh) * 2018-06-19 2018-11-27 上海繁易信息科技股份有限公司 一种基于arm芯片的快速启动boot的方法
CN109388583A (zh) * 2018-10-10 2019-02-26 深圳芯邦科技股份有限公司 一种参数检测的方法及相关设备
CN110362526A (zh) * 2019-06-19 2019-10-22 合肥致存微电子有限责任公司 Spi从机设备、存储和适配方法及计算机存储介质
CN114816571A (zh) * 2022-04-15 2022-07-29 西安广和通无线通信有限公司 外挂闪存的方法、装置、设备及存储介质

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI537826B (zh) * 2011-05-05 2016-06-11 聯詠科技股份有限公司 主晶片開機方法
KR101886176B1 (ko) * 2016-10-25 2018-08-08 시큐리티플랫폼 주식회사 소유자만 기록 가능한 부트영역을 포함하는 저장장치
TWI634561B (zh) * 2017-03-24 2018-09-01 群聯電子股份有限公司 資料保護方法、記憶體儲存裝置及記憶體控制電路單元
US10430106B2 (en) * 2018-02-16 2019-10-01 Microsoft Technology Licensing, Llc Policy based tiered allocation for hybrid storage devices
JP7109949B2 (ja) 2018-03-23 2022-08-01 キオクシア株式会社 メモリシステム及びメモリシステムの制御方法
US10585795B2 (en) * 2018-05-31 2020-03-10 Micron Technology, Inc. Data relocation in memory having two portions of data

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101101564A (zh) * 2006-07-07 2008-01-09 上海晨兴电子科技有限公司 对产品中所使用的闪存型号的自动识别方法
CN101458656A (zh) * 2007-12-12 2009-06-17 安凯(广州)软件技术有限公司 多媒体应用处理器兼容各种Nandflash的方法
CN102184117A (zh) * 2011-06-03 2011-09-14 展讯通信(上海)有限公司 系统在不同类型的Nandflash上的启动方法及装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6839771B1 (en) * 2000-04-13 2005-01-04 Hewlett-Packard Development Company, L.P. Method and system for using a universal serial bus (USB) as a peer-to-peer network
WO2003012577A2 (en) * 2001-07-31 2003-02-13 Silicom Ltd. Device-related software installation
US6901499B2 (en) * 2002-02-27 2005-05-31 Microsoft Corp. System and method for tracking data stored in a flash memory device
JP2005108304A (ja) * 2003-09-29 2005-04-21 Toshiba Corp 半導体記憶装置及びその制御方法
KR100864814B1 (ko) * 2007-02-09 2008-10-23 주식회사 씨모텍 광 저장 장치 또는/및 이동식 디스크로 구현된 컴퓨터 확장장치 및 그 구현 방법
US8452914B2 (en) * 2010-11-26 2013-05-28 Htc Corporation Electronic devices with improved flash memory compatibility and methods corresponding thereto
US8799555B2 (en) * 2011-04-14 2014-08-05 Apple Inc. Boot data storage schemes for electronic devices
CN102306124A (zh) * 2011-08-01 2012-01-04 深圳市文鼎创数据科技有限公司 Nand Flash芯片硬件驱动层的实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101101564A (zh) * 2006-07-07 2008-01-09 上海晨兴电子科技有限公司 对产品中所使用的闪存型号的自动识别方法
CN101458656A (zh) * 2007-12-12 2009-06-17 安凯(广州)软件技术有限公司 多媒体应用处理器兼容各种Nandflash的方法
CN102184117A (zh) * 2011-06-03 2011-09-14 展讯通信(上海)有限公司 系统在不同类型的Nandflash上的启动方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
董永帅: "Flash文件系统及存储管理技术研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *
阎航: "Flash存储卡文件系统的研究", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104808953B (zh) * 2015-05-07 2018-11-27 广东欧珀移动通信有限公司 控制数据存储的方法、装置及移动终端
CN104808953A (zh) * 2015-05-07 2015-07-29 广东欧珀移动通信有限公司 控制数据存储的方法、装置及移动终端
CN107729067A (zh) * 2017-09-11 2018-02-23 北京东土科技股份有限公司 一种flash芯片驱动的注册方法及装置
CN107729067B (zh) * 2017-09-11 2021-04-20 北京东土科技股份有限公司 一种flash芯片驱动的注册方法及装置
CN107678686A (zh) * 2017-09-19 2018-02-09 山东存储之翼电子科技有限公司 基于硬件实现闪存的ftl功能的方法及其数据存储装置
CN108897576A (zh) * 2018-06-19 2018-11-27 上海繁易信息科技股份有限公司 一种基于arm芯片的快速启动boot的方法
CN108897576B (zh) * 2018-06-19 2021-06-22 上海繁易信息科技股份有限公司 一种基于arm芯片的快速启动boot的方法
CN109388583B (zh) * 2018-10-10 2024-01-12 深圳芯邦科技股份有限公司 一种参数检测的方法及相关设备
CN109388583A (zh) * 2018-10-10 2019-02-26 深圳芯邦科技股份有限公司 一种参数检测的方法及相关设备
CN110362526A (zh) * 2019-06-19 2019-10-22 合肥致存微电子有限责任公司 Spi从机设备、存储和适配方法及计算机存储介质
CN110362526B (zh) * 2019-06-19 2023-02-17 合肥致存微电子有限责任公司 Spi从机设备、存储和适配方法及计算机存储介质
CN114816571B (zh) * 2022-04-15 2023-06-16 西安广和通无线通信有限公司 外挂闪存的方法、装置、设备及存储介质
CN114816571A (zh) * 2022-04-15 2022-07-29 西安广和通无线通信有限公司 外挂闪存的方法、装置、设备及存储介质

Also Published As

Publication number Publication date
WO2013174326A3 (zh) 2014-01-16
EP2940589A4 (en) 2016-03-02
EP2940589A2 (en) 2015-11-04
US20150347294A1 (en) 2015-12-03
WO2013174326A2 (zh) 2013-11-28

Similar Documents

Publication Publication Date Title
CN103902461A (zh) 不同Nand闪存兼容方法及装置
CN1223945C (zh) 改进的闪速文件系统
CN102999431B (zh) 用于非易失性存储器系统的编织序列计数器
US8131911B2 (en) Data writing method, and flash storage system and controller using the same
KR102462305B1 (ko) 고체 상태 드라이브의 판독 성능을 개선시키는 방법 및 장치
US9058256B2 (en) Data writing method, memory controller and memory storage apparatus
EP2587487A1 (en) File system and control method thereof
KR20180121794A (ko) 동적 슈퍼 블록을 포함하는 메모리 장치 및 관련 방법 및 전자 시스템
TWI454911B (zh) 資料寫入方法、記憶體控制器與記憶體儲存裝置
CN103106143A (zh) 固态储存装置及其逻辑至实体对应表建立方法
CN1932778A (zh) 一种对nand flash存储器进行虚拟空间管理的方法
CN106445398A (zh) 一种基于新型存储器的嵌入式文件系统及其实现方法
US20100042775A1 (en) Block management method for flash memory, and storage system and controller using the same
CN103744694A (zh) 基于Nand闪存的动态分区搜索装置及其方法
CN105279115A (zh) 闪存控制装置、闪存控制系统以及闪存控制方法
CN106020837A (zh) 一种加载机顶盒驱动的方法及系统
US20100088540A1 (en) Block management and replacement method, flash memory storage system and controller using the same
CN112596668A (zh) 一种存储器的坏块处理方法及系统
CN105159716A (zh) 一种存储器件初始化方法和电子设备
CN103136111A (zh) 数据写入方法、存储器控制器与存储器储存装置
KR20080038368A (ko) 데이터 파일을 직접 저장하는 재프로그램가능 비휘발성메모리에 파일 데이터의 인덱싱
US20080065814A1 (en) Storing a Driver for Controlling a Memory
CN102800357A (zh) 程序码载入与存取方法、存储器控制器与存储器储存装置
US8738847B2 (en) Data writing method, and memory controller and memory storage apparatus using the same
JP2000285001A (ja) 半導体フラッシュメモリ装置及びその制御方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20140702