CN105117237A - 基于Flash的程序分层存储、运行以及升级的方法和装置 - Google Patents
基于Flash的程序分层存储、运行以及升级的方法和装置 Download PDFInfo
- Publication number
- CN105117237A CN105117237A CN201510423542.4A CN201510423542A CN105117237A CN 105117237 A CN105117237 A CN 105117237A CN 201510423542 A CN201510423542 A CN 201510423542A CN 105117237 A CN105117237 A CN 105117237A
- Authority
- CN
- China
- Prior art keywords
- program
- flash
- bad block
- application program
- block
- 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
Links
Abstract
本发明公开了一种基于Flash的程序分层存储、运行以及升级的方法和装置,属于嵌入式系统领域,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述方法包括:将所述引导程序写入Flash的已知的好块中;将所述应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,所述坏块列表中存储有坏块和好块的映射关系。与现有技术相比,本发明可靠性高,便于维护。
Description
技术领域
本发明涉及嵌入式系统领域,特别是指一种基于Flash的程序分层存储、运行以及升级的方法和装置。
背景技术
对于现有的嵌入式系统,由于其程序都比较大,少则几十兆,多则几百兆,其已经远远超过了CPU内部的存储空间,所以无论是程序的存储和运行都无法在CPU内部的ROM和RAM中完成。
现有技术是将程序存储到CPU外部的Flash(闪存)中,运行时将程序读到CPU外部的RAM中。Flash主要有NorFlash和NandFlash两种,而NorFlash由于价格比较昂贵,考虑到产品的成本,所以被很少使用,在绝大部分的应用中都使用NandFlash存储程序。NandFlash由于其存储空间大、价格低廉等优势被广泛的应用在各种嵌入式系统中,以NandFlash为例,其框图如图1所示,其中CPU内部的ROM和RAM未示出。
对于程序的存储,现有技术是将程序作为一个整体,存储到NandFlash中,如图2所示,左边的阴影部分表示程序的存储区域。一般将NandFlash的从第0块开始的一块区域分配用来存储这个程序,这个区域的大小一般是程序大小的2至3倍;程序在被写入到NandFlash中的时候,从第0块开始顺序写入,如果检测到坏块的话,就跳过坏块,找到下一个好块接着写入,直至程序写入完成,如图3所示,其中第1、5、6块为坏块。
当程序被存储在NandFlash中后,系统上电后,CPU内部ROM中固化的启动程序,会将NandFlash前几K或十几K的代码拷贝到CPU内部的RAM中执行,通过这几K或十几K的代码将NandFlash中完整的代码拷贝到CPU外部的RAM中执行。
对于这种程序的存储方法,存在以下问题:
第一、可靠性差:由于现有NandFlash制作工艺的问题,NandFlash在出厂的时候,就伴随有一定的坏块,并且在使用过程中也会出现新的坏块,如果分配用来存储程序的区域内的好块的总存储大小小于程序的大小的时候,那写入的程序就是有问题的,从而不能正常启动。
第二、程序难于维护:当程序被存储到NandFlash中后,需要对程序进行维护(如修复、升级、打补丁等),由于程序是作为一个整体存在,NandFlash的特性决定了在向其写入数据的时候必须先要对其进行擦除操作,所以一旦旧程序被擦除,而新程序又写入失败的话,那整个程序也就遭到了破坏,无法再启动。
发明内容
本发明提供一种可靠性高,便于维护的基于Flash的程序分层存储、运行以及升级的方法和装置。
为解决上述技术问题,本发明提供技术方案如下:
一种基于Flash的程序分层存储的方法,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述方法包括:
将所述引导程序写入Flash的已知的好块中;
将所述应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,所述坏块列表中存储有坏块和好块的映射关系。
一种基于Flash的程序分层运行的方法,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述方法包括:
从Flash中已知的好块中读出所述引导程序至RAM;
运行所述引导程序,初始化程序的运行环境;
从Flash中读出预先存储的应用程序至RAM;其中,若遇到坏块,则根据预先存储的坏块列表,读出与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
运行所述应用程序,实现程序的功能。
一种基于Flash的程序分层升级的方法,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述方法包括:
从Flash已知的好块中读出所述引导程序至RAM;
运行所述引导程序,初始化程序的运行环境;
接收升级后的应用程序至RAM;
从Flash中擦除原有的应用程序;其中,若遇到坏块,则根据预先存储的坏块列表,擦除与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
将升级后的应用程序从RAM写入Flash;其中,若遇到坏块,则根据预先存储的坏块列表,写入与该坏块映射的好块中。
一种基于Flash的程序分层存储的装置,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述装置包括:
第一写入模块,用于将所述引导程序写入Flash的已知的好块中;
第二写入模块,用于将所述应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,所述坏块列表中存储有坏块和好块的映射关系。
一种基于Flash的程序分层运行的装置,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述装置包括:
第一读取模块,用于从Flash中已知的好块中读出所述引导程序至RAM;
第一运行模块,用于运行所述引导程序,初始化程序的运行环境;
第二读取模块,用于从Flash中读出预先存储的应用程序至RAM;其中,若遇到坏块,则根据预先存储的坏块列表,读出与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
第二运行模块,用于运行所述应用程序,实现程序的功能。
一种基于Flash的程序分层升级的装置,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述装置包括:
第三读取模块,用于从Flash已知的好块中读出所述引导程序至RAM;
第三运行模块,用于运行所述引导程序,初始化程序的运行环境;
第一接收模块,用于接收升级后的应用程序至RAM;
第一擦除模块,从Flash中擦除原有的应用程序;其中,若遇到坏块,则根据预先存储的坏块列表,擦除与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
第四写入模块,用于将升级后的应用程序从RAM写入Flash;其中,若遇到坏块,则根据预先存储的坏块列表,写入与该坏块映射的好块中。
本发明具有以下有益效果:
本发明的基于Flash的程序分层存储的方法中,将程序拆分为引导程序和应用程序,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能;在存储时,首先将引导程序写入Flash的已知的好块中;然后将应用程序写入Flash中,此时,需要用到坏块列表,坏块列表中存储有坏块和好块的映射关系,在存储应用程序时,从某一块开始顺序存储,若遇到坏块,则通过坏块列表映射到好块,将数据存储到好块中。
本发明的基于Flash的程序分层存储的方法对程序进行分层存储,保证了在Flash中程序存储的可靠性。首先,将引导程序写入Flash的已知的好块中,保证了引导程序被可靠的存储到了Flash中;然后再将应用程序写入到Flash中,由于坏块列表的映射关系,保证了写入到Flash中的应用程序可靠性。
而且,在存储时,分配用来存储程序的区域内的坏块均已通过坏块列表映射到了好块,实际上可以看作该区域内每个块均为好块,即该区域的存储空间是连续可靠的,只要分配用来存储程序的区域大于程序的大小,则写入的程序是可靠的,可靠性高。
最后,在对程序进行维护时,只需要维护应用程序即可,可以不对引导程序进行操作,这样即使维护应用程序时出现了问题,那么引导程序不会遭到破坏,可以通过引导程序找出问题原因,并且可以方便的将应用程序通过上面的方法重新写入,便于维护。
故本发明的基于Flash的程序分层存储方法可靠性高,便于维护。
附图说明
图1为嵌入式系统的结构示意图;
图2为现有的技术中程序存储的示意图一;
图3为现有的技术中程序存储的示意图二;
图4为NandFlash的一个页的结构示意图;
图5为本发明的基于Flash的程序分层存储的方法对Flash进行操作的示意图;
图6为本发明的基于Flash的程序分层存储的方法中映射后的效果图;
图7为本发明的基于Flash的程序分层存储的方法中的程序存储位置示意图;
图8为本发明的基于Flash的程序分层存储的方法流程图一;
图9为本发明的基于Flash的程序分层存储的方法流程图二;
图10为本发明的基于Flash的程序分层运行的方法流程图;
图11为本发明的基于Flash的程序分层升级的方法流程图;
图12为本发明的基于Flash的程序分层存储的装置结构图;
图13为本发明的基于Flash的程序分层存储的装置结构图二;
图14为本发明的基于Flash的程序分层运行的装置结构图一;
图15为本发明的基于Flash的程序分层运行的装置结构图二;
图16为本发明的基于Flash的程序分层升级的装置结构图二。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
一方面,本发明提供一种基于Flash的程序分层存储的方法,程序由引导程序和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,如图8所示,该方法包括:
步骤S101:将引导程序写入Flash的已知的好块中;
将引导程序写入Flash的已知的好块中,保证引导程序可靠存储以及后续的可靠运行;
步骤S102:将应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,坏块列表中存储有坏块和好块的映射关系。
以NandFlash为例,NandFlash属于一种闪存类型的存储设备,闪存是可通过电擦写和重编程的非挥发性计算机存储器。
NandFlash的基本存储单元是页(page),每一页的有效数据存储容量是512字节的倍数,还要加上一个校验信息区,多个页组成一个块(block)。
NandFlash分为小页和大页两种。小页NandFlash的每一页的存储容量为:512字节有效数据存储区+16字节校验信息区,32个这样的页组成一个块(16KB);而大页NandFlash的每一页的存储容量为:2048字节有效数据存储区+64字节校验信息区,64个这样的页组成一个块(128KB);如图4为NandFlash一个页的结构示意图,其中左侧为有效数据存储区,右侧为校验信息区。
NandFlash的每个块由若干个页组成,而每个块的最开头的两个页最为重要,因为其中含有坏块标记;当这两个页的校验信息区的第一个字节都是0xFF的时候,表明这个块是个好块;当有任何一个不是0xFF的时候,则表明这个块是坏块。
本发明需要使用到坏块列表,该坏块列表可以是预先建立完毕并存储在Flash中的,也可以是在程序存储时建立的,坏块列表中存储有坏块和好块的映射关系。
本发明的基于Flash的程序分层存储的方法中,将程序拆分为引导程序和应用程序,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能;在存储时,首先将引导程序写入Flash的已知的好块中;然后将应用程序写入Flash中,此时,需要用到坏块列表,坏块列表中存储有坏块和好块的映射关系,在存储应用程序时,从某一块开始顺序存储,若遇到坏块,则通过坏块列表映射到好块,将数据存储到好块中。
本发明的基于Flash的程序分层存储的方法对程序进行分层存储,保证了在Flash中程序存储的可靠性。首先,将引导程序写入Flash的已知的好块中,保证了引导程序被可靠的存储到了Flash中;然后再将应用程序写入到Flash中,由于坏块列表的映射关系,保证了写入到Flash中的应用程序可靠性。
而且,在存储时,分配用来存储程序的区域内的坏块均已通过坏块列表映射到了好块,实际上可以看作该区域内每个块均为好块,即该区域的存储空间是连续可靠的,只要分配用来存储程序的区域大于程序的大小,则写入的程序是可靠的,可靠性高。
最后,在对程序进行维护时,只需要维护应用程序即可,可以不对引导程序进行操作,这样即使维护应用程序时出现了问题,那么引导程序不会遭到破坏,可以通过引导程序找出问题原因,并且可以方便的将应用程序通过上面的方法重新写入,便于维护。
故本发明的基于Flash的程序分层存储方法可靠性高,便于维护。
作为本发明的基于Flash的程序分层管理存储的方法的一种改进,Flash可以分为基本空间、预留空间以及其他空间,基本空间从Flash的第0块开始,坏块列表可以存储在其他空间中;
将引导程序写入Flash的已知的好块中(步骤S101)进一步为:将引导程序写入Flash的第0块;
将应用程序写入Flash中(步骤S102)进一步为:从Flash的第1块开始顺序写入应用程序。
可以将Flash分为基本空间、预留空间以及其他空间,如图5所示,第0块至第n块为基本空间,第m0块至第mm块为预留空间,其他为其他空间;其中,其他空间是可有可无的;在建立坏块列表时,可以将基本空间中的坏块映射到预留空间的好块中,这样可以把基本空间看是作连续可靠的。
坏块列表可以包括坏块列表是否建立标记,坏块总数以及坏块表数组。
假设Flash中所含的总块数为BA,
本发明的坏块列表可以如下所示
Structbad_table{
Unsignedintflagtable;/*坏块列表是否建立标记*/
Unsignedintbadblocknum;/*坏块总数*/
Unsignedcharbadblock_table[BA];/*坏块表数组*/
};
flagtable=1表示坏块列表被建立;flagtable=0表示坏块列表未被建立;坏块表数组badblock_table[BA]的每一个元素对应Flash的一个块,如badblock_table[0]对应第0块,badblock_table[1]对应第1块。每一个元素含有32个bit:
bit31=0表示好块,
=1表示坏块;
bit30=0表示该块未被映射,
=1表示该块已将被映射;
bit29至bit0:表示与该块映射的块;
如图5所示,坏块列表如下(其中x表示任意值,并且图5中的其他空间可有可无,并不影响本发明的内容):
通过这个坏块列表,程序所能看到的就是Flash中的0至n块的存储空间是连续的可靠的存储空间,如图6所示。
坏块列表可以存储在其他空间中(当然也可以存储在其他地方,根据实际应用确定),优选的,在其他空间中选取3个好块,每个好块中存储一副坏块列表。由于Flash在应用的时候会出现新的坏块,这个时候就需要更新坏块列表,需要对新的坏块进行映射,映射到一个好块,这就需要更新badblock_table[BA]中相应的内容,同时更新坏块总数badblocknum,并用新坏块列表更新Flash中存储的原来的坏块列表。在对Flash的操作中,坏块列表的地位非常重要,为了防止在用新坏块列表更新Flash中存储的旧的坏块列表的时候出现错误,可以在其他空间中选取3个(也可以是其他的数量)好块中存储三副坏块列表。即使在更新Flash中存储的坏块列表的时候出现错误,也能保证至少有一副坏块列表是可用的。
设备或系统上电的时候,在对Flash进行其他操作之前,先将3副坏块列表读出,然后比较3幅坏块列表中哪个中记录的坏块总数badblocknum最大,然后就使用该坏块列表,如果其他坏块列表中记录的坏块总数小于该坏块列表的话,就用该坏块列表更新其他坏块列表。如此就保证了坏块列表存储和使用的安全性。
将Flash分为基本空间、预留空间以及其他空间,并且将基本空间中的坏块映射到预留空间的好块中,这样既能方便的管理Flash,又能使坏块列表的映射更加清楚。
由于Flash现有工艺的问题,不能保证Flash的存储器阵列(MemoryArray)在其生命周期中保持性能的可靠,因此在Flash芯片出厂的时候,厂家只能保证第0块不是坏块,对于其它块,则均有可能存在坏块,而且Flash芯片在使用的过程中也很容易产生坏块。因此,可以使基本空间从Flash的第0块开始,并将引导程序写入Flash的第0块,保证了引导程序的可靠存储及运行。
相应的,可以从Flash的第1块开始顺序写入应用程序,使引导程序和应用程序紧挨着存储,如图7所示,从左到右依次为引导程序、应用程序、备份程序以及其他。这样,在后续运行程序时,从Flash中读取完毕引导程序并运行后,可以直接顺序读取应用程序,而无需指针以及地址跳转等步骤,能够使程序在读取和运行时更加方便。当然,也可以不从第1块开始顺序写入应用程序,使引导程序和应用程序间隔存储,只需在引导程序中存储有应用程序的起始地址即可。
故本发明的基于Flash的程序分层存储的方法保证了坏块列表存储和使用的安全性;方便管理Flash,使坏块列表的映射更加清楚;使程序在后续读取和运行时更加方便。
进一步的,如图9所示,本发明的基于Flash的程序分层存储的方法还包括:
步骤S103:再次将应用程序写入Flash中,作为备份程序。
本发明还可以把程序进一步拆分为引导程序、应用程序以及备份程序三个部分,如图7所示,甚至其它更多部分,备份程序是应用程序的备份,备份程序可以是紧挨着应用程序之后存储,也可以是与应用程序间隔存储。
在后续的程序运行时,若Flash中出现了新的坏块,导致应用程序无法启动,则引导程序会根据预先存储的备份程序的起始地址读取备份程序并运行,进一步保证了程序的可靠性。
另一方面,本发明提供一种基于Flash的程序分层运行的方法,程序由引导程序和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,引导程序和应用程序都存储在Flash中,如图10所示,方法包括:
步骤S201:从Flash中已知的好块中读出引导程序至RAM;
步骤S202:运行引导程序,初始化程序的运行环境;
步骤S203:从Flash中读出预先存储的应用程序至RAM;其中,若遇到坏块,则根据预先存储的坏块列表,读出与该坏块映射的好块中的数据,坏块列表中存储有坏块和好块的映射关系;
步骤S204:运行应用程序,实现程序的功能。
本发明的基于Flash的程序分层运行的方法中,预先将程序拆分为引导程序和应用程序,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,并将它们存储在Flash中(具体存储过程如上述);在运行时,首先将引导程序从Flash中已知的好块中读出至RAM;然后运行引导程序,初始化程序的运行环境(包括初始化串口、USB、定时器以及其他相关的硬件,并且设置使能中断以及USB中断等);再将应用程序从Flash中读出至RAM,此时,需要用到坏块列表,坏块列表中存储有坏块和好块的映射关系,在读取应用程序时,从某一块开始顺序读取,若遇到坏块,则通过坏块列表映射到好块,读取存储在好块中的数据;最后,运行应用程序,实现程序的功能。
本发明的基于Flash的程序分层运行的方法对程序进行分层运行,保证了在Flash中程序运行的可靠性。首先将引导程序从Flash中已知的好块中读出至RAM,保证了引导程序被可靠的读取到了Flash中;然后再通过引导程序将应用程序从Flash中读出至RAM,由于坏块列表的映射关系,保证了读取到RAM中的应用程序可靠性。
并且,现有技术中,当程序作为一个整体存储在Flash中的时候,在运行时,系统上电后,CPU内部ROM中固化的启动程序,会将Flash前几K或十几K的代码拷贝到CPU内部的RAM中执行,通过这几K或十几K的代码将Flash中完整的代码拷贝到外部RAM中执行。然而,前几K或几十K的程序每次启动都要扫面该区域内的块,从好块中读出程序数据,极大的延缓了程序的启动速度。本发明的基于Flash的程序分层运行方法在读取应用程序时,不需要对Flash进行扫描,程序启动速度快。
故本发明的基于Flash的程序分层运行方法可靠性高,启动速度快。
作为本发明的基于Flash的程序分层运行方法的一种改进,可以在Flash中预先存储有与应用程序相同的备份程序,从Flash中读出预先存储的应用程序至RAM(步骤S203)包括:
步骤S2031:从Flash中读出应用程序的程序头至RAM,程序头中包括程序校验值;
步骤S2032:根据程序头,从Flash中读出应用程序至RAM,计算程序校验值;
步骤S2033:将计算得到的程序校验值与程序头中的程序校验值比较,若两者不一致,则从Flash中读出备份程序至RAM。
本发明的基于Flash的程序分层运行方法在应用程序和备份程序的前面建立了一个程序头,程序头包括;
程序头标记,用于指示程序头的后面有程序;
程序的大小,用于指示后面程序的大小,以字节为单位;
程序的一些描述信息,用于指示该部分程序的一些信息,如该程序是应用程序,还是备份程序等等;
程序校验值,保存的是后面程序的校验值,校验方式可以根据需要确定,如异或校验、奇偶校验、CRC校验等等。
程序头的一个实施例可以表示为:
Structpro_head{
Unsignedcharsrc_exist[4];/*程序头标记*/
Unsignedintsrc_size;/*程序的大小,占4个字节*/
Unsignedcharinfo[16];/*程序的一些描述信息,占16个字节*/
Unsignedintcheck_val;/*程序校验值*/
Unsignedcharreserve[16];/*其它备用*/
}。
若Flash中出现了新的坏块,导致应用程序无法启动,则引导程序会根据预先存储的备份程序的起始地址读取备份程序并运行,若应用程序以及备份程序均被破坏而无法运行时,可以进行报警并进入后续的升级流程;进一步保证了程序运行的可靠性。
再一方面,本发明提供一种基于Flash的程序分层升级的方法,程序由引导程序和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,引导程序和应用程序都存储在Flash中,如图11所示,该方法包括:
步骤S301:从Flash已知的好块中读出引导程序至RAM;
步骤S302:运行引导程序,初始化程序的运行环境;
步骤S303:接收升级后的应用程序至RAM;
步骤S304:从Flash中擦除原有的应用程序;其中,若遇到坏块,则根据预先存储的坏块列表,擦除与该坏块映射的好块中的数据,坏块列表中存储有坏块和好块的映射关系;
步骤S305:将升级后的应用程序从RAM写入Flash;其中,若遇到坏块,则根据预先存储的坏块列表,写入与该坏块映射的好块中。
本发明的基于Flash的程序分层升级的方法中,预先将程序拆分为引导程序和应用程序,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,并将它们存储在Flash中(具体存储过程如上述);在升级时,可以只运行引导程序,首先将引导程序从Flash中已知的好块中读出至RAM;然后运行引导程序,初始化程序的运行环境(包括初始化串口、USB、定时器以及其他相关的硬件,并且设置使能中断以及USB中断等);再通过USB或者串口以及其他端口接收上位机发送的升级后的应用程序至RAM;再从Flash中擦除原有的应用程序,此时,需要用到坏块列表,坏块列表中存储有坏块和好块的映射关系,在擦除应用程序时,从某一块开始顺序擦除,若遇到坏块,则通过坏块列表映射到好块,擦除存储在好块中的数据;最后,将升级后的应用程序从RAM写入Flash,此时也需要用到坏块列表,在写入应用程序时,从某一块开始顺序写入,若遇到坏块,则通过坏块列表映射到好块,写入数据至好块中。
另外,本发明的基于Flash的程序分层升级的方法可以通过多种端口进行升级,以USB和串口为例:
首先启动定时器,设定定时时间(如400ms);然后通过串口以特定的波特率(如9600bps)发送升级请求;若在定时时间内串口收到回应信息,则通过串口进行升级,若在定时时间USB接口收到升级指令,则通过USB接口进行升级,若在定时时间未收到任何回应,则重新设定定时时间并发送升级请求。串口升级以及USB升级的流程与现有技术相同。
本发明的基于Flash的程序分层升级的方法对程序进行分层升级,保证了在Flash中程序升级的可靠性。现有技术中将程序作为一个整体写入Flash,一但程序升级失败,那整个程序就会遭到破坏,而导致整个程序将无法再升级以及运行;本发明的基于Flash的程序分层升级的方法在对应用程序和/或备份程序升级时,即使升级失败,由于引导程序并没有改变,那还可以进行反复的升级。
上述的基于Flash的程序分层存储、运行以及升级的方法中,Flash优选为NandFlash。
与上述基于Flash的程序分层存储的方法对应的,本发明还提供一种基于Flash的程序分层存储的装置,程序由引导程序和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,如图12所示,该装置包括:
第一写入模块11,用于将引导程序写入Flash的已知的好块中;
第二写入模块12,用于将应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,坏块列表中存储有坏块和好块的映射关系。
与上述基于Flash的程序分层存储的方法对应的,本发明的基于Flash的程序分层存储的装置可靠性高,便于维护。
作为本发明的基于Flash的程序分层存储的装置的一种改进,Flash可以分为基本空间、预留空间以及其他空间,基本空间可以从Flash的第0块开始,坏块列表可以存储在其他空间中;
第一写入模块11进一步用于将引导程序写入Flash的第0块;
第二写入模块12进一步用于从Flash的第1块开始顺序写入应用程序。
与上述基于Flash的程序分层存储的方法对应的,本发明的基于Flash的程序分层存储的装置保证了坏块列表存储和使用的安全性;方便管理Flash,使坏块列表的映射更加清楚;使程序在后续读取和运行时更加方便。
进一步的,如图13所示,本发明的基于Flash的程序分层存储的装置还包括:
第三写入模块13,用于再次将应用程序写入Flash中,作为备份程序。
与上述基于Flash的程序分层存储的方法对应的,本发明的基于Flash的程序分层存储的装置进一步保证了程序的可靠性。
与上述基于Flash的程序分层运行的方法对应的,本发明还提供一种基于Flash的程序分层运行的装置,程序由引导程序和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,引导程序和应用程序都存储在Flash中,如图14所示,该装置包括:
第一读取模块21,用于从Flash中已知的好块中读出引导程序至RAM;
第一运行模块22,用于运行引导程序,初始化程序的运行环境;
第二读取模块23,用于从Flash中读出预先存储的应用程序至RAM;其中,若遇到坏块,则根据预先存储的坏块列表,读出与该坏块映射的好块中的数据,坏块列表中存储有坏块和好块的映射关系;
第二运行模块24,用于运行应用程序,实现程序的功能。
与上述基于Flash的程序分层运行的方法对应的,本发明的基于Flash的程序分层运行的装置可靠性高,启动速度快。
作为本发明的基于Flash的程序分层运行的装置的一种改进,Flash中预先存储有与应用程序相同的备份程序,如图15所示,第二读取模块23包括:
第一读取单元231,用于从Flash中读出应用程序的程序头至RAM,程序头中包括程序校验值;
第一计算单元232,用于根据程序头,从Flash中读出应用程序至RAM,计算程序校验值;
第一比较单元233,用于将计算得到的程序校验值与程序头中的程序校验值比较,若两者不一致,则从Flash中读出备份程序至RAM。
与上述基于Flash的程序分层运行的方法对应的,本发明的基于Flash的程序分层运行的装置进一步保证了程序运行的可靠性。
与上述基于Flash的程序分层升级的方法对应的,本发明还提供一种基于Flash的程序分层升级的装置,程序由引导程序和应用程序组成,引导程序用于初始化程序的运行环境,应用程序用于实现程序的功能,引导程序和应用程序都存储在Flash中,如图16所示,该装置包括:
第三读取模块31,用于从Flash已知的好块中读出引导程序至RAM;
第三运行模块32,用于运行引导程序,初始化程序的运行环境;
第一接收模块33,用于接收升级后的应用程序至RAM;
第一擦除模块34,从Flash中擦除原有的应用程序;其中,若遇到坏块,则根据预先存储的坏块列表,擦除与该坏块映射的好块中的数据,坏块列表中存储有坏块和好块的映射关系;
第四写入模块35,用于将升级后的应用程序从RAM写入Flash;其中,若遇到坏块,则根据预先存储的坏块列表,写入与该坏块映射的好块中。
与上述基于Flash的程序分层升级的方法对应的,本发明的基于Flash的程序分层升级的装置保证了在Flash中程序升级的可靠性。
上述的基于Flash的程序分层存储、运行以及升级的装置中Flash优选为NandFlash。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (14)
1.一种基于Flash的程序分层存储的方法,其特征在于,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述方法包括:
将所述引导程序写入Flash的已知的好块中;
将所述应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,所述坏块列表中存储有坏块和好块的映射关系。
2.根据权利要求1所述的基于Flash的程序分层存储的方法,其特征在于,所述Flash分为基本空间、预留空间以及其他空间,所述基本空间从所述Flash的第0块开始,所述坏块列表存储在所述其他空间中;
所述将所述引导程序写入Flash的已知的好块中进一步为:将所述引导程序写入Flash的第0块;
所述将所述应用程序写入Flash中进一步为:从Flash的第1块开始顺序写入所述应用程序。
3.根据权利要求2所述的基于Flash的程序分层存储的方法,其特征在于,还包括:
再次将所述应用程序写入Flash中,作为备份程序。
4.一种基于Flash的程序分层运行的方法,其特征在于,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述方法包括:
从Flash中已知的好块中读出所述引导程序至RAM;
运行所述引导程序,初始化程序的运行环境;
从Flash中读出预先存储的应用程序至RAM;其中,若遇到坏块,则根据预先存储的坏块列表,读出与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
运行所述应用程序,实现程序的功能。
5.根据权利要求4所述的基于Flash的程序分层运行的方法,其特征在于,所述Flash中预先存储有与所述应用程序相同的备份程序,所述从Flash中读出预先存储的应用程序至RAM包括:
从Flash中读出所述应用程序的程序头至RAM,所述程序头中包括程序校验值;
根据所述程序头,从Flash中读出所述应用程序至RAM,计算程序校验值;
将计算得到的程序校验值与所述程序头中的程序校验值比较,若两者不一致,则从Flash中读出所述备份程序至RAM。
6.一种基于Flash的程序分层升级的方法,其特征在于,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述方法包括:
从Flash已知的好块中读出所述引导程序至RAM;
运行所述引导程序,初始化程序的运行环境;
接收升级后的应用程序至RAM;
从Flash中擦除原有的应用程序;其中,若遇到坏块,则根据预先存储的坏块列表,擦除与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
将升级后的应用程序从RAM写入Flash;其中,若遇到坏块,则根据预先存储的坏块列表,写入与该坏块映射的好块中。
7.根据权利要求1-6任一权利要求所述的方法,其特征在于,所述Flash为NandFlash。
8.一种基于Flash的程序分层存储的装置,其特征在于,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述装置包括:
第一写入模块,用于将所述引导程序写入Flash的已知的好块中;
第二写入模块,用于将所述应用程序写入Flash中;其中,若遇到坏块,则根据预先建立的坏块列表,写入与该坏块映射的好块中,所述坏块列表中存储有坏块和好块的映射关系。
9.根据权利要求8所述的基于Flash的程序分层存储的装置,其特征在于,所述Flash分为基本空间、预留空间以及其他空间,所述基本空间从所述Flash的第0块开始,所述坏块列表存储在所述其他空间中;
所述第一写入模块进一步用于将所述引导程序写入Flash的第0块;
所述第二写入模块进一步用于从Flash的第1块开始顺序写入所述应用程序。
10.根据权利要求9所述的基于Flash的程序分层存储的装置,其特征在于,还包括:
第三写入模块,用于再次将所述应用程序写入Flash中,作为备份程序。
11.一种基于Flash的程序分层运行的装置,其特征在于,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述装置包括:
第一读取模块,用于从Flash中已知的好块中读出所述引导程序至RAM;
第一运行模块,用于运行所述引导程序,初始化程序的运行环境;
第二读取模块,用于从Flash中读出预先存储的应用程序至RAM;其中,若遇到坏块,则根据预先存储的坏块列表,读出与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
第二运行模块,用于运行所述应用程序,实现程序的功能。
12.根据权利要求11所述的基于Flash的程序分层运行的装置,其特征在于,所述Flash中预先存储有与所述应用程序相同的备份程序,所述第二读取模块包括:
第一读取单元,用于从Flash中读出所述应用程序的程序头至RAM,所述程序头中包括程序校验值;
第一计算单元,用于根据所述程序头,从Flash中读出所述应用程序至RAM,计算程序校验值;
第一比较单元,用于将计算得到的程序校验值与所述程序头中的程序校验值比较,若两者不一致,则从Flash中读出所述备份程序至RAM。
13.一种基于Flash的程序分层升级的装置,其特征在于,所述程序由引导程序和应用程序组成,所述引导程序用于初始化程序的运行环境,所述应用程序用于实现程序的功能,所述引导程序和应用程序都存储在Flash中,所述装置包括:
第三读取模块,用于从Flash已知的好块中读出所述引导程序至RAM;
第三运行模块,用于运行所述引导程序,初始化程序的运行环境;
第一接收模块,用于接收升级后的应用程序至RAM;
第一擦除模块,用于从Flash中擦除原有的应用程序;其中,若遇到坏块,则根据预先存储的坏块列表,擦除与该坏块映射的好块中的数据,所述坏块列表中存储有坏块和好块的映射关系;
第四写入模块,用于将升级后的应用程序从RAM写入Flash;其中,若遇到坏块,则根据预先存储的坏块列表,写入与该坏块映射的好块中。
14.根据权利要求8-13任一权利要求所述的装置,其特征在于,所述Flash为NandFlash。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510423542.4A CN105117237A (zh) | 2015-04-22 | 2015-07-17 | 基于Flash的程序分层存储、运行以及升级的方法和装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510194267 | 2015-04-22 | ||
CN201510423542.4A CN105117237A (zh) | 2015-04-22 | 2015-07-17 | 基于Flash的程序分层存储、运行以及升级的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105117237A true CN105117237A (zh) | 2015-12-02 |
Family
ID=54665239
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510423542.4A Pending CN105117237A (zh) | 2015-04-22 | 2015-07-17 | 基于Flash的程序分层存储、运行以及升级的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105117237A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708586A (zh) * | 2017-01-11 | 2017-05-24 | 湘潭大学 | 一种用于嵌入式系统程序自动在线更新的手持式仪器及方法 |
CN106886426A (zh) * | 2015-12-15 | 2017-06-23 | 西安富成防务科技有限公司 | 一种分块升级的dsp处理系统 |
CN109189405A (zh) * | 2018-07-19 | 2019-01-11 | 山东省科学院自动化研究所 | 一种验证程序Flash数据一致性的方法及系统 |
CN109582370A (zh) * | 2018-11-01 | 2019-04-05 | 浙江大华技术股份有限公司 | 一种nor flash嵌入式设备的启动方法及装置 |
CN116431189A (zh) * | 2023-06-12 | 2023-07-14 | 广州万协通信息技术有限公司 | 基于pcie链路的板卡升级方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567217A (zh) * | 2008-04-23 | 2009-10-28 | 中兴通讯股份有限公司 | 一种安全烧写闪存的方法及数据写入方法 |
CN102722443A (zh) * | 2012-05-21 | 2012-10-10 | 三星半导体(中国)研究开发有限公司 | 闪速存储器的坏块管理方法 |
CN103220569A (zh) * | 2013-03-25 | 2013-07-24 | 深圳创维数字技术股份有限公司 | 一种机顶盒的自动恢复方法及设备 |
CN103473098A (zh) * | 2013-09-10 | 2013-12-25 | 华为技术有限公司 | 一种boot程序的启动方法和相关装置 |
-
2015
- 2015-07-17 CN CN201510423542.4A patent/CN105117237A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567217A (zh) * | 2008-04-23 | 2009-10-28 | 中兴通讯股份有限公司 | 一种安全烧写闪存的方法及数据写入方法 |
CN102722443A (zh) * | 2012-05-21 | 2012-10-10 | 三星半导体(中国)研究开发有限公司 | 闪速存储器的坏块管理方法 |
CN103220569A (zh) * | 2013-03-25 | 2013-07-24 | 深圳创维数字技术股份有限公司 | 一种机顶盒的自动恢复方法及设备 |
CN103473098A (zh) * | 2013-09-10 | 2013-12-25 | 华为技术有限公司 | 一种boot程序的启动方法和相关装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106886426A (zh) * | 2015-12-15 | 2017-06-23 | 西安富成防务科技有限公司 | 一种分块升级的dsp处理系统 |
CN106708586A (zh) * | 2017-01-11 | 2017-05-24 | 湘潭大学 | 一种用于嵌入式系统程序自动在线更新的手持式仪器及方法 |
CN106708586B (zh) * | 2017-01-11 | 2019-11-15 | 湘潭大学 | 一种用于嵌入式系统程序自动在线更新的手持式仪器及方法 |
CN109189405A (zh) * | 2018-07-19 | 2019-01-11 | 山东省科学院自动化研究所 | 一种验证程序Flash数据一致性的方法及系统 |
CN109582370A (zh) * | 2018-11-01 | 2019-04-05 | 浙江大华技术股份有限公司 | 一种nor flash嵌入式设备的启动方法及装置 |
CN109582370B (zh) * | 2018-11-01 | 2022-07-19 | 浙江大华技术股份有限公司 | 一种nor flash嵌入式设备的启动方法及装置 |
CN116431189A (zh) * | 2023-06-12 | 2023-07-14 | 广州万协通信息技术有限公司 | 基于pcie链路的板卡升级方法、装置、设备及存储介质 |
CN116431189B (zh) * | 2023-06-12 | 2024-02-27 | 广州万协通信息技术有限公司 | 基于pcie链路的板卡升级方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105117237A (zh) | 基于Flash的程序分层存储、运行以及升级的方法和装置 | |
CN103955431B (zh) | 一种闪存存储设备中数据管理的方法及装置 | |
CN1493026B (zh) | 存储装置及利用此存储装置的记录再生装置 | |
CN102054533B (zh) | 隔离顺序、随机和系统数据以减少垃圾回收的针对基于页映射的非易失性半导体存储器 | |
CN101515276B (zh) | 一种文件数据写操作的方法、文件数据恢复方法及系统 | |
CN103635968A (zh) | 包含存储器系统控制器的设备和相关方法 | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
CN103635969A (zh) | 包含存储器系统控制器的设备和相关方法 | |
CN100458718C (zh) | 一种闪存存储装置及其数据读取和写入方法 | |
WO2003088044A1 (fr) | Dispositif de stockage de donnees | |
KR20130078973A (ko) | 메모리 장치의 불량 저장 영역 관리 방법 및 이를 이용한 저장 장치 | |
TW201617876A (zh) | 資料儲存裝置以及快閃記憶體控制方法 | |
CN103995784A (zh) | 快闪存储器控制器与存储装置以及快闪存储器控制方法 | |
CN106445843A (zh) | 使物理页面地址相关用于软判决解码 | |
CN103064755B (zh) | Nand闪存写数据处理方法和装置 | |
CN103392164A (zh) | 存储系统和存储控制方法 | |
CN104423888A (zh) | 数据写入方法、存储器控制电路单元与存储器存储装置 | |
CN103294615A (zh) | 一种存储机顶盒用户信息的方法 | |
CN107239526A (zh) | 文件系统实现方法、碎片整理方法、操作位置定位方法 | |
CN103996412A (zh) | 一种用于智能卡非易失性存储器的掉电保护方法 | |
CN104765695A (zh) | 一种nand flash坏块管理系统及方法 | |
CN113126903A (zh) | 用于在存储器接口中实现写后读命令的系统和方法 | |
US20210241843A1 (en) | Apparatus and method for verifying reliability of data read from memory device through clock modulation, and memory system including the same | |
CN103377129A (zh) | 数据写入方法、存储器控制器与存储器储存装置 | |
CN109240870A (zh) | 一种固态硬盘故障定位方法及相关装置 |
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: 20151202 |