基于Flash的程序分层存储、运行以及升级的方法和装置的制造方法_2

文档序号:9396703阅读:来源:国知局
] 图14为本发明的基于Flash的程序分层运行的装置结构图一;
[0059] 图15为本发明的基于Flash的程序分层运行的装置结构图二;
[0060] 图16为本发明的基于Flash的程序分层升级的装置结构图二。
【具体实施方式】
[0061] 为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具 体实施例进行详细描述。
[0062] 一方面,本发明提供一种基于Flash的程序分层存储的方法,程序由引导程序和 应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,如图 8所示,该方法包括:
[0063] 步骤SlOl :将引导程序写入Flash的已知的好块中;
[0064] 将引导程序写入Flash的已知的好块中,保证引导程序可靠存储以及后续的可靠 运行;
[0065] 步骤S102 :将应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块 列表,写入与该坏块映射的好块中,坏块列表中存储有坏块和好块的映射关系。
[0066] 以Nand Flash为例,Nand Flash属于一种闪存类型的存储设备,闪存是可通过电 擦写和重编程的非挥发性计算机存储器。
[0067] Nand Flash的基本存储单元是页(page),每一页的有效数据存储容量是512字节 的倍数,还要加上一个校验信息区,多个页组成一个块(block)。
[0068] Nand Flash分为小页和大页两种。小页Nand Flash的每一页的存储容量为:512 字节有效数据存储区+16字节校验信息区,32个这样的页组成一个块(16KB);而大页Nand Flash的每一页的存储容量为:2048字节有效数据存储区+64字节校验信息区,64个这样 的页组成一个块(128KB);如图4为Nand Flash-个页的结构示意图,其中左侧为有效数 据存储区,右侧为校验信息区。
[0069] Nand Flash的每个块由若干个页组成,而每个块的最开头的两个页最为重要,因 为其中含有坏块标记;当这两个页的校验信息区的第一个字节都是OxFF的时候,表明这个 块是个好块;当有任何一个不是OxFF的时候,则表明这个块是坏块。
[0070] 本发明需要使用到坏块列表,该坏块列表可以是预先建立完毕并存储在Flash中 的,也可以是在程序存储时建立的,坏块列表中存储有坏块和好块的映射关系。
[0071] 本发明的基于Flash的程序分层存储的方法中,将程序拆分为引导程序和应用程 序,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能;在存储时,首先 将引导程序写入Flash的已知的好块中;然后将应用程序写入Flash中,此时,需要用到坏 块列表,坏块列表中存储有坏块和好块的映射关系,在存储应用程序时,从某一块开始顺序 存储,若遇到坏块,则通过坏块列表映射到好块,将数据存储到好块中。
[0072] 本发明的基于Flash的程序分层存储的方法对程序进行分层存储,保证了在 Flash中程序存储的可靠性。首先,将引导程序写入Flash的已知的好块中,保证了引导程 序被可靠的存储到了 Flash中;然后再将应用程序写入到Flash中,由于坏块列表的映射关 系,保证了写入到Flash中的应用程序可靠性。
[0073] 而且,在存储时,分配用来存储程序的区域内的坏块均已通过坏块列表映射到了 好块,实际上可以看作该区域内每个块均为好块,即该区域的存储空间是连续可靠的,只要 分配用来存储程序的区域大于程序的大小,则写入的程序是可靠的,可靠性高。
[0074] 最后,在对程序进行维护时,只需要维护应用程序即可,可以不对引导程序进行操 作,这样即使维护应用程序时出现了问题,那么引导程序不会遭到破坏,可以通过引导程序 找出问题原因,并且可以方便的将应用程序通过上面的方法重新写入,便于维护。
[0075] 故本发明的基于Flash的程序分层存储方法可靠性高,便于维护。
[0076] 作为本发明的基于Flash的程序分层管理存储的方法的一种改进,Flash可以分 为基本空间、预留空间以及其他空间,基本空间从Flash的第0块开始,坏块列表可以存储 在其他空间中;
[0077] 将引导程序写入Flash的已知的好块中(步骤S101)进一步为:将引导程序写入 Flash的第0块;
[0078] 将应用程序写入Flash中(步骤S102)进一步为:从Flash的第1块开始顺序写 入应用程序。
[0079] 可以将Flash分为基本空间、预留空间以及其他空间,如图5所示,第0块至第η 块为基本空间,第m0块至第mm块为预留空间,其他为其他空间;其中,其他空间是可有可无 的;在建立坏块列表时,可以将基本空间中的坏块映射到预留空间的好块中,这样可以把基 本空间看是作连续可靠的。
[0080] 坏块列表可以包括坏块列表是否建立标记,坏块总数以及坏块表数组。
[0081] 假设Flash中所含的总块数为BA,
[0082] 本发明的坏块列表可以如下所示
[0083] Struct bad_table{
[0084] Unsigned int flagtable ; /* 坏块列表是否建立标记 */
[0085] Unsigned int badblocknum ; /* 坏块总数 */
[0086] Unsigned char badblock_table [BA] ; /* 坏块表数组 */
[0087] };
[0088] flagtable = 1表示坏块列表被建立;flagtable = 0表示坏块列表未被建立;坏 块表数组badblock_table [BA]的每一个兀素对应Flash的一个块,如badblock_table [0] 对应第0块,badblock_table [1]对应第1块。每一个元素含有32个bit :
[0089] bit31 = 0 表示好块,
[0090] = 1表示坏块;
[0091] bit30 = 0表示该块未被映射,
[0092] = 1表示该块已将被映射;
[0093] bit29至bitO:表示与该块映射的块;
[0094] 如图5所示,坏块列表如下(其中X表示任意值,并且图5中的其他空间可有可无, 并不影响本发明的内容):
[0096] 通过这个坏块列表,程序所能看到的就是Flash中的0至η块的存储空间是连续 的可靠的存储空间,如图6所示。
[0097] 坏块列表可以存储在其他空间中(当然也可以存储在其他地方,根据实际应用确 定),优选的,在其他空间中选取3个好块,每个好块中存储一副坏块列表。由于Flash在 应用的时候会出现新的坏块,这个时候就需要更新坏块列表,需要对新的坏块进行映射, 映射到一个好块,这就需要更新badblock_table[BA]中相应的内容,同时更新坏块总数 badblocknum,并用新坏块列表更新Flash中存储的原来的坏块列表。在对Flash的操作中, 坏块列表的地位非常重要,为了防止在用新坏块列表更新Flash中存储的旧的坏块列表的 时候出现错误,可以在其他空间中选取3个(也可以是其他的数量)好块中存储三副坏块 列表。即使在更新Flash中存储的坏块列表的时候出现错误,也能保证至少有一副坏块列 表是可用的。
[0098] 设备或系统上电的时候,在对Flash进行其他操作之前,先将3副坏块列表读出, 然后比较3幅坏块列表中哪个中记录的坏块总数badblocknum最大,然后就使用该坏块列 表,如果其他坏块列表中记录的坏块总数小于该坏块列表的话,就用该坏块列表更新其他 坏块列表。如此就保证了坏块列表存储和使用的安全性。
[0099] 将Flash分为基本空间、预留空间以及其他空间,并且将基本空间中的坏块映射 到预留空间的好块中,这样既能方便的管理Flash,又能使坏块列表的映射更加清楚。
[0100] 由于Flash现有工艺的问题,不能保证Flash的存储器阵列(Memory Array)在 其生命周期中保持性能的可靠,因此在Flash芯片出厂的时候,厂家只能保证第0块不是 坏块,对于其它块,则均有可能存在坏块,而且Flash芯片在使用的过程中也很容易产生坏 块。因此,可以使基本空间从Flash的第0块开始,并将引导程序写入Flash的第0 ±夬,保 证了引导程序的可靠存储及运行。
[0101] 相应的,可以从Flash的第1块开始顺序写入应用程序,使引导程序和应用程序紧 挨着存储,如图7所示,从左到右依次为引导程序、应用程序、备份程序以及其他。这样,在 后续运行程序时,从Flash中读取完毕引导程序并运行后,可以直接顺序读取应用程序,而 无需指针以及地址跳转等步骤,能够使程序在读取和运行时更加方便。当然,也可以不从第 1块开始顺序写入应用程序,使引导程序和应用程序间隔存储,只需在引导程序中存储有应 用程序的起始地址即可。
[0102] 故本发明的基于Flash的程序分层存储的方法保证了坏块列表存储和使用的安 全性;方便管理Flash,使坏块列表的映射更加清楚;使程序在后续读取和运行时更加方 便。
[0103] 进一步的,如图9所示,本发明的基于Flash的程序分层存储的方法还包括:
[0104] 步骤S103 :再次将应用程序写入Flash中,作为备份程序。
[0105] 本发明还可以把程序进一步拆分为引导程序、应用程序以及备份程序三个部分, 如图7所示,甚至其它更多部分,备份程序是应用程序的备份,备份程序可以是紧挨着应用 程序之后存储,也可以是与应用程序间隔存储。
[0106] 在后续的程序运行时,若Flash中出现了新的坏块,导致应用程序无法启动,则弓丨 导程序会根据预先存储的备份程序的起始地址读取备份程序并运行,进一步保证了程序的 可靠性。
[0107] 另一方面,本发明提供一种基于Flash的程序分层运行的方法,程序由引导程序 和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,弓丨 导程序和应用程序都存储在Flash中,如图10所示,方法包括:
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1