一种读取cpu代码的方法及装置的制作方法

文档序号:6610081阅读:121来源:国知局
专利名称:一种读取cpu代码的方法及装置的制作方法
技术领域
本发明涉及读取代码的方法,尤其是指一种读取CPU代码的方法及装置。
背景技术
由Intel公司在1988年开发的或非闪存(Nor Flash)和由东芝公司在1989年开发的与非闪存(Nand Flash)是市场上两种最主要的非易失闪存。在现有技术中,由于Nor Flash支持代码的本地运行,稳定性很好,并具有较快的数据读出速度,所以通常被用来存储CPU的指令代码。但随着技术的飞速发展,片上系统(SOC,System On Chip)的规模越来越大,嵌入式CPU的功能也越来越强,其所需的代码量随之急剧增加,因此所需要的Nor Flash的存储容量也相应加大。但是,由于Nor Flash在制造过程中难以实现较高的存储密度,因此NorFlash的存储容量一般都比较小,大容量Nor Flash的制造成本比较高,因此造成了整个系统的总成本比较高。
与Nor Flash相比,Nand Flash在制造过程中容易实现很高的存储密度,因此具有更大的存储容量,其存储容量通常为Nor Flash的几十倍或几百倍,而且其制造成本也相对低廉,一般被用于大容量的数据存储。但是,Nand Flash的缺点在于稳定性不够好,容易出现坏块,从而导致所存储的内容丢失。而现有技术中的使用Nand Flash来存储并读取CPU代码的方案中,没有将所存储的CPU代码备份到Nand Flash中的不同的块中,当Nand Flash中出现坏块时,将导致这个块中所存储的CPU代码丢失,而如果在系统中发生CPU代码丢失的情况,则将使得整个系统的稳定性变得很差,因此现有技术中使用Nand Flash来存储并读取CPU代码的方法都存在着稳定性差的缺点。

发明内容
有鉴于此,本发明的主要目的在于提供一种读取CPU代码的方法及装置,使得可稳定可靠地使用与非闪存来存储CPU代码。
为达到上述目的,本发明的技术方案是这样实现的一种读取CPU代码的方法,该方法包括将存储在与非闪存中的CPU代码备份到与非闪存中至少一个不同的块中,当从与非闪存中读取的CPU代码不正确时,读取备份代码。
一种读取CPU代码的装置,其特征在于,该装置包括CPU单元,缓存单元,与非闪存控制单元和与非闪存单元;所述CPU单元从所述缓存单元中读取CPU代码,向所述与非闪存控制单元发送控制命令;所述缓存单元将代码发送给所述CPU单元,接收所述与非闪存控制单元发送的CPU代码;所述与非闪存控制单元根据所述CPU单元发送的控制命令向所述与非闪存单元发送读取命令,接收所述与非闪存单元发送的CPU代码,将接收到的CPU代码发送给所述缓存单元;所述与非闪存单元将所存储的CPU代码备份到至少一个不同的块中,根据所述与非闪存控制单元的读取命令,从块中读取CPU代码,将所读取的CPU代码发送给所述与非闪存控制单元。
综上可知,本发明提供了一种读取CPU代码的方法及装置,通过使用NandFlash来存储CPU代码,并将存储在Nand Flash中的CPU代码备份到与非闪存中至少一个不同的块中,使得当Nand Flash中出现坏块时,可读取Nand Flash中相应的其他块中的备份CPU代码,并可根据备份CPU代码对出现错误的CPU代码进行纠错,从而可稳定可靠地使用Nand Flash来存储CPU代码,提高了系统的稳定性,同时还降低了制造成本。


图1为本发明实施例中读取CPU代码的方法的流程图。
图2为本发明实施例中读取CPU代码的装置的结构示意图。
具体实施例方式
为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明的实施例提供了一种读取CPU代码的方法。在该方法中,使用了Nand Flash来存储CPU代码,并且将存储在Nand Flash中的每一段CPU代码都备份到该Nand Flash中的不同块中。备份代码的数目可根据具体情况而定,可以是一个备份代码,也可以是两个或两个以上的备份代码,且上述的CPU代码及其备份代码都具有错误检测和纠错(ECC,Error Checking andCorrecting)码。当从Nand Flash中读取某段CPU代码后,可先对该段CPU代码进行ECC校验,即检测被读取的CPU代码的ECC码是否正确。如果校验结果正确,则将该段CPU代码存储到CPU的缓存中,等待被读入CPU;如果校验结果错误,则表示该段CPU代码出现了某些错误。此时,可对出现上述错误的CPU代码进行ECC纠错。如果纠错成功,则将纠错后的CPU代码存储到CPU的缓存中,等待被读入CPU,并将上述纠错后的CPU代码覆盖Nand Flash中所存储的相应的CPU代码及其备份代码;如果出现不可纠错的ECC错误,可读取该段CPU代码在Nand Flash中相对应的某一段备份代码,并依此类推重复上述的步骤,直到最终将正确的CPU代码存储到CPU的缓存中,同时用正确的CPU代码覆盖Nand Flash中相应的CPU代码及其备份代码。另外,当Nand Flash中所存储的某段CPU代码及其备份代码均出现错误时,可终止整个流程,检查错误出现的原因。
在本发明实施例所提供的方法中,除了ECC码外,还可以根据其它的方式来判断所读取的CPU代码是否正确;此外,当所读取的CPU代码不正确时,可对该CPU代码进行ECC纠错,如果纠错不成功再读取备份代码,也可不对该CPU代码进行ECC纠错,而直接读取该CPU代码的备份代码。
图1所示为本发明实施例中读取CPU代码的方法的流程图,如图1所示,本发明的实施例中读取CPU代码的具体步骤如下
步骤100,存储并预先备份CPU代码。
在本步骤中,使用Nand Flash存储CPU代码,然后预先将Nand Flash中所存储的每一段CPU代码备份到该Nand Flash中的不同块中,备份的数目可根据实际情况而定,可以是一个备份代码,也可以是两个或两个以上的备份代码,且上述的CPU代码及其备份代码都具有ECC码。为了叙述的方便,在本实施例以下的步骤中,将以每一段CPU代码只有一个备份代码为例进行说明。
步骤101,CPU启动。
在本步骤中,当CPU启动后,将读取缓存中的CPU代码。当缓存中没有CPU所需的CPU代码时,则需要更新缓存中的CPU代码,即执行步骤102。
步骤102,CPU读取Nand Flash中的CPU代码。在本步骤中,当CPU需要更新缓存中的CPU代码时,它将从Nand Flash中读取所需的CPU代码,该段代码为存储于Nand Flash中的某一段CPU代码。
步骤103,判断ECC码是否正确,如果正确,则执行步骤109;如果不正确,则执行步骤104。
在本步骤中,需要对上述被读取的CPU代码进行ECC校验,并判断ECC校验是否正确,即检测被读取的CPU代码的ECC码是否正确。如果ECC码正确,则说明被读取的CPU代码没有出现错误,因此执行步骤109;如果ECC码不正确,则说明被读取的CPU代码中出现了错误,因此必须对所出现的错误进行纠错,即执行步骤104。所述的ECC是一种指令纠错技术,该技术不仅能检测出代码中的多位数据错误,同时还可以指定出错的数位并改正。
步骤104,对所读取的代码进行ECC纠错。即根据所读取的代码的ECC码对所读取的代码进行纠错。
步骤105,判断ECC纠错是否成功,如果成功,则执行步骤109;如果不成功,则执行步骤106。
步骤106,判断当前所读取的代码是否为备份代码,如果是备份代码,则说明CPU代码及其备份代码均出现错误,因此执行步骤108;如果不是备份代码,则执行步骤107;步骤107,读取备份代码,并返回执行步骤103。即从Nand Flash中读取上述发生错误的CPU代码相对应的备份代码,重新返回执行步骤103,对该备份代码进行ECC校验。
步骤108,报错,然后执行步骤109。
由于上述CPU代码及其备份代码都出错,则此时将报错,执行步骤109,结束整个流程。并可在流程结束后,对错误出现的原因进行检查。
步骤109,结束流程。
如果在上述步骤103中,CPU代码或备份代码出现了错误,但在步骤105中对该出现错误的代码所进行的ECC纠错成功了,最后仍然读取到了正确的CPU代码或备份代码;或者在步骤103中,所读取的备份代码并没有出现错误,则在步骤109中需要对出现错误的CPU代码或该CPU代码的备份代码进行纠错更新,再结束流程。所述的对错误的CPU代码或该CPU代码的备份代码进行纠错更新,就是将上述正确的代码或纠错成功后的代码覆盖Nand Flash中该段代码所对应的出现错误的CPU代码以及该CPU代码的备份代码。
以上所述为在CPU代码只有一个备份代码的情况下读取CPU代码的方法。当CPU代码有多个备份代码的情况时,所进行的处理过程与图1所示的处理流程相类似。所不同的地方在于,在步骤106中,当判断当前所读取的代码为备份代码后,还要判断该备份代码是否为最后一个备份代码。如果是最后一个备份代码,则说明CPU代码及其所有的备份代码均出现错误,因此执行步骤108;如果不是最后一个备份代码,则执行步骤107,读取下一个备份代码,并返回执行步骤103。
在Nand Flash中,虽然某个块中出现随机错误的概率比较高,但却很少出现块与块之间的关联错误,因此如果将所需存储的每一段代码在NandF1ash中不同的块中存储若干个备份代码,则当某个块中的某段代码出现错误时,可通过读取其他块中相应的备份代码得到正确的代码,从而极大地提高了系统的稳定性。
本发明的实施例还提供了一种读取CPU代码的装置。在该装置中,使用了Nand Flash单元来存储CPU代码,并将所存储的每段CPU代码都被备份到Nand Flash单元至少一个不同的块中,即Nand Flash单元中所存储的每段CPU代码都具有一个以上的备份代码。
图2所示为本发明实施例中读取CPU代码的装置的结构示意图,如图2所示,该装置包括CPU单元201、缓存单元202、Nand Flash控制单元203和Nand F1ash单元204。
所述CPU单元201可从缓存单元202中直接读取CPU代码;也可向Nand Flash控制单元203发送控制命令,实现缓存单元202中的CPU代码的更新。
所述缓存单元202用于存储直接供CPU调用的CPU代码,并将相应CPU代码发送给CPU单元201;也可接收Nand Flash控制单元203所发送的CPU代码,实现CPU代码的更新。
所述Nand Flash控制单元203根据CPU单元201发送的控制命令向Nand Flash单元204发送读取命令,并接收Nand Flash单元204发送的CPU代码,然后将接收到的CPU代码发送给缓存单元202。所述Nand Flash控制单元203还可向Nand Flash单元204发送更新后的CPU代码,实现NandFlash单元204中相应CPU代码的更新。
所述Nand Flash单元204是系统的存储器件,其中所存储的每段CPU代码都有一个以上的备份代码,每个备份代码都存储在Nand Flash单元204不同的块中,且上述的每段CPU代码及其备份代码都有ECC码。所述NandFlash单元204可根据Nand Flash控制单元203的读取命令,将相应的代码发送给Nand Flash控制单元203。Nand Flash单元204也可根据Nand Flash控制单元203发送的更新后的代码,覆盖Nand Flash单元204中相应的CPU代码及其备份代码。
在如上所述的读取CPU代码的装置中,所述Nand Flash控制单元203还需对Nand Flash单元204所发送的CPU代码进行ECC校验,如果校验正确无误,才能将该CPU代码发送给缓存单元202;如果发生ECC错误,NandFlash控制单元203将对该CPU代码做ECC纠错,如果纠错成功,则将纠错后的代码分别发送给缓存单元202和Nand Flash单元204,Nand Flash单元204根据接收到的纠错后的代码覆盖相应的CPU代码及其备份代码;如果纠错失败,则Nand Flash控制单元203重新向Nand Flash单元204发送读取命令,从Nand Flash单元204读取上述发生错误的CPU代码的其他备份代码,重复上述检验步骤,直至将正确的CPU代码传输给缓存单元202,并用正确的CPU代码更新Nand Flash单元204中的相应的CPU代码及其备份代码。
综上所述,本发明的实施例提供了一种使用Nand Flash存储CPU代码的方法及装置,通过使用Nand Flash来存储CPU代码,并将存储在NandFlash中的CPU代码备份到与非闪存中至少一个不同的块中,使得当NandFlash中出现坏块时,可读取Nand Flash中其他块中的备份CPU代码,并可根据备份CPU代码对出现错误的CPU代码进行纠错,从而可稳定可靠地使用Nand Flash来存储CPU代码,从而提高了系统的稳定性,降低了系统的制造成本。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种读取CPU代码的方法,其特征在于,将存储在与非闪存中的CPU代码备份到与非闪存中至少一个不同的块中,该方法包括当从与非闪存中读取的CPU代码不正确时,读取备份代码。
2.根据权利要求1所述的方法,其特征在于,所述CPU代码不正确包括所述CPU代码的错误检测和纠错码不正确。
3.根据权利要求1或2所述的方法,其特征在于,所述读取备份代码包括对CPU代码进行错误检测和纠错,当所述错误检测和纠错不成功时,读取备份代码。
4.根据权利要求3所述的方法,其特征在于,所述对CPU代码进行错误检测和纠错之后还进一步包括当所述错误检测和纠错成功时,对CPU代码及其备份代码进行更新。
5.根据权利要求1所述的方法,其特征在于,所述读取备份代码之后还包括判断所读取的备份代码是否正确,如果备份代码不正确,则读取下一个备份代码;所述备份代码不正确包括所述备份代码的错误检测和纠错码不正确。
6.根据权利要求5所述的方法,其特征在于,所述读取下一个备份代码包括对备份代码进行错误检测和纠错,当所述错误检测和纠错不成功时,读取下一个备份代码;否则,对CPU代码及其备份代码进行更新。
7.根据权利要求5或6所述的方法,其特征在于,所述读取下一个备份代码包括判断当前所读取的CPU代码是否为最后一个备份代码,如果是,则报错,结束流程;否则,读取下一个备份代码。
8.一种读取CPU代码的装置,其特征在于,该装置包括CPU单元,缓存单元,与非闪存控制单元和与非闪存单元;所述CPU单元从所述缓存单元中读取CPU代码,向所述与非闪存控制单元发送控制命令;所述缓存单元将代码发送给所述CPU单元,接收所述与非闪存控制单元发送的CPU代码;所述与非闪存控制单元根据所述CPU单元发送的控制命令向所述与非闪存单元发送读取命令,接收所述与非闪存单元发送的CPU代码,将接收到的CPU代码发送给所述缓存单元;所述与非闪存单元将所存储的CPU代码备份到至少一个不同的块中,根据所述与非闪存控制单元的读取命令,从块中读取CPU代码,将所读取的CPU代码发送给所述与非闪存控制单元。
9.根据权利要求8所述的装置,其特征在于,该装置还包括所述与非闪存控制单元用于对接收到的CPU代码进行错误检测和纠错。
10.根据权利要求8所述的装置,其特征在于,该装置还包括所述与非闪存控制单元向所述与非闪存单元发送纠错后的代码;所述与非闪存单元根据接收到的所述纠错后的代码,对备份代码进行更新。
全文摘要
本发明公开了一种读取CPU代码的方法,包括将存储在与非闪存中的CPU代码备份到与非闪存中至少一个不同的块中,当从与非闪存中读取的CPU代码不正确时,读取下一个备份代码。本发明还公开了一种读取CPU代码的装置,该装置包括CPU单元,缓存单元,与非闪存控制单元和与非闪存单元。使用本发明所提供的方法及装置,可稳定可靠地使用Nand Flash来存储CPU代码,提高系统的稳定性,降低制造成本。
文档编号G06F11/14GK101086715SQ20071011940
公开日2007年12月12日 申请日期2007年7月23日 优先权日2007年7月23日
发明者张 浩 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1