CN100549971C - 一种读取cpu代码的方法及装置 - Google Patents

一种读取cpu代码的方法及装置 Download PDF

Info

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
Application number
CNB2007101194042A
Other languages
English (en)
Other versions
CN101086715A (zh
Inventor
张�浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Vimicro Corp
Original Assignee
Vimicro Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Vimicro Corp filed Critical Vimicro Corp
Priority to CNB2007101194042A priority Critical patent/CN100549971C/zh
Publication of CN101086715A publication Critical patent/CN101086715A/zh
Application granted granted Critical
Publication of CN100549971C publication Critical patent/CN100549971C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明公开了一种读取CPU代码的方法,包括:将存储在与非闪存中的CPU代码备份到与非闪存中至少两个不同的块中,当从与非闪存中读取的CPU代码不正确时,读取下一个备份代码。本发明还公开了一种读取CPU代码的装置,该装置包括:CPU单元,缓存单元,与非闪存控制单元和与非闪存单元。使用本发明所提供的方法及装置,可稳定可靠地使用Nand Flash来存储CPU代码,提高系统的稳定性,降低制造成本。

Description

一种读取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代码进行错误检测和纠错(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代码及其备份代码。
CNB2007101194042A 2007-07-23 2007-07-23 一种读取cpu代码的方法及装置 Expired - Fee Related CN100549971C (zh)

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)

* Cited by examiner, † Cited by third party
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 阿里巴巴集团控股有限公司 一种用于同步中央处理器所属缓存的方法和装置

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