專利名稱:一種讀取cpu代碼的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及讀取代碼的方法,尤其是指一種讀取CPU代碼的方法及裝置。
背景技術(shù):
由Intel公司在1988年開發(fā)的或非閃存(Nor Flash)和由東芝公司在1989年開發(fā)的與非閃存(Nand Flash)是市場上兩種最主要的非易失閃存。在現(xiàn)有技術(shù)中,由于Nor Flash支持代碼的本地運(yùn)行,穩(wěn)定性很好,并具有較快的數(shù)據(jù)讀出速度,所以通常被用來存儲CPU的指令代碼。但隨著技術(shù)的飛速發(fā)展,片上系統(tǒng)(SOC,System On Chip)的規(guī)模越來越大,嵌入式CPU的功能也越來越強(qiáng),其所需的代碼量隨之急劇增加,因此所需要的Nor Flash的存儲容量也相應(yīng)加大。但是,由于Nor Flash在制造過程中難以實(shí)現(xiàn)較高的存儲密度,因此NorFlash的存儲容量一般都比較小,大容量Nor Flash的制造成本比較高,因此造成了整個(gè)系統(tǒng)的總成本比較高。
與Nor Flash相比,Nand Flash在制造過程中容易實(shí)現(xiàn)很高的存儲密度,因此具有更大的存儲容量,其存儲容量通常為Nor Flash的幾十倍或幾百倍,而且其制造成本也相對低廉,一般被用于大容量的數(shù)據(jù)存儲。但是,Nand Flash的缺點(diǎn)在于穩(wěn)定性不夠好,容易出現(xiàn)壞塊,從而導(dǎo)致所存儲的內(nèi)容丟失。而現(xiàn)有技術(shù)中的使用Nand Flash來存儲并讀取CPU代碼的方案中,沒有將所存儲的CPU代碼備份到Nand Flash中的不同的塊中,當(dāng)Nand Flash中出現(xiàn)壞塊時(shí),將導(dǎo)致這個(gè)塊中所存儲的CPU代碼丟失,而如果在系統(tǒng)中發(fā)生CPU代碼丟失的情況,則將使得整個(gè)系統(tǒng)的穩(wěn)定性變得很差,因此現(xiàn)有技術(shù)中使用Nand Flash來存儲并讀取CPU代碼的方法都存在著穩(wěn)定性差的缺點(diǎn)。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種讀取CPU代碼的方法及裝置,使得可穩(wěn)定可靠地使用與非閃存來存儲CPU代碼。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種讀取CPU代碼的方法,該方法包括將存儲在與非閃存中的CPU代碼備份到與非閃存中至少一個(gè)不同的塊中,當(dāng)從與非閃存中讀取的CPU代碼不正確時(shí),讀取備份代碼。
一種讀取CPU代碼的裝置,其特征在于,該裝置包括CPU單元,緩存單元,與非閃存控制單元和與非閃存單元;所述CPU單元從所述緩存單元中讀取CPU代碼,向所述與非閃存控制單元發(fā)送控制命令;所述緩存單元將代碼發(fā)送給所述CPU單元,接收所述與非閃存控制單元發(fā)送的CPU代碼;所述與非閃存控制單元根據(jù)所述CPU單元發(fā)送的控制命令向所述與非閃存單元發(fā)送讀取命令,接收所述與非閃存單元發(fā)送的CPU代碼,將接收到的CPU代碼發(fā)送給所述緩存單元;所述與非閃存單元將所存儲的CPU代碼備份到至少一個(gè)不同的塊中,根據(jù)所述與非閃存控制單元的讀取命令,從塊中讀取CPU代碼,將所讀取的CPU代碼發(fā)送給所述與非閃存控制單元。
綜上可知,本發(fā)明提供了一種讀取CPU代碼的方法及裝置,通過使用NandFlash來存儲CPU代碼,并將存儲在Nand Flash中的CPU代碼備份到與非閃存中至少一個(gè)不同的塊中,使得當(dāng)Nand Flash中出現(xiàn)壞塊時(shí),可讀取Nand Flash中相應(yīng)的其他塊中的備份CPU代碼,并可根據(jù)備份CPU代碼對出現(xiàn)錯(cuò)誤的CPU代碼進(jìn)行糾錯(cuò),從而可穩(wěn)定可靠地使用Nand Flash來存儲CPU代碼,提高了系統(tǒng)的穩(wěn)定性,同時(shí)還降低了制造成本。
圖1為本發(fā)明實(shí)施例中讀取CPU代碼的方法的流程圖。
圖2為本發(fā)明實(shí)施例中讀取CPU代碼的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)表達(dá)得更加清楚明白,下面結(jié)合附圖及具體實(shí)施例對本發(fā)明再作進(jìn)一步詳細(xì)的說明。
本發(fā)明的實(shí)施例提供了一種讀取CPU代碼的方法。在該方法中,使用了Nand Flash來存儲CPU代碼,并且將存儲在Nand Flash中的每一段CPU代碼都備份到該Nand Flash中的不同塊中。備份代碼的數(shù)目可根據(jù)具體情況而定,可以是一個(gè)備份代碼,也可以是兩個(gè)或兩個(gè)以上的備份代碼,且上述的CPU代碼及其備份代碼都具有錯(cuò)誤檢測和糾錯(cuò)(ECC,Error Checking andCorrecting)碼。當(dāng)從Nand Flash中讀取某段CPU代碼后,可先對該段CPU代碼進(jìn)行ECC校驗(yàn),即檢測被讀取的CPU代碼的ECC碼是否正確。如果校驗(yàn)結(jié)果正確,則將該段CPU代碼存儲到CPU的緩存中,等待被讀入CPU;如果校驗(yàn)結(jié)果錯(cuò)誤,則表示該段CPU代碼出現(xiàn)了某些錯(cuò)誤。此時(shí),可對出現(xiàn)上述錯(cuò)誤的CPU代碼進(jìn)行ECC糾錯(cuò)。如果糾錯(cuò)成功,則將糾錯(cuò)后的CPU代碼存儲到CPU的緩存中,等待被讀入CPU,并將上述糾錯(cuò)后的CPU代碼覆蓋Nand Flash中所存儲的相應(yīng)的CPU代碼及其備份代碼;如果出現(xiàn)不可糾錯(cuò)的ECC錯(cuò)誤,可讀取該段CPU代碼在Nand Flash中相對應(yīng)的某一段備份代碼,并依此類推重復(fù)上述的步驟,直到最終將正確的CPU代碼存儲到CPU的緩存中,同時(shí)用正確的CPU代碼覆蓋Nand Flash中相應(yīng)的CPU代碼及其備份代碼。另外,當(dāng)Nand Flash中所存儲的某段CPU代碼及其備份代碼均出現(xiàn)錯(cuò)誤時(shí),可終止整個(gè)流程,檢查錯(cuò)誤出現(xiàn)的原因。
在本發(fā)明實(shí)施例所提供的方法中,除了ECC碼外,還可以根據(jù)其它的方式來判斷所讀取的CPU代碼是否正確;此外,當(dāng)所讀取的CPU代碼不正確時(shí),可對該CPU代碼進(jìn)行ECC糾錯(cuò),如果糾錯(cuò)不成功再讀取備份代碼,也可不對該CPU代碼進(jìn)行ECC糾錯(cuò),而直接讀取該CPU代碼的備份代碼。
圖1所示為本發(fā)明實(shí)施例中讀取CPU代碼的方法的流程圖,如圖1所示,本發(fā)明的實(shí)施例中讀取CPU代碼的具體步驟如下
步驟100,存儲并預(yù)先備份CPU代碼。
在本步驟中,使用Nand Flash存儲CPU代碼,然后預(yù)先將Nand Flash中所存儲的每一段CPU代碼備份到該Nand Flash中的不同塊中,備份的數(shù)目可根據(jù)實(shí)際情況而定,可以是一個(gè)備份代碼,也可以是兩個(gè)或兩個(gè)以上的備份代碼,且上述的CPU代碼及其備份代碼都具有ECC碼。為了敘述的方便,在本實(shí)施例以下的步驟中,將以每一段CPU代碼只有一個(gè)備份代碼為例進(jìn)行說明。
步驟101,CPU啟動。
在本步驟中,當(dāng)CPU啟動后,將讀取緩存中的CPU代碼。當(dāng)緩存中沒有CPU所需的CPU代碼時(shí),則需要更新緩存中的CPU代碼,即執(zhí)行步驟102。
步驟102,CPU讀取Nand Flash中的CPU代碼。在本步驟中,當(dāng)CPU需要更新緩存中的CPU代碼時(shí),它將從Nand Flash中讀取所需的CPU代碼,該段代碼為存儲于Nand Flash中的某一段CPU代碼。
步驟103,判斷ECC碼是否正確,如果正確,則執(zhí)行步驟109;如果不正確,則執(zhí)行步驟104。
在本步驟中,需要對上述被讀取的CPU代碼進(jìn)行ECC校驗(yàn),并判斷ECC校驗(yàn)是否正確,即檢測被讀取的CPU代碼的ECC碼是否正確。如果ECC碼正確,則說明被讀取的CPU代碼沒有出現(xiàn)錯(cuò)誤,因此執(zhí)行步驟109;如果ECC碼不正確,則說明被讀取的CPU代碼中出現(xiàn)了錯(cuò)誤,因此必須對所出現(xiàn)的錯(cuò)誤進(jìn)行糾錯(cuò),即執(zhí)行步驟104。所述的ECC是一種指令糾錯(cuò)技術(shù),該技術(shù)不僅能檢測出代碼中的多位數(shù)據(jù)錯(cuò)誤,同時(shí)還可以指定出錯(cuò)的數(shù)位并改正。
步驟104,對所讀取的代碼進(jìn)行ECC糾錯(cuò)。即根據(jù)所讀取的代碼的ECC碼對所讀取的代碼進(jìn)行糾錯(cuò)。
步驟105,判斷ECC糾錯(cuò)是否成功,如果成功,則執(zhí)行步驟109;如果不成功,則執(zhí)行步驟106。
步驟106,判斷當(dāng)前所讀取的代碼是否為備份代碼,如果是備份代碼,則說明CPU代碼及其備份代碼均出現(xiàn)錯(cuò)誤,因此執(zhí)行步驟108;如果不是備份代碼,則執(zhí)行步驟107;步驟107,讀取備份代碼,并返回執(zhí)行步驟103。即從Nand Flash中讀取上述發(fā)生錯(cuò)誤的CPU代碼相對應(yīng)的備份代碼,重新返回執(zhí)行步驟103,對該備份代碼進(jìn)行ECC校驗(yàn)。
步驟108,報(bào)錯(cuò),然后執(zhí)行步驟109。
由于上述CPU代碼及其備份代碼都出錯(cuò),則此時(shí)將報(bào)錯(cuò),執(zhí)行步驟109,結(jié)束整個(gè)流程。并可在流程結(jié)束后,對錯(cuò)誤出現(xiàn)的原因進(jìn)行檢查。
步驟109,結(jié)束流程。
如果在上述步驟103中,CPU代碼或備份代碼出現(xiàn)了錯(cuò)誤,但在步驟105中對該出現(xiàn)錯(cuò)誤的代碼所進(jìn)行的ECC糾錯(cuò)成功了,最后仍然讀取到了正確的CPU代碼或備份代碼;或者在步驟103中,所讀取的備份代碼并沒有出現(xiàn)錯(cuò)誤,則在步驟109中需要對出現(xiàn)錯(cuò)誤的CPU代碼或該CPU代碼的備份代碼進(jìn)行糾錯(cuò)更新,再結(jié)束流程。所述的對錯(cuò)誤的CPU代碼或該CPU代碼的備份代碼進(jìn)行糾錯(cuò)更新,就是將上述正確的代碼或糾錯(cuò)成功后的代碼覆蓋Nand Flash中該段代碼所對應(yīng)的出現(xiàn)錯(cuò)誤的CPU代碼以及該CPU代碼的備份代碼。
以上所述為在CPU代碼只有一個(gè)備份代碼的情況下讀取CPU代碼的方法。當(dāng)CPU代碼有多個(gè)備份代碼的情況時(shí),所進(jìn)行的處理過程與圖1所示的處理流程相類似。所不同的地方在于,在步驟106中,當(dāng)判斷當(dāng)前所讀取的代碼為備份代碼后,還要判斷該備份代碼是否為最后一個(gè)備份代碼。如果是最后一個(gè)備份代碼,則說明CPU代碼及其所有的備份代碼均出現(xiàn)錯(cuò)誤,因此執(zhí)行步驟108;如果不是最后一個(gè)備份代碼,則執(zhí)行步驟107,讀取下一個(gè)備份代碼,并返回執(zhí)行步驟103。
在Nand Flash中,雖然某個(gè)塊中出現(xiàn)隨機(jī)錯(cuò)誤的概率比較高,但卻很少出現(xiàn)塊與塊之間的關(guān)聯(lián)錯(cuò)誤,因此如果將所需存儲的每一段代碼在NandF1ash中不同的塊中存儲若干個(gè)備份代碼,則當(dāng)某個(gè)塊中的某段代碼出現(xiàn)錯(cuò)誤時(shí),可通過讀取其他塊中相應(yīng)的備份代碼得到正確的代碼,從而極大地提高了系統(tǒng)的穩(wěn)定性。
本發(fā)明的實(shí)施例還提供了一種讀取CPU代碼的裝置。在該裝置中,使用了Nand Flash單元來存儲CPU代碼,并將所存儲的每段CPU代碼都被備份到Nand Flash單元至少一個(gè)不同的塊中,即Nand Flash單元中所存儲的每段CPU代碼都具有一個(gè)以上的備份代碼。
圖2所示為本發(fā)明實(shí)施例中讀取CPU代碼的裝置的結(jié)構(gòu)示意圖,如圖2所示,該裝置包括CPU單元201、緩存單元202、Nand Flash控制單元203和Nand F1ash單元204。
所述CPU單元201可從緩存單元202中直接讀取CPU代碼;也可向Nand Flash控制單元203發(fā)送控制命令,實(shí)現(xiàn)緩存單元202中的CPU代碼的更新。
所述緩存單元202用于存儲直接供CPU調(diào)用的CPU代碼,并將相應(yīng)CPU代碼發(fā)送給CPU單元201;也可接收Nand Flash控制單元203所發(fā)送的CPU代碼,實(shí)現(xiàn)CPU代碼的更新。
所述Nand Flash控制單元203根據(jù)CPU單元201發(fā)送的控制命令向Nand Flash單元204發(fā)送讀取命令,并接收Nand Flash單元204發(fā)送的CPU代碼,然后將接收到的CPU代碼發(fā)送給緩存單元202。所述Nand Flash控制單元203還可向Nand Flash單元204發(fā)送更新后的CPU代碼,實(shí)現(xiàn)NandFlash單元204中相應(yīng)CPU代碼的更新。
所述Nand Flash單元204是系統(tǒng)的存儲器件,其中所存儲的每段CPU代碼都有一個(gè)以上的備份代碼,每個(gè)備份代碼都存儲在Nand Flash單元204不同的塊中,且上述的每段CPU代碼及其備份代碼都有ECC碼。所述NandFlash單元204可根據(jù)Nand Flash控制單元203的讀取命令,將相應(yīng)的代碼發(fā)送給Nand Flash控制單元203。Nand Flash單元204也可根據(jù)Nand Flash控制單元203發(fā)送的更新后的代碼,覆蓋Nand Flash單元204中相應(yīng)的CPU代碼及其備份代碼。
在如上所述的讀取CPU代碼的裝置中,所述Nand Flash控制單元203還需對Nand Flash單元204所發(fā)送的CPU代碼進(jìn)行ECC校驗(yàn),如果校驗(yàn)正確無誤,才能將該CPU代碼發(fā)送給緩存單元202;如果發(fā)生ECC錯(cuò)誤,NandFlash控制單元203將對該CPU代碼做ECC糾錯(cuò),如果糾錯(cuò)成功,則將糾錯(cuò)后的代碼分別發(fā)送給緩存單元202和Nand Flash單元204,Nand Flash單元204根據(jù)接收到的糾錯(cuò)后的代碼覆蓋相應(yīng)的CPU代碼及其備份代碼;如果糾錯(cuò)失敗,則Nand Flash控制單元203重新向Nand Flash單元204發(fā)送讀取命令,從Nand Flash單元204讀取上述發(fā)生錯(cuò)誤的CPU代碼的其他備份代碼,重復(fù)上述檢驗(yàn)步驟,直至將正確的CPU代碼傳輸給緩存單元202,并用正確的CPU代碼更新Nand Flash單元204中的相應(yīng)的CPU代碼及其備份代碼。
綜上所述,本發(fā)明的實(shí)施例提供了一種使用Nand Flash存儲CPU代碼的方法及裝置,通過使用Nand Flash來存儲CPU代碼,并將存儲在NandFlash中的CPU代碼備份到與非閃存中至少一個(gè)不同的塊中,使得當(dāng)NandFlash中出現(xiàn)壞塊時(shí),可讀取Nand Flash中其他塊中的備份CPU代碼,并可根據(jù)備份CPU代碼對出現(xiàn)錯(cuò)誤的CPU代碼進(jìn)行糾錯(cuò),從而可穩(wěn)定可靠地使用Nand Flash來存儲CPU代碼,從而提高了系統(tǒng)的穩(wěn)定性,降低了系統(tǒng)的制造成本。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種讀取CPU代碼的方法,其特征在于,將存儲在與非閃存中的CPU代碼備份到與非閃存中至少一個(gè)不同的塊中,該方法包括當(dāng)從與非閃存中讀取的CPU代碼不正確時(shí),讀取備份代碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述CPU代碼不正確包括所述CPU代碼的錯(cuò)誤檢測和糾錯(cuò)碼不正確。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述讀取備份代碼包括對CPU代碼進(jìn)行錯(cuò)誤檢測和糾錯(cuò),當(dāng)所述錯(cuò)誤檢測和糾錯(cuò)不成功時(shí),讀取備份代碼。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述對CPU代碼進(jìn)行錯(cuò)誤檢測和糾錯(cuò)之后還進(jìn)一步包括當(dāng)所述錯(cuò)誤檢測和糾錯(cuò)成功時(shí),對CPU代碼及其備份代碼進(jìn)行更新。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述讀取備份代碼之后還包括判斷所讀取的備份代碼是否正確,如果備份代碼不正確,則讀取下一個(gè)備份代碼;所述備份代碼不正確包括所述備份代碼的錯(cuò)誤檢測和糾錯(cuò)碼不正確。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述讀取下一個(gè)備份代碼包括對備份代碼進(jìn)行錯(cuò)誤檢測和糾錯(cuò),當(dāng)所述錯(cuò)誤檢測和糾錯(cuò)不成功時(shí),讀取下一個(gè)備份代碼;否則,對CPU代碼及其備份代碼進(jìn)行更新。
7.根據(jù)權(quán)利要求5或6所述的方法,其特征在于,所述讀取下一個(gè)備份代碼包括判斷當(dāng)前所讀取的CPU代碼是否為最后一個(gè)備份代碼,如果是,則報(bào)錯(cuò),結(jié)束流程;否則,讀取下一個(gè)備份代碼。
8.一種讀取CPU代碼的裝置,其特征在于,該裝置包括CPU單元,緩存單元,與非閃存控制單元和與非閃存單元;所述CPU單元從所述緩存單元中讀取CPU代碼,向所述與非閃存控制單元發(fā)送控制命令;所述緩存單元將代碼發(fā)送給所述CPU單元,接收所述與非閃存控制單元發(fā)送的CPU代碼;所述與非閃存控制單元根據(jù)所述CPU單元發(fā)送的控制命令向所述與非閃存單元發(fā)送讀取命令,接收所述與非閃存單元發(fā)送的CPU代碼,將接收到的CPU代碼發(fā)送給所述緩存單元;所述與非閃存單元將所存儲的CPU代碼備份到至少一個(gè)不同的塊中,根據(jù)所述與非閃存控制單元的讀取命令,從塊中讀取CPU代碼,將所讀取的CPU代碼發(fā)送給所述與非閃存控制單元。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,該裝置還包括所述與非閃存控制單元用于對接收到的CPU代碼進(jìn)行錯(cuò)誤檢測和糾錯(cuò)。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,該裝置還包括所述與非閃存控制單元向所述與非閃存單元發(fā)送糾錯(cuò)后的代碼;所述與非閃存單元根據(jù)接收到的所述糾錯(cuò)后的代碼,對備份代碼進(jìn)行更新。
全文摘要
本發(fā)明公開了一種讀取CPU代碼的方法,包括將存儲在與非閃存中的CPU代碼備份到與非閃存中至少一個(gè)不同的塊中,當(dāng)從與非閃存中讀取的CPU代碼不正確時(shí),讀取下一個(gè)備份代碼。本發(fā)明還公開了一種讀取CPU代碼的裝置,該裝置包括CPU單元,緩存單元,與非閃存控制單元和與非閃存單元。使用本發(fā)明所提供的方法及裝置,可穩(wěn)定可靠地使用Nand Flash來存儲CPU代碼,提高系統(tǒng)的穩(wěn)定性,降低制造成本。
文檔編號G06F11/14GK101086715SQ20071011940
公開日2007年12月12日 申請日期2007年7月23日 優(yōu)先權(quán)日2007年7月23日
發(fā)明者張 浩 申請人:北京中星微電子有限公司