CN100549971C - 一种读取cpu代码的方法及装置 - Google Patents
一种读取cpu代码的方法及装置 Download PDFInfo
- Publication number
- CN100549971C CN100549971C CNB2007101194042A CN200710119404A CN100549971C CN 100549971 C CN100549971 C CN 100549971C CN B2007101194042 A CNB2007101194042 A CN B2007101194042A CN 200710119404 A CN200710119404 A CN 200710119404A CN 100549971 C CN100549971 C CN 100549971C
- Authority
- CN
- China
- Prior art keywords
- code
- cpu
- backup
- error
- error correction
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 230000015654 memory Effects 0.000 claims abstract description 43
- 238000012937 correction Methods 0.000 claims description 49
- 230000008569 process Effects 0.000 claims description 11
- 238000012795 verification Methods 0.000 claims description 10
- 238000004519 manufacturing process Methods 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种读取CPU代码的方法,包括:将存储在与非闪存中的CPU代码备份到与非闪存中至少两个不同的块中,当从与非闪存中读取的CPU代码不正确时,读取下一个备份代码。本发明还公开了一种读取CPU代码的装置,该装置包括:CPU单元,缓存单元,与非闪存控制单元和与非闪存单元。使用本发明所提供的方法及装置,可稳定可靠地使用Nand Flash来存储CPU代码,提高系统的稳定性,降低制造成本。
Description
技术领域
本发明涉及读取代码的方法,尤其是指一种读取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代码进行错误检测和纠错(ECC)校验;如果校验正确无误,将所述接收到的CPU代码发送给所述缓存单元;如果发生ECC错误,则对所述接收到的的CPU代码做ECC纠错;如果纠错成功,则将纠错后的代码分别发送给所述缓存单元和与非闪存单元;如果纠错失败,则重新向与非闪存单元发送读取命令,从与非闪存单元读取所述发生错误的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中,虽然某个块中出现随机错误的概率比较高,但却很少出现块与块之间的关联错误,因此如果将所需存储的每一段代码在NandFlash中不同的块中存储若干个备份代码,则当某个块中的某段代码出现错误时,可通过读取其他块中相应的备份代码得到正确的代码,从而极大地提高了系统的稳定性。
本发明的实施例还提供了一种读取CPU代码的装置。在该装置中,使用了Nand Flash单元来存储CPU代码,并将所存储的每段CPU代码都被备份到Nand Flash单元至少一个不同的块中,即Nand Flash单元中所存储的每段CPU代码都具有一个以上的备份代码。
图2所示为本发明实施例中读取CPU代码的装置的结构示意图,如图2所示,该装置包括CPU单元201、缓存单元202、Nand Flash控制单元203和Nand Flash单元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代码,从而提高了系统的稳定性,降低了系统的制造成本。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1、一种读取CPU代码的方法,其特征在于,将存储在与非闪存中的CPU代码备份到与非闪存中至少两个不同的块中,该方法包括:
当从与非闪存中读取的CPU代码不正确时,读取备份代码;
判断所读取的备份代码是否正确,如果备份代码正确,则将所述备份代码覆盖与非闪存中所存储的相应的CPU代码及其备份代码;如果备份代码不正确,则对备份代码进行错误检测和纠错;
当对所述备份代码的错误检测和纠错不成功时,判断当前所读取的备份代码是否为最后一个备份代码,如果是,则报错,结束流程;否则,读取下一个备份代码,并返回执行所述判断所读取的备份代码是否正确的步骤;
当对所述备份代码的错误检测和纠错成功时,将所述错误检测和纠错成功后的CPU代码覆盖与非闪存中所存储的相应的CPU代码及其备份代码。
2、根据权利要求1所述的方法,其特征在于,所述CPU代码不正确包括:所述CPU代码的错误检测和纠错码不正确。
3、根据权利要求1或2所述的方法,其特征在于,所述读取备份代码包括:对CPU代码进行错误检测和纠错,当所述错误检测和纠错不成功时,读取备份代码。
4、根据权利要求3所述的方法,其特征在于,所述对CPU代码进行错误检测和纠错之后还进一步包括:当所述错误检测和纠错成功时,对CPU代码及其备份代码进行更新。
5、根据权利要求1所述的方法,其特征在于,
所述备份代码不正确包括:所述备份代码的错误检测和纠错码不正确。
6、一种读取CPU代码的装置,其特征在于,该装置包括:CPU单元,缓存单元,与非闪存控制单元和与非闪存单元;
所述CPU单元从所述缓存单元中读取CPU代码,向所述与非闪存控制单元发送控制命令;
所述缓存单元将代码发送给所述CPU单元,接收所述与非闪存控制单元发送的CPU代码;
所述与非闪存控制单元根据所述CPU单元发送的控制命令向所述与非闪存单元发送读取命令,接收所述与非闪存单元发送的CPU代码;对接收到的CPU代码进行错误检测和纠错(ECC)校验;如果校验正确无误,将所述接收到的CPU代码发送给所述缓存单元;如果发生ECC错误,则对所述接收到的的CPU代码做ECC纠错;如果纠错成功,则将纠错后的代码分别发送给所述缓存单元和与非闪存单元;如果纠错失败,则重新向与非闪存单元发送读取命令,从与非闪存单元读取所述发生错误的CPU代码的其他备份代码,重复上述检验步骤,直至将正确的CPU代码传输给所述缓存单元和所述与非闪存单元;
所述与非闪存单元将所存储的CPU代码备份到至少两个不同的块中,根据所述与非闪存控制单元的读取命令,从块中读取CPU代码,将所读取的CPU代码发送给所述与非闪存控制单元;根据接收到的所述纠错后的代码,覆盖相应的CPU代码及其备份代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101194042A CN100549971C (zh) | 2007-07-23 | 2007-07-23 | 一种读取cpu代码的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101194042A CN100549971C (zh) | 2007-07-23 | 2007-07-23 | 一种读取cpu代码的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101086715A CN101086715A (zh) | 2007-12-12 |
CN100549971C true CN100549971C (zh) | 2009-10-14 |
Family
ID=38937681
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101194042A Expired - Fee Related CN100549971C (zh) | 2007-07-23 | 2007-07-23 | 一种读取cpu代码的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100549971C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102623066A (zh) * | 2012-01-19 | 2012-08-01 | 苏州希图视鼎微电子有限公司 | 固化代码参数表的保存及获取方法 |
CN103092713A (zh) * | 2012-11-07 | 2013-05-08 | 无锡成电科大科技发展有限公司 | 使用与非闪存存储嵌入式代码的方法 |
CN103092727B (zh) * | 2013-01-18 | 2015-08-26 | 大唐移动通信设备有限公司 | Flash存储介质上的数据纠错方法和装置 |
CN103744745B (zh) * | 2013-12-13 | 2018-05-29 | 北京奇虎科技有限公司 | 一种数据存储的检测方法、设备及分布式存储系统 |
JP2016143085A (ja) * | 2015-01-29 | 2016-08-08 | 株式会社東芝 | 装置及び方法 |
CN106293978A (zh) * | 2015-05-22 | 2017-01-04 | 炬芯(珠海)科技有限公司 | 一种数据反馈的方法及设备 |
CN108572926B (zh) * | 2017-03-13 | 2022-02-22 | 阿里巴巴集团控股有限公司 | 一种用于同步中央处理器所属缓存的方法和装置 |
-
2007
- 2007-07-23 CN CNB2007101194042A patent/CN100549971C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101086715A (zh) | 2007-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100549971C (zh) | 一种读取cpu代码的方法及装置 | |
CN102880521B (zh) | 非易失性存储器装置中管理块和存取数据页的方法及设备 | |
CN102385535B (zh) | 处理从非易失性存储器进行设备引导期间的错误 | |
US9110832B2 (en) | Object oriented memory in solid state devices | |
CN102099793A (zh) | 根据固态存储器的擦除计数进行误差校正的方法和装置 | |
CN101246738A (zh) | 具有备份电路的存储系统及编程方法 | |
CN101815988A (zh) | 固件映像更新和管理 | |
CN1971536A (zh) | 基本输入输出系统的纠错系统及方法 | |
CN101727401B (zh) | 连接表的回复方法 | |
CN111755039A (zh) | 在恢复进程期间减少存储器系统中单元干扰的设备及方法 | |
CN105808371A (zh) | 数据备份与恢复方法、控制芯片及存储装置 | |
CN104063477A (zh) | 嵌入式系统启动异常的处理方法及装置 | |
US20080072119A1 (en) | Allowable bit errors per sector in memory devices | |
CN100536027C (zh) | 与非闪存的读取方法 | |
CN112015447A (zh) | 电子设备的系统更新方法及装置、电子设备及存储介质 | |
CN109426582B (zh) | 用于存储装置为错误处置进行数据处理的方法及控制器 | |
CN102237143A (zh) | 一种闪存块信息的重建方法、系统及重建设备 | |
CN103092713A (zh) | 使用与非闪存存储嵌入式代码的方法 | |
CN208460001U (zh) | 一种非易失性半导体存储器 | |
CN111159123B (zh) | 一种嵌入式可靠参数储存文件系统及方法 | |
US20070033492A1 (en) | Method and device for monitoring an electronic circuit | |
CN110554928B (zh) | 一种非易失性半导体存储器参数上电读取方法及装置 | |
CN111813597A (zh) | 一种空调器 | |
CN118426815B (zh) | 一种存储设备及其控制方法 | |
JP5786702B2 (ja) | セキュリティトークン、セキュリティトークンにおける命令の実行方法及びコンピュータプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091014 Termination date: 20120723 |