一种Nand Flash参数的读取方法转让专利

申请号 : CN201510795123.3

文献号 : CN105280240B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谢长武卜弋天庹凌云刘方李烨

申请人 : 致象尔微电子科技(上海)有限公司

摘要 :

本发明涉及一种Nand Flash参数的读取方法。该方法包括以下步骤:发出Nand Flash读取命令,读取多段Nand Flash参数中的第一段Nand Flash参数;每段Nand Flash参数包括第一部分数据和第二部分数据;对第一部分数据做第一次校验,如果第一次校验正确,则继续对第一部分数据做第二次校验;如果第二次校验正确,则根据第一部分数据中参数的值和程序设定的值进行比较;如果相同,则确定Nand Flash参数读取成功。本发明在不增加额外存储器和成本的前提下,实现了Nand Flash参数的自动识别功能。

权利要求 :

1.一种Nand Flash参数的读取方法,其特征在于,所述方法包括以下步骤:发出Nand Flash读取命令,读取多段Nand Flash参数中的第一段Nand Flash参数;所述多段Nand Flash参数中的每段Nand Flash参数相同;所述每段Nand Flash参数包括第一部分数据和第二部分数据;

对所述第一部分数据做第一次校验,如果所述第一次校验正确,则继续对所述第一部分数据做第二次校验;

如果所述第二次校验正确,则根据所述第一部分数据中参数的值和程序设定的该参数的值进行比较;

如果所述第一部分数据中参数的值和程序设定的该参数的值相同,则确定所述Nand Flash参数中的第一段Nand Flash参数读取成功。

2.根据权利要求1所述的方法,其特征在于,所述第一次校验具体包括以下步骤:通过错误检查和纠正ECC算法对第一部分数据计算,做ECC校验,得到第一校验码;

所述第一校验码与所述第二部分数据做比较;

如果相同,则所述第一次校验正确,继续对所述第一部分数据做第二次校验。

3.根据权利要求1所述的方法,其特征在于,所述第二次校验具体包括以下步骤:通过循环冗余校验码CRC算法对第一部分数据计算,做CRC校验,得到第二校验码;

所述第二校验码与所述第一部分数据中的CRC校验码做比较;

如果相同,则所述第二次校验正确,继续根据所述第一部分数据中参数的值和程序设定的该参数的值进行比较。

4.根据权利要求2所述的方法,其特征在于,如果所述第一次校验不正确,则使用所述第二部分数据对第一部分数据进行ECC纠错;

如果所述ECC纠错成功,则继续对所述第一部分数据做第二次校验。

5.根据权利要求4所述的方法,其特征在于,如果所述ECC纠错不成功,则读取所述多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。

6.根据权利要求3所述的方法,其特征在于,如果所述第二次校验不正确,则读取所述多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。

7.根据权利要求1所述的方法,其特征在于,如果所述第一部分数据中参数的值和程序设定的该参数的值不相同,则读取所述多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。

8.根据权利要求1所述的方法,其特征在于,在发出Nand Flash读取命令之前,还包括以下步骤:在对Nand Flash编程时,在Nand Flash第一地址开始的存储空间,连续存储多段相同字节的Nand Flash参数。

9.根据权利要求1—7中任一权利要求所述的方法,其特征在于,所述第一部分数据包括厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码;所述第二部分数据包括ECC校验码;

根据所述第一部分数据中的厂家标记和程序设定的值进行比较,如果所述厂家标记和程序设定的值相同,则确定所述Nand Flash参数读取成功。

10.根据权利要求9所述的方法,其特征在于,所述CRC校验码和ECC校验码是在对Nand Flash编程时实时写入的。

说明书 :

一种Nand Flash参数的读取方法

技术领域

[0001] 本发明涉及半导体技术领域,尤其涉及一种Nand Flash参数的读取方法。

背景技术

[0002] Nand Flash作为一种低价、大容量的存储设备,在嵌入式系统中使用越来越广泛。不同的型号的Nand Flash有着不同的页面大小、块大小、空闲区域大小,而且不同的Nand Flash对ECC校验强度也不相同,在不支持ONFI(Open Nand Flash Interface)标准协议的Nand Flash芯片中,这些数据只能通过厂家提供的数据手册获得。
[0003] 在使用Nand Flash作为存储设备的嵌入式应用中,处理器复位后都会先执行一段固化在处理器芯片内部的名为ROM code的代码,从Nand Flash中读取代码到片内或者片外的RAM中,然后运行相应的程序。要从Nand Flash中正确的读取代码,就必须先获取Nand Flash页面大小、块大小等参数,而现有Nand Flash参数配置只能通过编译时指定或者通过处理器的引脚配置选择,导致一段固化的代码无法正确操作不同类型的Nand Flash,灵活性较差。

发明内容

[0004] 本发明的目的是为了解决上述现有技术的不足之处,提供一种Nand Flash参数的读取方法。可以解决一段固化的代码无法正确操作不同类型的Nand Flash的问题。
[0005] 为实现上述目的,本发明提供了一种Nand Flash参数的读取方法,该方法包括以下步骤:
[0006] 发出Nand Flash读取命令,读取多段Nand Flash参数中的第一段Nand Flash参数;多段Nand Flash参数中的每段Nand Flash参数相同;每段Nand Flash参数包括第一部分数据和第二部分数据;对第一部分数据做第一次校验,如果第一次校验正确,则继续对第一部分数据做第二次校验;如果第二次校验正确,则根据第一部分数据中参数的值和程序设定的该参数的值进行比较;如果第一部分数据中参数的值和程序设定的该参数的值相同,则确定Nand Flash参数读取成功。
[0007] 优选地,第一次校验具体包括以下步骤:通过错误检查和纠正ECC算法对第一部分数据计算,做ECC校验,得到第一校验码;第一校验码与第二部分数据做比较;如果相同,则第一次校验正确,继续对第一部分数据做第二次校验。
[0008] 优选地,第二次校验具体包括以下步骤:通过循环冗余校验码CRC算法对第一部分数据计算,做CRC校验,得到第二校验码;第二校验码与第一部分数据中的CRC校验码做比较;如果相同,则第二次校验正确,继续根据第一部分数据中参数的值和程序设定的该参数的值进行比较。
[0009] 优选地,如果第一次校验不正确,则使用第二部分数据对第一部分数据进行ECC纠错;如果ECC纠错成功,则继续对第一部分数据做第二次校验。
[0010] 优选地,如果ECC纠错不成功,则读取多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。
[0011] 优选地,如果第二次校验不正确,则读取多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。
[0012] 优选地,如果第一部分数据中参数的值和程序设定的该参数的值不相同,则读取多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。
[0013] 优选地,在发出Nand Flash读取命令之前,还包括以下步骤:在对Nand Flash编程时,在Nand Flash第一地址开始的存储空间,连续存储多段相同字节的Nand Flash参数。
[0014] 优选地,第一部分数据包括厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码;第二部分数据包括ECC校验码;根据第一部分数据中的厂家标记和程序设定的值进行比较,如果厂家标记和程序设定的值相同,则确定Nand Flash参数读取成功。
[0015] 优选地,CRC校验码和ECC校验码是在对Nand Flash编程时实时写入的。
[0016] 本发明利用CRC校验和ECC检错/纠错技术,在不增加额外存储器和成本的前提下,实现了Nand Flash参数的自动识别功能,适用于对成本敏感的应用场合,特别适用于处理器ROM code的设计。

附图说明

[0017] 为了更清楚说明本发明实施例的技术方案,下面将对实施例描述中所需使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018] 图1为本发明实施例提供的一种Nand Flash参数的读取方法的参数结构示意图;
[0019] 图2为本发明实施例提供的一种Nand Flash参数的读取方法的流程示意图;
[0020] 图3为本发明实施例提供的又一种Nand Flash参数的读取方法的流程示示意图。

具体实施方式

[0021] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0022] 为便于对本发明实施例的理解,下面将结合附图以具体实施例做进一步的解释说明。
[0023] 鉴于现有Nand Flash参数只能通过编译时指定或者通过处理器的引脚配置选择,本发明提供一种Nand Flash参数的读取方法。
[0024] 首先,该Nand Flash的参数通过以下方法保存:
[0025] 在对Nand Flash编程时,在Nand Flash的0地址开始的连续存储空间,每位地址存放1字节数据,按照64字节为单位,连续存储8段相同的参数,即0—63地址存放第一段64字节的Nand Flash参数数据,之后以此重复8次存放0—63地址内64字节的Nand Flash参数数据,每一段参数都用循环冗余校验码CRC(Cyclic Redundancy Check)校验算法和错误检查和纠正ECC校验检错/纠错算法保护(Error Checking and Correcting)。
[0026] 图1为本发明实施例提供的一种Nand Flash参数的读取方法的参数结构示意图,如图1所示,该Nand Flash参数结构包括:
[0027] 厂家标记(4字节)、页面大小(4字节)、块大小(4字节)、空闲区域大小(4字节)、总容量(8字节)、ECC强度(4字节)、CRC校验码(4字节)、和ECC校验码(32字节)。
[0028] 具体地,在Nand Flash的0地址开始的连续存储空间,0-3地址存放4字节的厂家标记数据,4-7地址存放4字节的页面大小数据,8-11地址存放4字节的块大小数据,12-15地址存放4字节的空闲区域大小数据,16-23地址存放8字节的总容量数据,24-27地址存放4字节的ECC强度数据,28-31地址存放4字节的CRC校验码数据,32-63地址存放32字节的ECC校验码数据。
[0029] Nand Flash的参数保存过程是在对Nand Flash编程时,按照如图1所示格式,把64×8字节的数据写到Nand Flash的0地址开始的存储空间。其中,厂家标记可以固定为一个幻数,处理器会读取这个数来判断该数据段是否是有效的参数数据结构。页面大小、块大小、空闲区域大小、总容量以及ECC强度则通过获取对应Nand Flash的数据手册获得,CRC校验码、ECC校验码则在对Nand Flash编程时实时写入。
[0030] 需要说明的是,Nand Flash参数中的ECC强度是保证Nand Flash能够达到Nand Flash生产厂家标称的使用寿命所要求的ECC算法。在此不再赘述,以免模糊本发明的主题。
[0031] ECC校验码和CRC校验码是用来对Nand Flash的参数进行校验或纠错的,保证Nand Flash的有效参数数据的正确性和完整性。
[0032] Nand Flash的参数读取识别是处理器程序运行时,从Nand Flash的0地址开始,读取第一段64字节的参数,先使用ECC纠错算法对Nand Flash可能发生的位反转问题进行检错/纠错处理,然后使用CRC校验算法对实际的参数进行CRC校验以保证数据的完整性。如果第一段的CRC校验不正确,则继续读取下一段的参数,重复上述操作,直到读取到正确的参数为止。
[0033] 图2为本发明实施例提供的一种Nand Flash参数的读取方法的流程示意图。如图2所示,该方法包括步骤201—204:
[0034] 步骤201,处理器发出Nand Flash读取命令,读取多段Nand Flash参数中的第一段Nand Flash参数,读取0地址开始的64字节数据到RAM中。
[0035] 如图1所示,多段Nand Flash参数中的每段Nand Flash参数相同。设每段Nand Flash参数包括第一部分数据和第二部分数据。每段Nand Flash参数的第一部分数据包括厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码。第一部分数据中的厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度为有效Nand Flash参数。第二部分数据包括ECC校验码。
[0036] 步骤202,对第一部分数据做第一次校验,如果第一次校验正确,则继续对第一部分数据做第二次校验。
[0037] 第一次校验具体包括以下步骤:通过错误检查和纠正ECC算法对第一部分数据计算,做ECC校验,得到第一校验码;第一校验码与第二部分数据做比较;如果相同,则第一次校验正确,继续对第一部分数据做第二次校验。
[0038] 如果第一次校验不正确,则使用第二部分数据对第一部分数据进行ECC纠错;如果ECC纠错成功,则继续对第一部分数据做第二次校验。
[0039] 如果ECC纠错不成功,则读取多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。
[0040] 先对前32字节的Nand Flash参数数据进行ECC校验,由于Nand Flash的工艺原因,可能在使用过程中发生位反转的问题,所以需要对读取到的数据(厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码)做ECC校验。校验结果与后32字节(ECC校验码)进行比较。
[0041] 如果步骤202进行的第一次校验,校验结果与后32字节的ECC校验码相同,即ECC校验正确,继续对前32字节的Nand Flash参数数据进行第二次校验,以便进一步保证Nand Flash参数的数据完整性;否则,如果步骤202进行的ECC校验不正确,尝试使用后32字节的ECC校验码对前32字节的厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码进行ECC纠错,如果纠错成功则继续对前32字节的Nand Flash参数数据进行第二次校验,否则,如果纠错不成功,重新读取下一个64字节的Nand Flash数据,重复步骤201。
[0042] 需要说明的是,对Nand Flash参数的前32字节的数据通过某种ECC算法(比如BCH8)计算后,可以得到一个校验码A。由于Nand Flash的工艺原因,可能在使用过程中发生位反转的问题,后32字节的ECC校验码是事先通过ECC算法(比如BCH8)计算好的,存储在Nand Flash参数数据的后32字节,用什么ECC算法是双方约定好的,而且是固定不变的。校验码A和Nand Flash参数中的后32字节的ECC校验码进行比较,相同则表示ECC校验正确,继续对第一部分数据做第二次校验。不相同则表示ECC校验不正确,则使用第二部分数据对第一部分数据进行ECC纠错,如果ECC纠错成功,则继续对第一部分数据做第二次校验。如果ECC纠错不成功,则读取多段Nand Flash参数中的下一段Nand Flash参数,重复步骤201,再次进行Nand Flash参数读取。
[0043] ECC校验码的长度根据ECC算法的不同而不同,在本实施例中,对Nand Flash参数保存时预留了32字节的ECC校验码存储空间。
[0044] 本实施例采用的ECC算法为BCH8算法,还可以采用其他ECC算法,如Hamming算法或BCH16算法等,在此不再赘述。
[0045] 步骤203,如果第二次校验正确,则根据第一部分数据中参数的值和程序设定的该参数的值进行比较。
[0046] 第二次校验具体包括以下步骤:通过循环冗余校验码CRC算法对第一部分数据计算,做CRC校验,得到第二校验码;第二校验码与第一部分数据中的CRC校验码做比较;如果相同,则第二次校验正确,继续根据第一部分数据中参数的值和程序设定的该参数的值进行比较。
[0047] 如果第二次校验不正确,则读取多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。
[0048] 如果步骤202第一次校验的ECC校验正确,则继续对第一部分数据做循环冗余校验码CRC校验。继续对前32字节的Nand Flash参数数据进行CRC校验,以便进一步保证Nand Flash参数的数据完整性。
[0049] 需要说明的是,同样的,CRC校验是对前32字节的厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码(程序计算过程中,先将这四个字节的CRC校验码数据置零),通过CRC算法(比如CRC32中的某一种)计算后,得到一个校验码B。CRC计算完成后,校验码B与Nand Flash参数中的CRC校验码做比较,相同则表示CRC校验正确,继续根据第一部分数据中参数的值和程序设定的该参数的值进行比较。
[0050] 如果第二次校验得到的校验码B与Nand Flash参数中的CRC校验码不相同,表示CRC校验不正确,则读取多段Nand Flash参数中的下一段Nand Flash参数,重复步骤201,再次进行Nand Flash参数读取。
[0051] 步骤204,如果第一部分数据中参数的值和程序设定的该参数的值相同,则确定Nand Flash参数读取成功。
[0052] 如果第一部分数据中参数的值和程序设定的该参数的值不相同,则读取多段Nand Flash参数中的下一段Nand Flash参数,再次进行Nand Flash参数读取。
[0053] 如果步骤203第二次校验的CRC校验成功,则根据第一部分数据中的厂家标记参数的值和程序设定的厂家标记的值进行比较,如果Nand Flash参数中的厂家标记和程序设定的值相同,则确定所述Nand Flash参数读取成功。读取Nand Flash有效参数:厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度。继续执行其他任务。否则,如果Nand Flash参数中的厂家标记和程序设定的值不相同,重新读取下一个64字节的Nand Flash数据,重复步骤201。
[0054] 需要说明的是,上述重复步骤201的次数累加不超过Nand Flash参数的总段数,即不超过8次。Nand Flash参数的总段数还可以根据实际需要设定,不限于8段。
[0055] 图3为本发明实施例提供的又一种基Nand Flash参数的读取方法的流程示意图,如图3所示,该方法包括步骤301-312:
[0056] 在步骤301,处理器发出Nand Flash读取命令,开始识别参数。
[0057] 在步骤302,处理器读取第一段Nand Flash参数,并保存到RAM存储器。
[0058] 具体地,处理器读取0地址开始的64字节数据到RAM中。由于Nand Flash的工艺原因,可能在使用过程中发生位反转的问题,所以需要对读取到的Nand Flash参数数据做ECC校验。
[0059] 在步骤303,处理器先对前32字节的Nand Flash参数:厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码数据进行ECC校验。
[0060] 在步骤304,将步骤303的ECC校验结果与后32字节ECC校验码进行比较,如果校验正确则进入步骤307,否则进入步骤305。
[0061] 在步骤305,尝试使用后32字节的ECC校验码对前32字节的Nand Flash参数进行ECC纠错。
[0062] 在步骤306,如果步骤305的ECC纠错成功则进入步骤307,否则跳转到步骤312。
[0063] 在步骤307,处理器继续对前32字节的Nand Flash参数:厂家标记、页面大小、块大小、空闲区域大小、总容量、ECC强度和CRC校验码数据进行CRC校验,以便进一步保证Nand Flash参数的数据完整性。
[0064] 在步骤308,如果步骤307的CRC校验成功,则进入步骤309,否则跳转到步骤312。
[0065] 在步骤309,把读取到的Nand Flash参数的厂家标记的值和程序设定的值进行比较。
[0066] 在步骤310,如果Nand Flash参数的厂家标记的值和程序设定的厂家标记的值相同,则读取Nand Flash的参数,进入步骤311。否则转到步骤312。
[0067] 在步骤311,所有Nand Flash参数读取成功,继续执行其他任务。
[0068] 在步骤312,处理器读取下一个64字节的数据,转到步骤303开始重复,直到读取到正确Nand Flash参数为止(重复步骤303总次数不超过8次)。
[0069] 本发明实施例提供了一种Nand Flash参数的读取方法,该方法适用于Nand Flash的参数保存与识别。该方法利用CRC校验和ECC检错/纠错技术,在不增加额外存储器和成本的前提下,实现了Nand Flash参数的自动识别功能,不必再通过编译时指定或者通过处理器的引脚配置选择,提高了对Nand Flash参数识别的精确度和效率。ECC校验码和CRC校验码是用来对Nand Flash的参数进行校验或纠错,保证读取Nand Flash的有效参数数据的正确性和完整性。
[0070] 专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。
专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0071] 结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0072] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。