查找闪存设备中固件程序存放位置的方法转让专利

申请号 : CN201110087950.9

文献号 : CN102147771B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李中政邓恩华

申请人 : 深圳市江波龙电子有限公司

摘要 :

一种查找闪存设备中固件程序存放位置的方法,包括以下步骤:将现有闪存依据每个块内包含的页数由少到多划分为多个等级,对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址;假设闪存为某一等级闪存,按照该等级闪存中每个块内包含的页数为跨度进行查找,直到查找到固件程序存放位置。采用上述方法,能够在查找固件程序时尽可能覆盖到不同的块,提高了查找固件程序存放位置的效率。

权利要求 :

1.一种查找闪存设备中固件程序存放位置的方法,包括以下步骤:

A.将现有闪存依据每个块内包含的页数由少到多划分为多个等级,对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址;

B.假设闪存为第一等级闪存,由第一等级闪存的最大容量的最大行地址除以第一等级闪存中每个块内包含的页数确定第一数量,按照预设查找方式以第一等级闪存中每个块内包含的页数为跨度在所述第一数量个块中进行查找;

C.判断是否查找到固件程序存放位置,若是,则进入步骤G,否则执行步骤D;

D.判断是否还有下一等级闪存,若是,则进入步骤E,否则进入步骤G;

E.假设闪存为下一等级闪存,由所述下一等级闪存的最大容量的最大行地址与上一等级闪存最大容量的最大行地址之差除以所述下一等级闪存中每个块内包含的页数确定第二数量,按照预设查找方式以下一等级闪存中每个块内包含的页数为跨度在所述第二数量个块中进行查找;

F.判断是否查找到固件程序存放位置,若是,则进入步骤G,否则返回步骤D;

G.结束查找。

2.根据权利要求1所述的查找闪存设备中固件程序存放位置的方法,其特征在于,所述步骤A为:将现有闪存依据每个块内包含的页数由少到多划分为三个等级,对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址。

3.根据权利要求2所述的查找闪存设备中固件程序存放位置的方法,其特征在于,所述步骤A中将现有闪存依据每个块内包含的页数由少到多划分为三个等级的过程为:将64页/块的闪存定义为第一等级闪存;

将128页/块的闪存定义为第二等级闪存;

将192页/块和256页/块的闪存定义为第三等级闪存。

4.根据权利要求3所述的查找闪存设备中固件程序存放位置的方法,其特征在于,所述步骤A中对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址的过程为:对三个等级的闪存做定量分析,确定第一等级闪存的最大容量的最大行地址为

0x100000,确定第二等级闪存的最大容量的最大行地址为0x800000,确定第三等级闪存的最大容量的最大行地址为0x1000000。

5.根据权利要求1所述的查找闪存设备中固件程序存放位置的方法,其特征在于,所述预设查找方式为:以预设数量个块为单位,先在第一个所述预设数量个块中查找块号能被2整除的块,然后在第二个所述预设数量个块中查找块号能被3整除的块,接着在第三个所述预设数量个块中查找块号不能被2整除的块,再接着在第四个所述预设数量个块中查找块号不能被3整除的块,在下四个所述预设数量个块中重复上述步骤。

6.根据权利要求1所述的查找闪存设备中固件程序存放位置的方法,其特征在于,所述预设查找方式为:以设定数量个块为周期,在每个周期内只查找与块号对应的页号所在的页。

说明书 :

查找闪存设备中固件程序存放位置的方法

【技术领域】

[0001] 本发明涉及闪存技术领域,尤其涉及一种查找闪存设备中固件程序存放位置的方法。【背景技术】
[0002] 闪存(Flash)是一种非挥发性的半导体存储芯片,具有体积小、功耗低、无磁头等运动器件、不易受物理破坏的优点,是现有便携式存储设备的理想存储介质。利用闪存自身的非挥发性(即掉电后数据也不会丢失)特点,把固件程序存放于闪存,以闪存为存储介质的设备包括有U盘、SD卡(Secure DigitalMemory Card,安全数码卡)、SSD(Solid State Disk,固态硬盘)、MP3、Emmc(嵌入式多媒体卡)等闪存设备。所谓固件程序,是闪存设备的引导程序或者是引导程序的补丁程序。闪存设备加电后,主控芯片(控制单元)从闪存中读取这部分固件程序,按照预先的定义加载到合适的位置,从而使设备正确运行。 [0003] 闪存通常具有如下的物理结构:每片封装片分为一颗或多个晶粒(Dice);每颗晶粒分为多个块(Block);每个块分为多个页面(Page)。对闪存的数据访问有三种类型:擦除、写入和读取。受闪存的物理特性影响,擦除时必须以块为单位,写入时必须以页为单位。读取操作则具有比较大的随意性,多数闪存可以以字节为单位读取。操作闪存的主控芯片一般都会有ECC(Error CodeCorrect,差错纠正)功能,在闪存内数据出错的情况下,可以把错误的数据纠正回来。但是ECC纠错能力是有限的,当闪存内数据出错的比特数目超出了ECC的最大纠错能力时,从闪存内读取的数据就是错误的了。如果从某个块中的某个位置读出的数据是错误的,则称这个块是坏块(Bad Block)。
[0004] 通常,由于固件程序自身比较大,如果全部从闪存内读出,在进行校验时,所花费的时间太多,所以当前的主流方案是建立一个很小的数据结构体,在这个数据结构体内记录了固件程序存放的位置等信息。主控芯片上电搜索时,搜索的是这个数据结构体并进行校验,校验通过后,在根据其中的信息加载固件 程序,因此,查找闪存设备中固件程序存放位置即查找这个数据结构体的位置,查找固件程序即为查找该数据结构体。 [0005] 尽管不同型号的闪存,其物理结构各自不同,但几乎所有的闪存物理结构都可归结为行和列。其中,每个页(Page)是一行,页地址称为行地址(rowaddress),页内的不同地址称为列地址(column address)。如此一来,只用行、列地址即可做到不同型号的闪存的读取操作。
[0006] 通常,从闪存中加载固件程序时,考虑到要兼容不同型号的闪存,预设了一定的行列地址算法,根据该算法计算出要访问的行列地址,查找闪存中存放的固件程序。然而,传统方案在设置行列地址的算法上具有一定的随意性,在闪存质量较差的情况下,使用较为随意的算法时无法覆盖到较多的块。由于闪存内的坏块一般无法使用,所以使用某些质量较差的闪存时,会找不到合适的固件程序存放地址,导致无法兼容到该闪存,降低了闪存设备的易用性。而某些质量较差的闪存价格便宜,如果无法兼容这些闪存,将提高闪存设备的成本。
[0007] 传统方案中,也有从闪存的第一个页开始,逐个页地查找固件程序,这种算法可以覆盖所有块,是一定能找到固件程序的。但是由于访问闪存也是需要时间的,当闪存的质量比较差时,逐个页地去查找固件程序所需要等待的时间比较长,而用户无法忍受这么长的等待时间。考虑到这一问题,传统算法中也有计算出的行地址不是连续的,而是间隔的查找固件程序。然而,这样有时候会忽略掉很多页地址,导致存在查找的“盲点”,即存在这样一种情况:某些块是好的,可以用来存放固件程序,但传统方案的对固件程序的查找方法中并没有包含这些块。此外,传统方案中还存在“重复搜索”的问题,即传统方案计算出来的页地址很多时候是在同一个块内,这样,会在同一个块内的不同页上进行搜索,使得对闪存的访问时间更长,降低了查找固件程序存放位置的效率。【发明内容】
[0008] 基于此,有必要提供一种能尽可能多的覆盖较多的块,同时能提高查找效率的查找闪存设备中固件程序存放位置的方法。
[0009] 一种查找闪存设备中固件程序存放位置的方法,包括以下步骤: [0010] A.将现有闪存依据每个块内包含的页数由少到多划分为多个等级,对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址;
[0011] B.假设闪存为第一等级闪存,由第一等级闪存的最大容量的最大行地址除以第一等级闪存中每个块内包含的页数确定第一数量,按照预设查找方式以第一等级闪存中每个块内包含的页数为跨度在所述第一数量个块中进行查找;
[0012] C.判断是否查找到固件程序存放位置,若是,则进入步骤G,否则执行步骤D; [0013] D.判断是否还有下一等级闪存,若是,则进入步骤E,否则进入步骤G; [0014] E.假设闪存为下一等级闪存,由所述下一等级闪存的最大容量的最大行地址与上一等级闪存最大容量的最大行地址之差除以所述下一等级闪存中每个块内包含的页数确定第二数量,按照预设查找方式以下一等级闪存中每个块内包含的页数为跨度在所述第二数量个块中进行查找;
[0015] F.判断是否查找到固件程序存放位置,若是,则进入步骤G,否则返回步骤D; [0016] G.结束查找。
[0017] 优选的,所述步骤A为:
[0018] 将现有闪存依据每个块内包含的页数由少到多划分为三个等级,对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址。
[0019] 优选的,所述步骤A中将现有闪存依据每个块内包含的页数由少到多划分为三个等级的过程为:
[0020] 将64页/块的闪存定义为第一等级闪存;
[0021] 将128页/块的闪存定义为第二等级闪存;
[0022] 将192页/块和256页/块的闪存定义为第三等级闪存。
[0023] 优选的,所述步骤A中对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址的过程为为:对三个等级的闪存做定量分析,确定第一等级闪存的最大容量的最大行地址为0x100000,确定第二等级闪存的最大容量的最大行地址为0x800000,确定第三等级闪存的最大容量的最大行地址为0x1000000。
[0024] 优选的,所述预设查找方式为:以预设数量个块为单位,先在第一个所述预设数量个块中查找块号能被2整除的块,然后在第二个所述预设数量个块中查找块号能被3整除的块,接着在第三个所述预设数量个块中查找块号不能被2整除的块,再接着在第四个所述预设数量个块中查找块号不能被3整除的块,在下四个所述预设数量个块中重复上述步骤。
[0025] 优选的,所述预设查找方式为:以设定数量个块为周期,在每个周期内只查找与块号对应的页号所在的页。
[0026] 上述查找闪存设备中固件程序存放位置的方法及闪存设备,通过将现有闪存依据每个块内包含的页数由少到多划分为多个等级,对所有等级的闪存做定量分析,确定每个等级闪存的最大容量的最大行地址,在查找时,将闪存假设为划分的等级中的闪存,按照该等级闪存中每个块内包含的页数为跨度进行查找。这样,查找时可以尽可能多的覆盖到不同的块,提高了查找固件程序存放位置的效率。【附图说明】
[0027] 图1为一个实施例中查找闪存设备中固件程序存放位置的方法的流程图。 【具体实施方式】
[0028] 如图1所示,在一个实施例中,一种查找闪存设备中固件程序存放位置的方法,具体包括以下步骤:
[0029] 步骤S102,将现有闪存依据每个块内包含的页数由少到多划分为多个等级,对所有等级的闪存做定量分析,确定每一等级闪存的最大容量的最大行地址。 [0030] 步骤S104,假设闪存为第一等级闪存,由第一等级闪存的最大容量的最大行地址除以第一等级闪存中每个块内包含的页数确定第一数量,按照预设查找方式以第一等级闪存中每个块内包含的页数为跨度在所述第一数量个块中进行查找。
[0031] 步骤S106,判断是否查找到固件程序存放位置,若是,则结束,否则执行 步骤S108。
[0032] 步骤S108,判断是否还有下一等级闪存,若是,则进入步骤S110,否则结束。判断划分的多个等级中是否还有下一等级闪存,如有,则继续进行查找。
[0033] 步骤S110,假设闪存为下一等级闪存,由所述下一等级闪存的最大容量的最大行地址与上一等级闪存最大容量的最大行地址之差除以所述下一等级闪存中每个块内包含的页数确定第二数量,按照预设查找方式以下一等级闪存中每个块内包含的页数为跨度在所述第二数量个块中进行查找。
[0034] 步骤S112,判断是否查找到固件程序存放位置,若是,则结束,否则返回步骤S108。
[0035] 在步骤S112中,若还没有查找到固件程序存放位置,则返回步骤S108判断是否还有下一等级闪存,如有的话,则进入步骤S110中,以下一等级闪存中每个块内包含的页数为跨度继续进行查找。在每次执行步骤S110时,都会调整第二数量,即第二数量是一个不断变化的参数,在执行步骤S110时由所述下一等级闪存的最大容量的最大行地址与上一等级闪存最大容量的最大行地址之差除以所述下一等级闪存中每个块内包含的页数进行确定。
[0036] 该实施例中,假设将现有闪存依据每个块内包含的页数由少到多划分N个等级,则该查找闪存设备中固件程序存放位置的方法的具体过程如下:
[0037] 步骤1,将现有闪存依据每个块内包含的页数由少到多划分为N个等级;对所有等级的闪存做一个定量分析,确定每种等级闪存的最大容量的最大行地址; [0038] 步骤2,假设闪存为第一等级闪存,由第一等级闪存的最大容量的最大行地址除以第一等级闪存中每个块内包含的页数确定第一数量,按照预设查找方式以第一等级闪存中每个块内包含的页数为跨度在第一数量个块中进行查找;如果查找到固件程序存放位置,则进入步骤N+1;否则,再查找了由第一等级闪存最大容量的最大行地址除以第一等级闪存每个块内包含的页数确定的第一数量个块后,进入下一步骤。
[0039] 步骤3,假设现有闪存为第二等级闪存,由第二等级闪存的最大容量的最大行地址与第一等级闪存最大容量的最大行地址之差除以第二等级闪存中每个块内包含的页数确定第二数量,按照预设查找方式以第二等级闪存中每个块内包 含的页数为跨度在第二数量个块中进行查找;如果查找到固件程序存放位置,则进入步骤N+1;否则,在查找了由第二等级闪存最大容量的最大行地址以及第一等级闪存最大容量的最大行地址之差除以第二等级闪存每个块内包含的页数确定的第二数量个块后,进入下一步骤。 [0040] 步骤N,假设现有闪存为第N等级闪存,由第N等级闪存的最大容量的最大行地址与第N-1等级闪存最大容量的最大行地址之差除以第N等级闪存中每个块内包含的页数确定第N数量,按照预设查找方式以第N等级闪存中每个块内包含的页数为跨度查找;如果查找到固件程序存放位置,则进入步骤N+1;否则,再查找由第N等级闪存最大容量的最大行地址与第N-1等级闪存最大容量的最大行地址之差除以第N等级闪存每个块内包含的页数确定的第N数量个块后,进入下一步骤。
[0041] 步骤N+1,结束查找。
[0042] 下面,以一个具体的实施例来说明本发明。
[0043] 实施例一
[0044] 现有闪存,按照其中块(Block)内包含的页(Page)数目来分类,可以把闪存分为64Page/Block、128Page/Block、192Page/Block、256Page/Block等,其 中,192Page/Block的闪存,其块的首个页地址也是以256Page/Block来跳变的,即前后两个块之间的首个页地址相差256,因此,该闪存也可以认为是256Page/Block的。
[0045] 现有闪存,按照其中的页大小划分,又可以把闪存分为2k/Page、4k/Page、8k/Page,当然后续也会出现16k/Page以及其他更大容量Page的闪存。
[0046] 对于不同类型的闪存,其最大容量的最大行地址如表1所示:
[0047] 表1
[0048]
[0049]
[0050] 其中,0x表示十六进制,为行业内的通用表达方法,在此不再赘述。 [0051] 从表1中可以看出,对于64Page/Block的闪存,其最大容量的最大行地址为0x100000,即在行地址为0~0x100000范围内,可以按照64Page/Block的闪存来查找固件程序存放位置。行地址超过这一范围后,就没有64Page/Block的闪存,只有128Page/Block和256Page/Block的闪存。对于128Page/Block的闪存,其最大容量的最大行地址为
0x800000,则在行地址为0x100000~0x800000范围内,可以按照128Page/Block的闪存来查找固件程序存放位置。同理,在行地址为0x800000~0x1000000范围内,可按照256Page/Block的闪存来查找固件程序存放位置。
[0052] 因此本发明实施例一提供的一种查找闪存设备中固件程序存放位置的方法,具体包括以下步骤:
[0053] 步骤1,将现有闪存依据每个Block内包含的Page数由少到多划分为3等级;对所有等级的闪存做一个定量分析,确定每种等级闪存的最大容量的最大行地址。 [0054] 本发明实施例一中,将64Page/Block的闪存定义为第一等级闪存,其最大容量的最大行地址为0x100000;128Page/Block的闪存定义为第二等级闪存,其最大容量的最大行地址为0x800000;192Page/Block以及256Page/Block的闪存定义为第三等级闪存,其最大容量的最大行地址为0x1000000。
[0055] 步骤2,首先假设现有闪存为第一等级闪存,按照预设查找方式以64Page/Block为跨度查找;如果查找到固件程序存放位置,则进入步骤5;否则,在查找了由第一等级闪存最大容量的最大行地址除以64确定的第一数量个块后,进入步骤3。
[0056] 本发明实施例一中,第一数量个块为16384个块。
[0057] 步骤3,假设现有闪存为第二等级闪存,按照预设查找方式以128Page/Block为跨度查找;如果查找到固件程序存放位置,则进入步骤5;否则,在查找了由第二等级闪存最大容量的最大行地址与第一等级闪存最大容量的最大行地址之差除以128确定的第二数量个块后,进入步骤4。
[0058] 本发明实施例一中,第二数量个块为57344个块
[0059] 步骤4,假设现有闪存为第三等级闪存,按照预设查找方式以256Page/Block为跨度查找;如果查找到固件程序存放位置,则进入步骤5;否则,在查找了由第三等级闪存最大容量的最大行地址与第二等级闪存最大容量的最大行地址之差除以256确定的第三数量个块后,进入步骤5。
[0060] 步骤5,结束查找。
[0061] 随着技术的发展,后续还会出现384Page/Block和512 Page/Block以及其他每Block包含更多Page的闪存,其方法原理相同,在此不再赘述。
[0062] 由于先按照较小的跨度来查找块,再按照较大的跨度来查找块,可以尽可能多地覆盖到不同的块,同时能够提高查找固件程序存放位置的效率。对于每一个跨度,为进一步提高查找效率,不用连续查找每一个块,例如,以64Page/Block的单位划分块后,查找16384个块时,虽然连续查找每一个块可以更准确的找到固件程序存放位置,但这样查找效率将受影响。实际上,没有必要查找这么多个块,可以根据实际需要按照预设查找方式进行查找。
[0063] 在一个实施例中,该预设查找方式为:以预设数量个块为单位,先在第一个所述预设数量个块中查找块号能被2整除的块,然后在第二个所述预设数量个块中查找块号能被3整除的块,接着在第三个所述预设数量个块中查找块号不能被2整除的块,再接着在第四个所述预设数量个块冲查找块号不能被3整除的块,在下四个所述预设数量个块中重复上述步骤。
[0064] 例如,预设数量为100个块,最初的100个块(即块0~块99)中,查找块号能被2整除的块(即块0、块2、块4.....),然后再接下来的100个块(块100~块199)中,查找块号能被3整除的块,再接下来的100个块(块200~块299)中,查找块号不能被2整除的块,依次类推,并在下四个100个块中重复前面四个100个块的查找步骤。这样,虽然会存在一下搜索“盲点”,但相对传统方案,“盲点”降低了很多,并且由于不需要连续查找每个块,能够有效提高查找固件程序存放位置的效率。应当说明的是,上述仅仅是预设查找方式的一个较佳实施例,但并不以此限制预设查找方式,在其他实施例中,预设查找方式还可以做适当变形,例如在最初的100个块中,只查找块号能被4整除的块等。 [0065] 在另一个实施例中,预设查找方式为:以设定数量个块为周期,在每个周期内只查找与块号对应的页号所在的页。由于在好块内,一般可认为各个页都是可以用的。理论上,在上述块内只查找第一个页(即Page0)就可以了。但是目前主流的闪存中,块内并不是所有页都是同样稳定的。某些页相对于其它页来说会更稳定,这些页可称为Strong Page。不同型号的闪存,其Strong Page的地址也有出入。优选的,设定数量为八个,即:以每八个块为周期,在块0中只查找其中的Page0,在块1中只查找其中的Page1,在块2中只查找其中的Page2,依次类推。应当说明的是,上述仅仅是预设查找方式的一个较佳实施例,但并不以此限制预设查找方式,在其他实施例中,预设查找方式还可以做适当变形。此外,由于会按照不同页数目为单位划分块,针对不同的跨度,可以按照不同的预设查找方式查找最大行地址范围内的块。
[0066] 在一个优选的实施例中,在对闪存设备进行量产时,按照上述查找方式将固件程序存放在对应的位置,可以在增大块的覆盖度的同时,避免搜索“盲点”和重复搜索,进一步提高了查找固件程序的效率。
[0067] 以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。