專利名稱:安全閃存的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及閃速存儲介質(zhì)的領(lǐng)域。特別地,本發(fā)明涉及以安全方式的閃存可重新編程非易失性存儲介質(zhì)的領(lǐng)域。此外,其還涉及在閃存操作中斷,例如當(dāng)在閃存操作期間掉電時的事件中恢復(fù)閃存的領(lǐng)域。本發(fā)明旨在用于任何計算機系統(tǒng)中,所述計算機系統(tǒng)使用可以被閃存的存儲介質(zhì)。特別地,本發(fā)明可用于光驅(qū)中。
背景技術(shù):
應(yīng)當(dāng)強調(diào)的是,在本說明和權(quán)利要求中貫穿使用的術(shù)語“計算機”是指任何能存儲、檢索和處理數(shù)據(jù)的電子設(shè)備。因此,當(dāng)引用術(shù)語“計算機系統(tǒng)”時,這個術(shù)語是指包括處理裝置、存儲裝置、輸入裝置、輸出裝置和電源的任何系統(tǒng)。由此,當(dāng)包括了處理裝置、存儲裝置、輸入裝置、輸出裝置和電源時,術(shù)語計算機系統(tǒng)旨在包括任何類型的計算機、個人計算機、移動蜂窩電話、智能電話、個人數(shù)字助理(PDA)、電子設(shè)備、用于廚房、清潔和戶外用途的智能電子用具和設(shè)備、消費電子設(shè)備、諸如數(shù)碼相機的成像設(shè)備等等。
此外,應(yīng)當(dāng)強調(diào)的是,貫穿于本說明書和權(quán)利要求,存儲介質(zhì)包括多個段。轉(zhuǎn)而,每個段包括多個塊,每個塊的大小為8千字節(jié)、16千字節(jié)、32千字節(jié)、64千字節(jié)等等。
進而,在下面的說明書和權(quán)利要求中,術(shù)語“包括/包含”應(yīng)當(dāng)被解釋為“包括但不限于…”。即是,當(dāng)在本說明書和權(quán)利要求中貫穿使用時,這個術(shù)語是指所述特征、整數(shù)、部件或步驟的存在,而不排除存在或增加一個或多個特征、整數(shù)、部件或步驟。
在基礎(chǔ)計算機系統(tǒng)中的硬件可如所說的包括五個部件;主存儲裝置、處理裝置、次級存儲裝置、輸入裝置和輸出裝置。主存儲裝置和處理裝置一起形成中央處理裝置,通常稱為CPU(中央處理單元)。CPU是計算機系統(tǒng)最重要的部分,并且在該部分中執(zhí)行程序和數(shù)據(jù)的處理。形成計算機系統(tǒng)多個部分的其它硬件通常被稱為外圍設(shè)備。
計算機系統(tǒng)包括各種類型的存儲裝置,也稱為存儲介質(zhì)。一些存儲介質(zhì)是易失性的,意味著一旦對該存儲介質(zhì)切斷電源,存儲在該存儲介質(zhì)上的代碼或數(shù)據(jù)就丟失。一種已知類型的易失性存儲介質(zhì)是讀/寫存儲器(RWM)。RWM給予用戶改變程序和數(shù)據(jù)或者改變存儲器中數(shù)據(jù)區(qū)域的可能性。
其它存儲介質(zhì)是非易失性的,意味著即使對該存儲介質(zhì)切斷電源,它們也保留其代碼或者數(shù)據(jù)。
存儲介質(zhì)用于各種目的。例如,非易失性存儲介質(zhì),比如動態(tài)隨機存取存儲器(DRAM),或更具體的,同步動態(tài)隨機存取存儲器(SDRAM)通常用作為計算機的主系統(tǒng)存儲器。在引導(dǎo)(即啟動)時,計算機的操作系統(tǒng)被復(fù)制到主系統(tǒng)存儲器并由來自該存儲器的處理器來執(zhí)行。當(dāng)用戶打開應(yīng)用程序時,還從存儲驅(qū)動器(例如,硬盤驅(qū)動器、CD-ROM驅(qū)動器、DVD驅(qū)動器、藍光光盤驅(qū)動器)復(fù)制每個應(yīng)用程序到主系統(tǒng)存儲器以便執(zhí)行,在所述驅(qū)動器上永久地存儲應(yīng)用程序。主系統(tǒng)存儲器還用于臨時存儲數(shù)據(jù)、配置信息和計算機可在操作期間使用的其它類型的信息。
非易失性存儲介質(zhì)用于存儲計算機每次在其通電時執(zhí)行的可執(zhí)行代碼。這種代碼被稱為“固件”。固件被如此稱呼是因為其處于硬件和軟件之間。它包括在可記錄存儲介質(zhì)上存儲的微型程序、程序和例程。通過舉例,大多數(shù)計算機包括可執(zhí)行例程的某種集合,稱為BIOS(基本輸入/輸出系統(tǒng)),其提供對各種輸入/輸出裝置,比如CD-ROM驅(qū)動器、軟盤驅(qū)動器和顯示器的訪問。BIOS代碼通常永久存儲在非易失性存儲介質(zhì),比如ROM(只讀存儲器)、EPROM(可擦除可編程只讀存儲器)、或EEPROM(電可擦除可編程只讀存儲器)上。和ROM相比,從RAM可更快速地取回指令。因此,在計算機的引導(dǎo)過程期間,BIOS代碼被從ROM復(fù)制到計算機的主系統(tǒng)存儲器,并且當(dāng)需要時通過主系統(tǒng)存儲器來執(zhí)行。
另一種可修改的存儲介質(zhì)是閃速存儲器(例如閃速ROM)。這類存儲器適于存儲器的系統(tǒng)內(nèi)重新編程。當(dāng)計算機系統(tǒng)組合可重新編程的非易失性存儲器,比如EEPROM或閃速存儲器時,在操作的同時利用處理器可重新編程計算機系統(tǒng)。
交互地升級和/或更新(即重新編程)指令集合到計算機系統(tǒng)的能量是非常有價值的。例如,公司在每次要重新編程固件時不必要求客戶把計算機系統(tǒng)帶到授權(quán)的服務(wù)中心就可服務(wù)其客戶。
可重新編程的非易失性存儲器的重新編程被稱為“閃存”。存儲器的閃存允許固件被替換,即允許用新的代碼或數(shù)據(jù)來升級和/或更新固件。本領(lǐng)域中已知的是,存儲器的閃存通過首先擦除包括在存儲區(qū)域中的所有代碼或數(shù)據(jù)來執(zhí)行。這意味著存儲區(qū)域中所有比特被置為數(shù)字“1”,這是在擦除存儲器時的標(biāo)準(zhǔn)行為??商鎿Q地,所有比特可置為數(shù)字“0”。在將所有比特置為數(shù)字“1”后,存儲區(qū)域被認(rèn)為是空的。接著,存儲器的更新和/或升級可通過隨后寫入新代碼或數(shù)據(jù)到存儲區(qū)域來完成。
已經(jīng)觀察到一個關(guān)于存儲器閃存的問題。閃存操作要求可執(zhí)行代碼執(zhí)行擦除和隨后的寫入。需要用來執(zhí)行閃存的此代碼通常作為固件的一部分被包括,所述固件包括在要被閃存的存儲器中。駐留在固件中的所述代碼必須在被重寫入之前被擦除。
因此,在閃存操作期間的掉電或任何其它類型的中斷可使存儲介質(zhì)不可用,并因此使計算機系統(tǒng)不可用。通過舉例,例如如果閃速ROM的閃存期間供電失敗,在閃速ROM中首先存儲的代碼丟失,因為閃存過程首先擦除閃速ROM。此時,要升級或更新的代碼從固件中消失,并且由于代碼包含需要用來執(zhí)行閃存的指令,執(zhí)行閃存的機制也丟失了。
經(jīng)歷該問題的閃速ROM可能必須轉(zhuǎn)往廠商的工廠,在這里所需的專用設(shè)備被用來重新編程閃速ROM或者用包含新代碼的閃速ROM來替換該閃速ROM。這個情形對客戶來說是很不期望的和不方便的。進而,還意味著增加了客戶的花費。
在本領(lǐng)域中已知的是,可在供電失敗的情況下確?;謴?fù)閃存過程的簡單方式總是保證某部分的閃速ROM完整無缺,即保持某部分的閃速ROM不可擦除。以如此方式,不可擦除的部分將決不會被新的代碼或數(shù)據(jù)改寫。因此,該部分的閃速ROM得到保護。不可擦除部分還包含在執(zhí)行時將改寫剩余存儲器的代碼。換句話說,不可擦除塊包括執(zhí)行閃存所需的指令。
傳統(tǒng)的閃存部分或存儲器可以是非對稱的,即它們被設(shè)計為具有不同大小的塊。以逐塊為基礎(chǔ)將數(shù)據(jù)寫到這種閃存部分或存儲器。例如,存在兩個8千字節(jié)的塊、一個16千字節(jié)的塊、一個32千字節(jié)的塊和多個64千字節(jié)的塊。8千字節(jié)的塊之一可包含有關(guān)制造商的信息(比如日志類型、計算機的型號等)。16千字節(jié)的塊通常包含受保護的引導(dǎo)代碼,其包括在執(zhí)行時將改寫剩余存儲器的代碼。
用于訪問存儲器任何特殊段的裝置是本領(lǐng)域技術(shù)人員所熟知的。例如,訪問特殊段以便改寫的一種可能方式是讓用戶對于特殊段中的任何地址位置啟動專門的擦除命令字節(jié),即是被更新或升級。例如,在通過向存儲器的FLASH ENABLE引腳提供某個電壓(例如4V等)來使能該引腳的同時啟動該專門的擦除命令。接著執(zhí)行類似的過程以允許向該特殊段寫入,即對于該特殊段啟動專門寫命令字節(jié),同時使能FLASH ENABLE引腳。為閃存選擇存儲器特殊段的其它可能方式在本領(lǐng)域中是熟知的,并且不在這里作進一步討論。然而值得注意到很多方式可以在制造商之間變化。
在上面的例子中,16千字節(jié)的塊通常是完整無缺的部分,其包含閃存操作所需的引導(dǎo)代碼。換句話說,這個塊通常不可被重新編程。
如在US-A-6,308,265中所闡明的,對于制造商來說,非對稱閃存部件或存儲器比對稱的要昂貴很多。即對于制造商來說,只具有多個64千字節(jié)塊的閃存部件比具有不同尺寸塊的閃存部件要便宜。但是,由于必須受“保護”的所需引導(dǎo)代碼通常大約16千字節(jié),因此在制造閃存部件或存儲器時存在必須要考慮的非常重要的權(quán)衡。在制造非對稱閃存部件或存儲器時,有可能定做只包含引導(dǎo)代碼的16千字節(jié)的塊,所述塊必須受到保護。因此,沒有出現(xiàn)浪費的存儲器空間。但是,如前所解釋的,非對稱閃存部件或存儲器是昂貴的。另一方面,當(dāng)制造較便宜的對稱閃存部件或存儲器時,所述閃存部件或存儲器具有多個塊,例如64千字節(jié)大小的塊,這些塊之一必須包含要保護的16千字節(jié)大小的引導(dǎo)代碼。由于引導(dǎo)塊代碼不能被擦除并接著被改寫,如果引導(dǎo)塊代碼在64千字節(jié)塊中被提供,那么這個塊還必須包括其它不能被擦除并接著被改寫的代碼以便最大化可用存儲區(qū)域使用率。可替換地,64千字節(jié)塊的剩余存儲區(qū)域可保持為空并因此被利用。因此,如果引導(dǎo)塊代碼的尺寸是16千字節(jié),那么64千字節(jié)塊的剩余區(qū)域(即48千字節(jié))將要么必須沒有被利用(例如為空)要么具有不能被更新的代碼。
前述的引導(dǎo)塊代碼可被認(rèn)為是BIOS代碼的不可更新部分??筛碌拇a通常與不可更新的引導(dǎo)塊代碼鄰接地放置。雖然可能存在不經(jīng)常被更新的BIOS代碼部分,但是所期望的是也將這個代碼不時地更新。因此,一種用于在允許在閃存BIOS操作期間更新BIOS代碼的同時保護引導(dǎo)塊代碼的可能方法在US-A-6,308,265中提出。引導(dǎo)塊代碼存儲在閃存部件的啟動塊或啟動區(qū)域。接著,引導(dǎo)塊代碼的副本被寫入到閃存部件的另一區(qū)域。接著將引導(dǎo)塊代碼在另一區(qū)域中的映象與引導(dǎo)塊中的引導(dǎo)塊代碼相比較。如果匹配,那么所述引導(dǎo)塊區(qū)域是不受保護的,由此允許引導(dǎo)塊中引導(dǎo)代碼的更新。將引導(dǎo)塊區(qū)域中閃存在BIOS映象中的引導(dǎo)塊代碼與另一區(qū)域中的引導(dǎo)塊代碼的副本相比較,并且如果匹配,那么引導(dǎo)塊區(qū)域中的代碼是受保護的。如果不匹配或者如果供電失敗,利用另一區(qū)域中的引導(dǎo)塊代碼來引導(dǎo)(即重啟)系統(tǒng)。
但是,在US-A-6,308,265中描述的布置存在一些缺點。根據(jù)US-A-6,308,265,存在新舊引導(dǎo)代碼的比較,這意味著新代碼決不會與舊代碼不同。換句話說,引導(dǎo)代碼不是完全可更新的。此外,該布置只考慮到閃存過程期間的保護。而且,存在對標(biāo)記的需要,這轉(zhuǎn)而意味著對額外代碼塊(例如8千字節(jié)或更大)的需要。因此,你在某些情況下需要額外的存儲介質(zhì),比如EEPROM。US-A-6,308,265中描述的布置的又進一步缺點在于,總是存在對將閃存部件的區(qū)域?qū)S糜陂W存過程的需要。這個專用區(qū)域的大小必須至少與引導(dǎo)塊的大小相同,以便完成復(fù)制操作。
存在對一種改進的閃存方法的需要。優(yōu)選地,改進的閃存方法允許以更簡單、更快速和更有效的方式更新和/或升級可重新編程存儲器中的固件,而同時允許安全閃存,其中閃存可在中斷發(fā)生例如掉電時恢復(fù)。優(yōu)選地,改進的閃存方法不需要總是保持需要的引導(dǎo)代碼完整無缺。因此,改進的閃存方法優(yōu)選地還允許更新引導(dǎo)代碼。所期望的是,在完全改寫的情況下完成安全閃存。此外,改進的閃存方法優(yōu)選地當(dāng)在與任何種類的存儲器結(jié)合使用時是成本有效的,而與其是對稱還是非對稱的存儲器無關(guān)。
發(fā)明內(nèi)容
本發(fā)明的目的是提供可重新編程的非易失性存儲介質(zhì)的改進閃存。
該目的已經(jīng)通過規(guī)定閃存重新編程的非易失性存儲介質(zhì)的方法來實現(xiàn)。該方法包括步驟加載閃存代碼到所述存儲介質(zhì)的只閃存區(qū)域,并接著驗證該閃存代碼是否已經(jīng)被正確加載。如果該閃存代碼已經(jīng)被正確加載,那么所述存儲介質(zhì)的代碼段被閃存。接著驗證代碼段是否被正確寫入。如果代碼段沒有被正確寫入,那么再次閃存該代碼段。
該目的還通過規(guī)定計算機可讀程序來實現(xiàn),所述計算機可讀程序包括使計算機執(zhí)行上述閃存方法的程序指令。此外,該目的已經(jīng)通過規(guī)定在其上具有計算機可讀程序的載體來實現(xiàn),所述計算機可讀程序包括使計算機執(zhí)行上述閃存方法的計算機可實現(xiàn)的指令。最后,該目的還通過規(guī)定包括輸入裝置、輸出裝置、存儲裝置和處理裝置的計算機系統(tǒng)來實現(xiàn),其中處理裝置適于根據(jù)上面所述的計算機可讀程序來執(zhí)行計算機可讀程序。
根據(jù)所附的權(quán)利要求,本發(fā)明的優(yōu)點將變?yōu)槊黠@。例如,明顯的是,本發(fā)明的一個主要優(yōu)點在于,其提供了安全閃存,這可以在中斷出現(xiàn)時進行恢復(fù)。此外,明顯的是,總是有可能“重現(xiàn)閃存”可重新編程的非易失性存儲介質(zhì),而不管中斷比如掉電發(fā)生的時間。另一個優(yōu)點在于,本發(fā)明也能夠更新和/或升級執(zhí)行閃存所需的指令。本發(fā)明再一個優(yōu)點在于,其提供了在完全改寫情況下的安全閃存,即改寫要閃存的所有非易失性存儲介質(zhì)。本發(fā)明的又一個優(yōu)點在于,相比于現(xiàn)有技術(shù)其允許更有效和安全性增加的閃存。最后,閃存還在與任何種類的存儲器結(jié)合使用時是成本有效的,而與其是對稱還是非對稱的存儲器無關(guān)。
在下面的討論中,結(jié)合優(yōu)選實施例并參考附圖來進一步描述本發(fā)明,其中圖1說明了基本計算機系統(tǒng)的結(jié)構(gòu)。
圖2說明了根據(jù)本發(fā)明的第一實施例的閃速ROM的結(jié)構(gòu)。
圖3說明了描述根據(jù)本發(fā)明的第一實施例的閃存方法的流程圖。
圖4說明了分別根據(jù)圖4A和4B中的本發(fā)明的第一實施例的不同中斷情形。
圖5說明了根據(jù)本發(fā)明的第二實施例的閃速ROM的結(jié)構(gòu)。
圖6說明了描述根據(jù)本發(fā)明的第二實施例的閃存方法的流程圖。
圖7說明了描述根據(jù)本發(fā)明的第二實施例的閃存方法另外步驟的流程圖,其中該流程圖適合于代碼段包括完整代碼的時候。
具體實施例方式
圖1示出基本計算機系統(tǒng)10的總視圖。從輸入設(shè)備111提供數(shù)據(jù)和程序信息,并且首先將其存儲在次級存儲裝置12、13中。接著,程序由CPU14獲取,CPU14根據(jù)該程序來引導(dǎo)信息流動。例如,數(shù)據(jù)可被提供到計算單元14并被處理,并接著將結(jié)果再次存儲在次級存儲裝置12、13中。當(dāng)該順序處理完成時,通過來自控制單元14的指令,可將處理結(jié)果從次級存儲裝置12、13發(fā)送到輸出裝置112。數(shù)據(jù)總線15、控制總線16和地址總線17互連并在圖1所示的計算機系統(tǒng)10的不同模塊11、12、13和14之間傳輸數(shù)據(jù)。這些總線15、16和17可由大小8比特、16比特、32比特、64比特等來區(qū)別。計算機系統(tǒng)結(jié)構(gòu)可以非常復(fù)雜并包括許多電子部件和子系統(tǒng)。但是,該特定的說明書和權(quán)利要求主要涉及在任何計算機系統(tǒng)中可使用的存儲介質(zhì)的閃存。計算機系統(tǒng)的結(jié)構(gòu)和操作原則因此不用在這里作進一步解釋。進而,所要強調(diào)的是,本領(lǐng)域技術(shù)人員知道這種計算機系統(tǒng)的基本結(jié)構(gòu)和操作原則。
現(xiàn)在將結(jié)合但不限于兩個不同的實施例來描述本發(fā)明。此外,僅為了說明的目的,還將結(jié)合閃速ROM來描述本發(fā)明。所強調(diào)的是,本發(fā)明還可被應(yīng)用于其它類型的可重新編程的非易失性存儲介質(zhì),比如EPROM、EEPROM。
現(xiàn)在將描述本發(fā)明的第一優(yōu)選實施例。圖2示出根據(jù)本發(fā)明的第一實施例的閃速ROM20的結(jié)構(gòu)。該閃速ROM20包括代碼段201和只閃存區(qū)域202。代碼段201包括具有可由處理裝置14執(zhí)行的引導(dǎo)代碼的塊和至少一個具有用于正常操作的代碼的塊。此外,其包括第一閃存代碼,其可由處理裝置14執(zhí)行以使能閃速ROM的閃存。根據(jù)第一實施例,代碼段201還包括具有完整性校驗碼的塊,其被配置為校驗碼段201的完整性。具有引導(dǎo)代碼的塊通常位于代碼段201的開始,而具有完整性校驗碼的塊有利地放置在代碼段201的結(jié)束。只閃存區(qū)域202被配置為包括專門的只閃存固件。該固件可由處理裝置14激活。此外,該固件被配置為只接受最小的功能以使能閃存操作的開始。如此,固件可包括第二閃存代碼,用于使能閃速ROM20的閃存。應(yīng)當(dāng)理解,只閃存區(qū)域被配置為只在閃存操作已經(jīng)由例如掉電中斷時才用于重起。當(dāng)不需要只閃存區(qū)域時,可將其清除,即通過擦除該區(qū)域來清空。這可由本領(lǐng)域中任何一般所知的擦除技術(shù)來完成。因此,只閃存區(qū)域的提供使閃速ROM的閃存能夠被恢復(fù),而與中斷何時發(fā)生無關(guān)。
根據(jù)該第一實施例,處理裝置14至少被配置為執(zhí)行代碼段中的第一閃存代碼,以啟動閃存操作。此外,如果在閃存操作期間出現(xiàn)中斷,那么處理裝置14被配置為通過跳到另一地址來使能閃速ROM的重新閃存。當(dāng)中斷結(jié)束并且供電時,處理裝置被如此配置以激活第二閃存代碼,由此使能閃速ROM的閃存。根據(jù)第一優(yōu)選實施例,處理裝置14還包括隨后描述的看門狗寄存器。
圖3是描述根據(jù)本發(fā)明的第一實施例的閃存方法的流程圖。通常,處理裝置14開始執(zhí)行位于閃速ROM20的代碼段201中固定地址處的引導(dǎo)代碼,當(dāng)例如通過執(zhí)行第一閃存代碼啟動閃速ROM的閃存操作,可假定為升級和/或更新閃速ROM的固件時,在第一步驟310中加載第二閃存代碼到只閃存區(qū)域202。當(dāng)加載,即閃存第二閃存代碼到只閃存區(qū)域202時,將第二閃存代碼寫到只閃存區(qū)域202,以允許閃存代碼段201。在步驟320,驗證第二閃存代碼是否已經(jīng)被正確加載到只閃存區(qū)域202。如果第二閃存代碼沒有在步驟310中被正確加載,則第二閃存代碼將被再次加載到只閃存區(qū)域202。換句話說,將第二閃存代碼加載到只閃存區(qū)域202的步驟將被重試,直到成功加載第二閃存代碼。另一方面,如果在步驟320中,已經(jīng)正確加載第二閃存代碼,則在步驟330中代碼段201可與新的代碼被一起閃存。在步驟340中,驗證新的代碼是否已經(jīng)被正確寫到代碼段201。如果該代碼沒有被滿意地寫入代碼段201,則代碼段201被再次閃存。換句話說,閃存代碼段201的步驟被重試,直到成功閃存代碼段201。當(dāng)代碼被滿意地寫入代碼段201,最終在步驟350中可擦除包括在只閃存區(qū)域202中的第二閃存代碼。因此,本方法在完全改寫的情況下提供了閃存,其中閃速ROM的所有代碼已經(jīng)在完全閃存之后被重寫。
在隨后的討論中,將結(jié)合圖4A和圖4B來解釋多個中斷情形。參考圖4A,如果諸如掉電的中斷在步驟310或320期間發(fā)生,即在加載第二閃存代碼到只閃存區(qū)域202的步驟期間或在驗證第二代碼是否已經(jīng)被正確加載的步驟期間發(fā)生,則閃存操作的執(zhí)行將被中斷。當(dāng)中斷結(jié)束并供電時,在步驟401中開始正常的代碼執(zhí)行。這是因為代碼段201還沒有改變并且包括在代碼段201中的代碼只是正常操作所需的代碼。因此,可在步驟310中重新開始閃存操作。
參考圖4B,如果中斷在步驟330或340中出現(xiàn),即在閃存代碼段201期間或在驗證代碼段201是否已經(jīng)被正確寫入期間出現(xiàn),則閃存操作的執(zhí)行將被中斷。當(dāng)中斷結(jié)束并供電時,在步驟411中開始正常的代碼執(zhí)行。在步驟412中,驗證代碼段201是否包括完整代碼。如果代碼段201包括完整代碼,則在步驟414中繼續(xù)進行代碼的正常執(zhí)行。因此,可在步驟310中重新開始閃存。另一方面,如果代碼段201包括損壞代碼,則在步驟415中將激活用于更新閃存代碼段的第二閃存代碼。因此在步驟310中重新開始閃存操作。
根據(jù)第一實施例的一個優(yōu)選方面,在步驟413中驗證代碼段201是否包括完整代碼包括步驟如果包括在代碼段201中的完整性校驗碼本身沒有損壞,則執(zhí)行該完整性校驗碼。如果代碼段201是完整的,即包括于其中的代碼沒有損壞,看門狗寄存器將被設(shè)置為有效值。此外,看門狗寄存器可由處理裝置14來檢查,并且如果看門狗寄存器沒有被設(shè)置為有效值,則將假設(shè)代碼段損壞。還在步驟412之后的預(yù)定時間內(nèi)執(zhí)行檢查看門狗寄存器的步驟,即在開始正常執(zhí)行代碼的步驟之后。該預(yù)定時間有利地被選擇為小于1秒。在本發(fā)明的范圍內(nèi)不是1秒的預(yù)定時間值當(dāng)然有可能,例如0,5-2,5秒。因此,如果在處理裝置14檢查看門狗寄存器之前看門狗寄存器沒有被設(shè)置為有效值,則將假設(shè)代碼段201包括損壞的代碼。由此,在步驟415中將激活用于更新閃存所述代碼的第二閃存代碼。另一方面,如果看門狗寄存器被及時設(shè)置為有效值,則將假設(shè)代碼段201包括完整代碼并且將因此在步驟414中繼續(xù)進行代碼的正常執(zhí)行。
根據(jù)第一實施例的一個方面,通過首先計算包括在代碼段201中的代碼的校驗和,來完成代碼段201的完整性校驗,并且之后比較該校驗和與表示完整代碼的預(yù)定值。如果校驗和等于預(yù)定值,則假設(shè)代碼段201包括完整代碼。可替換地,可只計算代碼段201的一部分或代碼段201選擇部分(例如最后4個字節(jié))的校驗和,并且之后比較計算的校驗和與表示完整代碼的預(yù)定值。
通過舉例,如果中斷出現(xiàn)在步驟330中,即在閃存代碼段201的步驟期間出現(xiàn),則在代碼段201中不再存在完整代碼。因此,看門狗寄存器將不會及時被設(shè)置為有效值,即不會在處理裝置14檢查看門狗寄存器之前設(shè)置為有效值。因此,處理裝置14將激活只閃存區(qū)域202中的第二閃存代碼,并且閃存操作可因此重新開始。如果中斷出現(xiàn)在步驟340中,即在驗證代碼是否已經(jīng)被正確寫入代碼段201的步驟期間出現(xiàn),則存在兩種可能的情形。當(dāng)代碼段已經(jīng)被滿意地閃存時,將開始代碼的正常執(zhí)行。接著,將執(zhí)行完整性校驗碼。由于代碼段201包括完整代碼,因此看門狗寄存器將被及時設(shè)置為有效值,并接著將繼續(xù)進行代碼的正常執(zhí)行。由此,可在步驟310中重新啟動閃存操作。另一方面,當(dāng)代碼段201包括損壞代碼時,將不會到達完整性校驗碼。由此,看門狗寄存器將不會被設(shè)置為有效值并且第二閃存代碼因此被激活。如果只存在少許損壞的字節(jié),則可到達完整性校驗碼。但是,將因此發(fā)現(xiàn)代碼段201包括損壞代碼??撮T狗寄存器將不會被設(shè)置為有效值,并且第二閃存代碼將被激活。因此,可恢復(fù)閃存操作,由此使能代碼段201的重新閃存。上述情形示出了,無論何時存在掉電或任何其它中斷,恢復(fù)閃存總是可能的。
現(xiàn)在將討論本發(fā)明的第二實施例。圖5示出了根據(jù)本發(fā)明的第二實施例的閃速ROM50的結(jié)構(gòu)。該閃速ROM50包括代碼段501和只閃存區(qū)域502。代碼段501包括具有可由處理裝置14執(zhí)行的引導(dǎo)代碼的塊和至少一個具有用于正常操作的代碼的塊。此外,其包括第一閃存代碼,其可由處理裝置14執(zhí)行以使能閃速ROM的閃存。但是與第一實施例相反,代碼段501不包括具有完整性校驗碼的塊。如第一實施例的情況下,閃速ROM還包括只閃存區(qū)域。只閃存區(qū)域502被配置為包括專門的只閃存固件。該固件可由處理裝置14激活。此外,該固件被配置為只接受最小的功能以使能閃存操作的開始。如此,固件可包括第二閃存代碼,用于使能閃速ROM的閃存。應(yīng)當(dāng)理解,只閃存區(qū)域被配置為只在閃存操作已經(jīng)由例如掉電中斷時才用于重起。當(dāng)不需要只閃存區(qū)域時,可將其清除,即通過擦除該區(qū)域來清空。只閃存區(qū)域502的這種擦除可由本領(lǐng)域中任何一般所知的擦除技術(shù)來完成。只閃存區(qū)域的提供使閃速ROM的閃存能夠被恢復(fù),而與中斷何時發(fā)生無關(guān)。
根據(jù)該第二實施例,處理裝置14適于檢查代碼段501的完整性。這可例如通過計算包括在代碼段中的代碼的校驗和并且將該校驗和與預(yù)定值進行比較來完成,所述預(yù)定值表示了完整的代碼。如果匹配,即校驗和等于該預(yù)定值,則假設(shè)代碼段包括完整的代碼??商鎿Q地,可僅針對代碼段501的一部分或代碼段501的選擇部分(例如后4個字節(jié))來計算校驗和。處理裝置14還被配置為執(zhí)行代碼段中的第一閃存代碼,以便啟動閃存操作。而且,如本發(fā)明第一實施例的情況,處理裝置14被配置為如果中斷在前一閃存操作期間出現(xiàn),則通過跳到另一地址來使能閃速ROM的重閃存。當(dāng)中斷結(jié)束并且供電時,處理裝置被如此配置為激活第二閃存代碼,由此使能閃速ROM的閃存。
圖6和圖7是兩個流程圖,描述根據(jù)本發(fā)明第二實施例的閃存方法。通常,處理裝置14開始執(zhí)行位于代碼段501中固定地址處的引導(dǎo)代碼。但是,根據(jù)第二實施例,處理裝置14將首先在步驟610驗證代碼段501是否包括完整代碼。
如果在步驟610驗證了代碼段501包括完整代碼,則在步驟620中繼續(xù)進行代碼的正常執(zhí)行。參考圖7,接著從步驟710啟動閃存。因此,當(dāng)例如通過執(zhí)行第一閃存代碼來稍后啟動閃速ROM50的閃存,可假定為升級和/或更新閃速ROM50的固件時,在步驟710中加載第二閃存代碼到只閃存區(qū)域502。當(dāng)加載,即閃存第二閃存代碼到只閃存區(qū)域502時,將第二閃存代碼寫到只閃存區(qū)域502,以允許閃存代碼段501。在步驟720,驗證第二閃存代碼是否已經(jīng)被正確加載到只閃存區(qū)域502。如果第二閃存代碼沒有在步驟710中被正確加載,則第二閃存代碼將被再次加載到只閃存區(qū)域502。換句話說,將第二閃存代碼加載到只閃存區(qū)域502的步驟將被重試,直到成功加載第二閃存代碼。當(dāng)已經(jīng)正確加載第二閃存代碼時,則在步驟730中代碼段501可與新的代碼被一起閃存。在步驟740中,接著驗證新的代碼是否已經(jīng)被正確寫到代碼段501。如果該代碼沒有被滿意地寫入代碼段501,則代碼段501被再次閃存。換句話說,閃存代碼段501的步驟被重試,直到成功閃存代碼段501。當(dāng)代碼被滿意地寫入代碼段501,最終在步驟750中可擦除包括在只閃存區(qū)域502中的第二閃存代碼。
當(dāng)在步驟610中驗證代碼段501包括不完整的代碼,即損壞代碼時,將不繼續(xù)進行代碼的正常執(zhí)行。相反,第二閃存代碼將在步驟630中被激活,并且在步驟640中代碼段501將隨后被閃存。在后續(xù)的步驟650,驗證閃存是否滿意,即代碼是否已經(jīng)被正確地寫入代碼段501。如果代碼還沒有被正確地寫入代碼段501,則代碼段501被再次閃存。換句話說,閃存代碼段501的步驟將被重試,直到成功閃存代碼段501。當(dāng)驗證了代碼被滿意地寫入代碼段501,包括在只閃存區(qū)域502的第二閃存代碼最終在步驟660中被擦除。
根據(jù)第二實施例的一個優(yōu)選方面,驗證在步驟650中代碼段501是否被正確寫入是通過將包括在另一存儲介質(zhì)中的代碼與已經(jīng)寫入代碼段501中的代碼相比較來完成的,所述另一存儲介質(zhì)中的代碼包括應(yīng)當(dāng)寫入代碼段501的代碼。另一存儲介質(zhì)優(yōu)選地為RAM。根據(jù)上述討論,可以清楚,本發(fā)明的第二實施例也在完全改寫的情況下提供了閃存,其中閃速ROM50的所有代碼已經(jīng)在完全閃存之后被重寫。
在下面的討論中,將解釋多個中斷情形。
如果中斷在步驟630或640中出現(xiàn),即在激活閃存代碼期間或在閃存代碼段501期間出現(xiàn),則閃存操作的執(zhí)行將被中斷。當(dāng)中斷結(jié)束并供電時,處理裝置14將在步驟610重新開始并經(jīng)由完整性校驗來檢測代碼段501的損壞。因此,第二閃存代碼將在步驟630中被激活,由此允許在步驟640中閃存代碼段501。
如果中斷在步驟650中出現(xiàn),即驗證代碼段501是否已經(jīng)被正確寫入的步驟中出現(xiàn),閃存操作的執(zhí)行將被中斷?,F(xiàn)在,存在兩種可能性。當(dāng)中斷結(jié)束并且供電時,該過程將在步驟610中以完整性校驗來開始。如果代碼段501被滿意地閃存,則代碼的正常執(zhí)行將在步驟620中開始,這是因為代碼段包括完整代碼。因此,閃存可接著從步驟710被重新啟動。如果代碼段501沒有被滿意地閃存,則在步驟630中激活第二閃存代碼,由此允許在步驟640中閃存代碼段501。
如果中斷出現(xiàn)在步驟710或720期間,即加載第二閃存代碼到只閃存區(qū)域502期間或在驗證第二閃存代碼是否被正確加載期間,將中斷閃存操作的執(zhí)行。當(dāng)中斷結(jié)束并且供電時,處理裝置14將在步驟610重新開始完整性校驗。在步驟610將確定代碼段501包括完整代碼。這是因為代碼段501還沒有改變。因此根據(jù)步驟620來繼續(xù)進行代碼的正常操作。閃存因此可從步驟710重新啟動。
如果中斷出現(xiàn)在步驟730中,即閃存代碼段501的步驟中,則閃存操作的執(zhí)行將被中斷。當(dāng)中斷結(jié)束并且供電時,該過程將在步驟610重新開始完整性校驗。在步驟610中,將確定代碼段501包括損壞的代碼。因此,第二閃存代碼將在步驟630中激活,由此允許在步驟640中閃存代碼段501。
如果中斷出現(xiàn)在步驟740中,即驗證代碼是否被正確寫入代碼段501的步驟中,則閃存操作的執(zhí)行將被中斷。當(dāng)中斷結(jié)束并且供電時,該過程將在步驟610重新開始完整性校驗?,F(xiàn)在,存在兩種可能性。如果代碼段501在步驟730中被滿意閃存,則在步驟620中開始代碼的正常執(zhí)行,這是因為代碼段501包括完整代碼。因此,閃存可從步驟710重新啟動。如果代碼段501沒有被滿意地閃存,即代碼段501包括損壞的代碼,則將在步驟610中驗證代碼段501的損壞。因此根據(jù)本發(fā)明的第二實施例,包括在只閃存區(qū)域502中的第二閃存代碼將在步驟630中被激活,由此允許在步驟640中閃存代碼段501。
上述情形示出了根據(jù)第二實施例,無論何時存在掉電或任何其它中斷,恢復(fù)閃存總是可能的。
根據(jù)本發(fā)明的一個方面,驗證閃存代碼是否已經(jīng)被正確加載的步驟是通過將包括在另一存儲介質(zhì)中的代碼與已經(jīng)加載到只閃存區(qū)域的閃存代碼相比較來完成的,所述包括在另一存儲介質(zhì)中的代碼包括應(yīng)當(dāng)加載到只閃存區(qū)域的代碼,所述另一存儲介質(zhì)例如為RAM。
根據(jù)本發(fā)明的又一個方面,驗證代碼段是否已經(jīng)被正確寫入的步驟是通過將包括在另一存儲介質(zhì)中的代碼與已經(jīng)寫入代碼段中的代碼相比較來完成的,所述包括在另一存儲介質(zhì)中的代碼包括應(yīng)當(dāng)已經(jīng)寫入代碼段中的代碼,所述另一存儲介質(zhì)例如為RAM。
前述的比較步驟優(yōu)選地可通過執(zhí)行逐字節(jié)的比較來完成。這是通過比較二進制字來完成,并確定所比較的字節(jié)是否彼此相等。如果這些字節(jié)彼此相等,則假設(shè)另一存儲介質(zhì)中的代碼對應(yīng)于非易失性存儲介質(zhì)中的代碼??商鎿Q地,可能對另一存儲介質(zhì)中的代碼計算第一校驗和,并且對非易失性存儲介質(zhì)中的代碼計算第二校驗和。此后,比較這些校驗和。如果這些校驗和彼此相等,則假設(shè)另一存儲介質(zhì)中的代碼對應(yīng)于非易失性存儲介質(zhì)中的代碼。此外,進一步的替換是,對非易失性存儲介質(zhì)中的代碼計算校驗和,并將該校驗和與預(yù)定值比較,該預(yù)定值表示應(yīng)當(dāng)被寫入非易失性存儲介質(zhì)的代碼。
盡管為了完整公開,討論集中在本發(fā)明的兩個優(yōu)選實施例,但是所附權(quán)利要求不限于此,而應(yīng)被理解為應(yīng)用對于所有本領(lǐng)域技術(shù)人員可能出現(xiàn)的所有修改和可替換構(gòu)造,這都很好地落入在這里所述的基礎(chǔ)內(nèi)。例如,包括使計算機執(zhí)行該說明書中描述的方法的程序指令的計算機程序,可被理解為落入本公開的范圍內(nèi)。并且,在其上具有包括使計算機執(zhí)行該說明書中描述的方法的計算機可實現(xiàn)指令的計算機程序的不同類型的載體,可被理解為落入本公開的范圍內(nèi)。因此,比如固件、記錄介質(zhì)、計算機存儲器、只讀存儲器或電載波信號等任何載體也可被理解為落入本公開的范圍內(nèi)。盡管說明集中在閃速ROM,本發(fā)明還可連同其它可重新編程的非易失性存儲介質(zhì),比如EPROM或EEPROM來使用。
本發(fā)明可/應(yīng)當(dāng)尤其用于光盤驅(qū)動器。有益地,可在PHILIPSSEMICONDUCTORS的“dataref5”參考設(shè)計中使用。存在許多可/應(yīng)當(dāng)使用本發(fā)明的可能應(yīng)用。例如,其在諸如個人計算機、移動蜂窩電話、智能電話、個人數(shù)字助理(PDA)、電子設(shè)備、用于廚房、清潔和戶外用途的智能電子用具和設(shè)備、消費電子設(shè)備、諸如數(shù)碼相機的成像設(shè)備等等的應(yīng)用中可/應(yīng)當(dāng)被使用,當(dāng)這些應(yīng)用使用了可重新編程的非易失性存儲介質(zhì)時。因此,包括輸入裝置、輸出裝置、存儲裝置和處理裝置的所有應(yīng)用,并且其中處理裝置適于執(zhí)行包括使應(yīng)用執(zhí)行該說明書中描述的方法的程序指令的計算機程序,可被理解為落入本公開的范圍內(nèi)。最后強調(diào)的是,隨后所附權(quán)利要求中使用的參考標(biāo)記不被理解為限制本發(fā)明的范圍。
權(quán)利要求
1.一種閃存可重新編程的非易失性存儲介質(zhì)的方法,其中該方法包括步驟加載(310)閃存代碼到所述存儲介質(zhì)的只閃存區(qū)域;驗證(320)該閃存代碼是否已經(jīng)被正確加載;如果是閃存(330)所述存儲介質(zhì)的代碼段;和驗證(340)代碼段是否已經(jīng)被正確寫入;如果代碼段沒有被正確寫入,那么再次閃存該代碼段。
2.根據(jù)權(quán)利要求1的方法,其中如果閃存代碼沒有被正確加載,那么該方法還包括步驟再次加載(310)閃存代碼到只閃存區(qū)域。
3.根據(jù)權(quán)利要求1或2的方法,其中如果代碼段已經(jīng)被正確寫入,那么該方法還包括步驟擦除(350)只閃存區(qū)域中的閃存代碼。
4.根據(jù)權(quán)利要求1到3中任意一個的方法,其中當(dāng)在加載所述閃存代碼的步驟期間或在驗證閃存代碼是否已經(jīng)被正確加載的步驟期間該方法被中斷后,該方法還包括步驟重啟(401)代碼的正常執(zhí)行。
5.根據(jù)權(quán)利要求1到4中任意一個的方法,其中當(dāng)在閃存所述代碼段的步驟期間或在驗證代碼段是否已經(jīng)被正確寫入的步驟期間該方法被中斷后,該方法還包括步驟重啟(411)代碼的正常執(zhí)行;和驗證(412)代碼段是否包括完整的代碼,如果沒有包括完整的代碼,則激活(414)用于重新閃存所述代碼段的閃存代碼;否則繼續(xù)進行(413)代碼的正常執(zhí)行。
6.根據(jù)權(quán)利要求5的方法,其中驗證代碼段是否包括完整的代碼的步驟包括步驟如果代碼段中的完整性校驗碼沒有被破壞,則執(zhí)行所述完整性校驗碼,由此檢查包括在所述代碼段中代碼的完整性;如果代碼段是完整的,則將看門狗寄存器設(shè)置為有效值;在重啟代碼的正常執(zhí)行的步驟之后,在預(yù)定時間內(nèi)檢查看門狗寄存器。
7.根據(jù)權(quán)利要求6的方法,其中該方法還包括步驟在看門狗寄存器有效時,繼續(xù)進行代碼的正常操作;否則激活用于重新閃存所述代碼段的閃存代碼。
8.根據(jù)權(quán)利要求6或7的方法,其中檢查包括在所述代碼段中代碼的完整性的步驟包括步驟計算包括在代碼段中代碼的校驗和,并且將該校驗和與預(yù)定值比較,所述預(yù)定值表示完整的代碼。
9.根據(jù)權(quán)利要求1的方法,其中在加載閃存代碼的步驟之前,該方法還包括步驟驗證(610)代碼段是否包括完整的代碼,如果其不是完整的,則激活(630)閃存代碼并閃存(640)代碼段。
10.根據(jù)權(quán)利要求9的方法,其中驗證代碼段是否包括完整代碼的步驟包括步驟計算包括在代碼段中代碼的校驗和,并且將該校驗和與預(yù)定值比較,所述預(yù)定值表示完整的代碼。
11.根據(jù)權(quán)利要求9或10的方法,其中該方法還包括步驟驗證(650)代碼段是否已經(jīng)被正確寫入;如果沒有,則再次閃存(640)該代碼段。
12.根據(jù)權(quán)利要求11的方法,其中驗證代碼段是否已經(jīng)被正確寫入的步驟包括步驟將包括在另一個存儲介質(zhì)中的代碼與已經(jīng)被寫入代碼段中的代碼相比較,其中另一個存儲介質(zhì)中的代碼包括應(yīng)當(dāng)被寫入到代碼段中的代碼。
13.根據(jù)權(quán)利要求11或12的方法,其中如果代碼段已經(jīng)被正確寫入,那么該方法還包括步驟擦除(660)只閃存區(qū)域中的閃存代碼。
14.根據(jù)權(quán)利要求9的方法,其中如果代碼段包括完整的代碼,該方法包括步驟繼續(xù)進行(620)代碼的正常執(zhí)行。
15.根據(jù)權(quán)利要求9到14中任意一個的方法,其中在方法已經(jīng)被中斷后,該方法重啟步驟根據(jù)權(quán)利要求9來驗證(610)代碼段是否包括完整的代碼。
16.根據(jù)權(quán)利要求9到15中任意一個的方法,其中驗證閃存代碼是否已經(jīng)被正確加載的步驟包括步驟將包括在另一個存儲介質(zhì)中的代碼與已經(jīng)被加載到只閃存區(qū)域的閃存代碼相比較,其中另一個存儲介質(zhì)中的代碼包括應(yīng)當(dāng)被加載到只閃存區(qū)域的代碼。
17.根據(jù)權(quán)利要求1到16中任意一個的方法,其中驗證代碼段是否已經(jīng)被正確寫入的步驟包括步驟將包括在另一個存儲介質(zhì)中的代碼與已經(jīng)被寫入代碼段中的代碼相比較,其中另一個存儲介質(zhì)中的代碼包括應(yīng)當(dāng)被寫入到代碼段中的代碼。
18.根據(jù)權(quán)利要求16或17的方法,其中比較步驟按如下執(zhí)行執(zhí)行逐字節(jié)比較。
19.根據(jù)權(quán)利要求16或17的方法,其中比較步驟按如下執(zhí)行計算另一個存儲介質(zhì)中代碼的第一校驗和;計算非易失性存儲介質(zhì)中代碼的第二校驗和;比較第一和第二校驗和。
20.根據(jù)權(quán)利要求16或17的方法,其中比較步驟按如下執(zhí)行計算非易失性存儲介質(zhì)中代碼的校驗和;將該校驗和與預(yù)定值比較,所述預(yù)定值表示應(yīng)當(dāng)被寫入非易失性存儲介質(zhì)中的代碼。
21.根據(jù)權(quán)利要求1到20中任意一個的方法,其中中斷是掉電。
22.一種計算機可讀程序,包括使計算機執(zhí)行權(quán)利要求1到21中任意一個的方法的程序指令。
23.一種在其上具有計算機可讀程序的載體,所述計算機可讀程序包括使計算機執(zhí)行權(quán)利要求1到21的方法的計算機可實現(xiàn)的指令。
24.根據(jù)權(quán)利要求23的載體,其中所述載體是固件、記錄介質(zhì)、計算機存儲器、只讀存儲器或電子載波信號。
25.根據(jù)權(quán)利要求23的載體,其中所述載體是可重新編程的非易失性存儲介質(zhì)。
26.根據(jù)權(quán)利要求23的載體,其中所述可重新編程的非易失性存儲介質(zhì)是EPROM、EEPROM或閃速ROM。
27.一種包括輸入裝置、輸出裝置、存儲裝置和處理裝置的計算機系統(tǒng),其中所述處理裝置適于執(zhí)行根據(jù)權(quán)利要求22的計算機可讀程序。
全文摘要
根據(jù)本發(fā)明,當(dāng)啟動閃存時,加載(310)閃存代碼到可重新編程的非易失性存儲介質(zhì)的只閃存區(qū)域。接著,驗證(320)該閃存代碼是否已經(jīng)被正確加載到只閃存區(qū)域。如果閃存代碼還沒有被正確加載,則再次加載(310)閃存代碼到只閃存區(qū)域。當(dāng)已經(jīng)正確加載閃存代碼時,在下一步中用新的代碼閃存(330)所述可重新編程的非易失性存儲介質(zhì)的代碼段。之后,驗證(340)新的代碼是否被正確寫入到代碼段。如果代碼沒有被滿意地寫入到代碼段,那么再次閃存(330)該代碼段。
文檔編號G06F11/14GK1977244SQ200580022110
公開日2007年6月6日 申請日期2005年6月23日 優(yōu)先權(quán)日2004年6月29日
發(fā)明者A·F·W·古德德博爾加德, J·F·P·-M·弗林茨 申請人:皇家飛利浦電子股份有限公司