專(zhuān)利名稱(chēng)::處理從非易失性存儲(chǔ)器進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤的制作方法
技術(shù)領(lǐng)域:
:本公開(kāi)涉及處理從非易失性存儲(chǔ)器進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤。
背景技術(shù):
:NAND閃存以及其它類(lèi)型的非易失性存儲(chǔ)器(“NVM”)被普遍用在電子設(shè)備中以用于大容量存儲(chǔ)。例如,消費(fèi)電子設(shè)備,諸如便攜式媒體播放器,常常包括NAND閃存以存儲(chǔ)音樂(lè)、視頻以及其它媒體程序。當(dāng)電子設(shè)備正在加電或重啟時(shí),操作系統(tǒng)可以從電子設(shè)備的NVM引導(dǎo)。操作系統(tǒng)的引導(dǎo)可以分多個(gè)步驟進(jìn)行。例如,電子設(shè)備可以被配置為首先將引導(dǎo)程序(bootloader)從NVM或掩模型只讀存儲(chǔ)器(“ROM”)裝入易失性存儲(chǔ)器。電子設(shè)備然后可以使用引導(dǎo)程序?qū)⒉僮飨到y(tǒng)及相關(guān)聯(lián)的固件從NVM裝入到易失性存儲(chǔ)器。在某些情況下,當(dāng)設(shè)備正在引導(dǎo)時(shí),NVM中可能發(fā)生錯(cuò)誤。如果這樣的錯(cuò)誤不被糾正,這些錯(cuò)誤可能導(dǎo)致數(shù)據(jù)丟失或使設(shè)備無(wú)法工作。
發(fā)明內(nèi)容提供了用于處理從非易失性存儲(chǔ)器(NVM)(諸如NAND閃存)進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤的系統(tǒng)和方法。在設(shè)備可能只能從NVM讀取數(shù)據(jù)的設(shè)備引導(dǎo)期間,電子設(shè)備可以使用易失性存儲(chǔ)器中的錯(cuò)誤日志來(lái)記錄錯(cuò)誤通知。例如,當(dāng)電子設(shè)備正在從NVM引導(dǎo)時(shí),設(shè)備的NVM接口能夠檢測(cè)錯(cuò)誤并在錯(cuò)誤日志中存儲(chǔ)一個(gè)或多個(gè)錯(cuò)誤通知。然后,一旦設(shè)備完成了引導(dǎo)并且到達(dá)了能夠?qū)υO(shè)備進(jìn)行寫(xiě)入的狀態(tài),設(shè)備的NVM驅(qū)動(dòng)器就可被配置為利用該錯(cuò)誤日志來(lái)糾正先前檢測(cè)到的錯(cuò)誤。結(jié)合附圖考慮下面的詳細(xì)描述后,本發(fā)明的上述和其它方面及優(yōu)點(diǎn)將變得更加明顯,在所有附圖中,類(lèi)似的附圖標(biāo)記表示類(lèi)似的部件,其中圖1是根據(jù)本發(fā)明的各種實(shí)施例配置的電子設(shè)備的示意性框圖;圖2是根據(jù)本發(fā)明的各種實(shí)施例的電子設(shè)備引導(dǎo)的圖示;圖3是根據(jù)本發(fā)明的各種實(shí)施例,用于處理在設(shè)備引導(dǎo)期間的錯(cuò)誤的示意性過(guò)程的流程圖。具體實(shí)施例方式提供了用于處理從非易失性存儲(chǔ)器(“NVM”)進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤的系統(tǒng)和方法。為了防止固件故障和避免數(shù)據(jù)丟失,電子設(shè)備的NVM接口可被配置為在設(shè)備正在引導(dǎo)時(shí)檢測(cè)錯(cuò)誤并在易失性存儲(chǔ)器中維護(hù)錯(cuò)誤日志。在該階段,電子設(shè)備可以工作在只讀環(huán)境(read-onlycontext)下。如這里所使用的,“只讀環(huán)境”可以指電子設(shè)備不能對(duì)NVM執(zhí)行寫(xiě)入從而也不能糾正NVM中檢測(cè)到的任何錯(cuò)誤的工作狀態(tài)。CN102385535A說(shuō)明書(shū)2/7頁(yè)然后,一旦電子設(shè)備已經(jīng)進(jìn)入了可寫(xiě)環(huán)境(例如,設(shè)備引導(dǎo)已經(jīng)完成),電子設(shè)備的NVM啟動(dòng)器就可以被配置為利用錯(cuò)誤日志來(lái)糾正檢測(cè)到的錯(cuò)誤。如這里所使用的,“可寫(xiě)環(huán)境”可以指電子設(shè)備的一個(gè)或多個(gè)部件能夠?qū)VM執(zhí)行寫(xiě)入操作的工作狀態(tài)。因此,一旦設(shè)備已經(jīng)進(jìn)入了可寫(xiě)環(huán)境,NVM驅(qū)動(dòng)器就可以將數(shù)據(jù)移動(dòng)到更可靠的區(qū)塊和/或停用(retire)接近故障的區(qū)塊。從而,存儲(chǔ)在設(shè)備上的固件能夠使用更長(zhǎng)的時(shí)間段而無(wú)需任何更新,并且致命錯(cuò)誤的發(fā)生也可以減少。圖1示出電子設(shè)備100的框圖。在某些實(shí)施例中,電子設(shè)備100可以是或可以包括便攜式媒體播放器(例如,Cupertino,CA的AppleInc.的產(chǎn)品iPod)、蜂窩電話(huà)(例如,AppleInc.的產(chǎn)品iPhone)、口袋大小的個(gè)人計(jì)算機(jī)、個(gè)人數(shù)字助理(“PDA”)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、以及任何其它適當(dāng)類(lèi)型的電子設(shè)備。電子設(shè)備100可以包括系統(tǒng)級(jí)芯片(system-on-a-chip/'SoC”)110和非易失性存儲(chǔ)器(“NVM”)120。NVM120可以包括基于浮柵或電荷捕捉技術(shù)的NAND閃存、NOR閃存、可擦可編程只讀存儲(chǔ)器(“EPR0M”)、電可擦可編程只讀存儲(chǔ)器(“EEPR0M”)、鐵電RAM(“FRAM”)、磁阻RAM(“MRAM”)、或它們的任何組合。NVM120可以被組織為“區(qū)塊”,區(qū)塊是最小的可擦除單元,并且可被進(jìn)一步組織為“頁(yè)面”,頁(yè)面可以是最小的可編程或讀取的單元。在某些實(shí)施例中,NVM120可以包括多個(gè)集成電路,每個(gè)集成電路可以具有多個(gè)區(qū)塊。來(lái)自相應(yīng)集成電路的區(qū)塊(例如,具有相同位置或區(qū)塊號(hào)的區(qū)塊)可以形成“超級(jí)塊”。NVM120的每個(gè)存儲(chǔ)單元(memorylocation)(例如頁(yè)面或區(qū)塊)可以使用物理地址(例如,物理頁(yè)面地址或物理區(qū)塊地址)來(lái)引用。系統(tǒng)級(jí)芯片110可以包括SoC控制電路112、存儲(chǔ)器114、以及NVM接口116。SoC控制電路112可以控制SoC110以及SoC110或設(shè)備100的其它部件的一般操作和功能。例如,響應(yīng)于用戶(hù)輸入和/或應(yīng)用或操作系統(tǒng)的指令,SoC控制電路112可以向NVM接口116發(fā)出讀或?qū)懨?,以從NVM120獲得數(shù)據(jù)或者在NVM120中存儲(chǔ)數(shù)據(jù)。為了清楚起見(jiàn),SoC控制電路112可請(qǐng)求以便存儲(chǔ)或檢索的數(shù)據(jù)可以被稱(chēng)為“用戶(hù)數(shù)據(jù)”,盡管該數(shù)據(jù)可能不直接與用戶(hù)或用戶(hù)應(yīng)用相關(guān)聯(lián)。更確切地,用戶(hù)數(shù)據(jù)可以是由SoC控制電路112(例如,通過(guò)應(yīng)用或操作系統(tǒng))生成或獲得的任何適當(dāng)?shù)臄?shù)字信息序列。SoC控制電路112可以包括硬件、軟件和固件的任何組合,以及操作以驅(qū)動(dòng)電子設(shè)備100的功能的任何部件、電路或邏輯。例如,SoC控制電路112可以包括在存儲(chǔ)在NVM120或存儲(chǔ)器114中的軟件/固件的控制下工作的一個(gè)或多個(gè)處理器。SoC控制電路112可以在程序的控制下工作,所述程序諸如應(yīng)用、操作系統(tǒng)、NVM驅(qū)動(dòng)器117、或裝入存儲(chǔ)器114中的引導(dǎo)程序。存儲(chǔ)器114可以包括任何適當(dāng)類(lèi)型的易失性存儲(chǔ)器,諸如隨機(jī)存取存儲(chǔ)器(“RAM”)(例如,靜態(tài)RAM(“SRAM”)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(“DRAM”)、同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(“SDRAM”)、雙倍數(shù)據(jù)率(“DDR”)RAM)、高速緩沖存儲(chǔ)器、只讀存儲(chǔ)器(“ROM”)、或它們的任何組合。存儲(chǔ)器114可包括可臨時(shí)存儲(chǔ)要編程到非易失性存儲(chǔ)器120中或者要從非易失性存儲(chǔ)器120中讀取的用戶(hù)數(shù)據(jù)的數(shù)據(jù)源。在某些實(shí)施例中,存儲(chǔ)器114可充當(dāng)被實(shí)現(xiàn)為SoC控制電路112的一部分的任何處理器的主存儲(chǔ)器。此外,存儲(chǔ)器114的一個(gè)或多個(gè)部分可被用于存儲(chǔ)在設(shè)備引導(dǎo)期間使用的錯(cuò)誤日志、操作系統(tǒng)、以及相關(guān)的固件和內(nèi)核。NVM接口116可以包括硬件、軟件和/或固件的任何適當(dāng)組合,其被配置為充當(dāng)NVM120與操作系統(tǒng)、應(yīng)用、引導(dǎo)程序、或其它由SoC控制電路112執(zhí)行的非特定于存儲(chǔ)器或非特定于廠(chǎng)商的程序之間的接口或驅(qū)動(dòng)器。對(duì)于包括在NVM接口116中的任何軟件模塊,相應(yīng)的程序代碼可以存儲(chǔ)在NVM120或存儲(chǔ)器114中。NVM接口116可以執(zhí)行多種功能,其允許SoC控制電路112訪(fǎng)問(wèn)NVM120以及管理NVM120的存儲(chǔ)單元(例如,頁(yè)面、區(qū)塊、超級(jí)塊、集成電路)和存儲(chǔ)在其中的數(shù)據(jù)(例如,用戶(hù)數(shù)據(jù))。例如,NVM接口116可以解釋來(lái)自SoC控制電路112的讀或?qū)懨睿瑘?zhí)行耗損均衡(wearleveling),以及生成與NVM120的總線(xiàn)協(xié)議兼容的讀和程序指令。NVM接口116可以包括NVM驅(qū)動(dòng)器117和總線(xiàn)控制器118。NVM驅(qū)動(dòng)器117可以包括用于解釋來(lái)自程序的存儲(chǔ)器訪(fǎng)問(wèn)命令的特定于NVM或特定于廠(chǎng)商的軟件和/或固件。在某些實(shí)施例中,NVM驅(qū)動(dòng)器117可以包括提供對(duì)NVM120不同部分的訪(fǎng)問(wèn)的多個(gè)軟件模塊或驅(qū)動(dòng)器。例如,NVM驅(qū)動(dòng)器117可以包括區(qū)塊設(shè)備驅(qū)動(dòng)器,用于通過(guò)文件系統(tǒng)提供對(duì)NVM120中至少一些存儲(chǔ)單元的訪(fǎng)問(wèn)。此外,NVM驅(qū)動(dòng)器117可包括單獨(dú)的非易失性預(yù)引導(dǎo)存儲(chǔ)驅(qū)動(dòng)器(例如,掩模型ROM),用于提供對(duì)存儲(chǔ)在NVM120中其它存儲(chǔ)單元中的非易失性預(yù)引導(dǎo)信息(例如,電子設(shè)備100在引導(dǎo)過(guò)程中使用的信息)的訪(fǎng)問(wèn)。NVM驅(qū)動(dòng)器117可以進(jìn)一步包括各種軟件模塊或驅(qū)動(dòng)器,以便在例如操作系統(tǒng)和NVM120之間提供分層的軟件接口。NVM驅(qū)動(dòng)器117可包括較低級(jí)的軟件模塊,其與NVM120進(jìn)行接口,并且從NVM驅(qū)動(dòng)器117的較高級(jí)的軟件模塊、操作系統(tǒng)和任何應(yīng)用中抽象掉NVM120的細(xì)節(jié)。較低級(jí)的軟件模塊可以包括,例如,將NVM120的區(qū)塊分組為供較高級(jí)的軟件模塊使用的超級(jí)塊的驅(qū)動(dòng)器。較低級(jí)的軟件模塊還可以包括非易失性預(yù)引導(dǎo)存儲(chǔ)驅(qū)動(dòng)器。在某些實(shí)施例中,NVM驅(qū)動(dòng)器117可以被配置在只讀環(huán)境中,在只讀環(huán)境中,驅(qū)動(dòng)器117能夠提供對(duì)NVM120的只讀訪(fǎng)問(wèn)。只讀環(huán)境可以實(shí)現(xiàn)較小的軟件模塊和較快的速度。因此,這種環(huán)境可以在設(shè)備引導(dǎo)期間使用,在設(shè)備引導(dǎo)期間,對(duì)NVM120進(jìn)行寫(xiě)入通常是不必要的。在其它一些實(shí)施例中,NVM驅(qū)動(dòng)器117可以被配置在可寫(xiě)環(huán)境中,在可寫(xiě)環(huán)境中,NVM驅(qū)動(dòng)器117可以指示總線(xiàn)控制器118執(zhí)行對(duì)NVM120的一個(gè)或多個(gè)寫(xiě)入。具體地,當(dāng)在可寫(xiě)環(huán)境下工作時(shí),NVM驅(qū)動(dòng)器117可以運(yùn)行被編譯用于電子設(shè)備100的可寫(xiě)環(huán)境的軟件模塊??偩€(xiàn)控制器118可以包括使NVM驅(qū)動(dòng)器117能夠使用NVM120的總線(xiàn)規(guī)格(例如,數(shù)據(jù)率)訪(fǎng)問(wèn)NVM120的任何適當(dāng)?shù)挠布考?。在圖1中未示出的一些實(shí)施例中,NVM驅(qū)動(dòng)器117和/或總線(xiàn)控制器118可以被實(shí)現(xiàn)在用于NVM120的一個(gè)單獨(dú)的存儲(chǔ)器控制器(例如,閃存控制器)中,諸如閃存驅(qū)動(dòng)器中。在這些實(shí)施例中,SoC110或SoC控制電路112可以充當(dāng)主機(jī)控制器。例如,作為主機(jī)控制器,SoC110可以向NVM120發(fā)出讀和寫(xiě)請(qǐng)求。雖然NVM接口116和SoC控制電路112被示出為分別的模塊,但是這僅僅是為了簡(jiǎn)化對(duì)本發(fā)明實(shí)施例的描述。應(yīng)當(dāng)理解,這些模塊可以共享硬件部件、軟件部件、或這兩者。例如,SoC控制電路112可以為NVM接口116執(zhí)行基于軟件的存儲(chǔ)器驅(qū)動(dòng)器。當(dāng)電子設(shè)備100加電或重啟時(shí),引導(dǎo)程序可以從NVM120裝入存儲(chǔ)器114中。電子設(shè)備100然后可以使用該引導(dǎo)程序來(lái)將數(shù)據(jù)(例如,操作系統(tǒng)及相關(guān)的固件和內(nèi)核)從NVM120裝入到存儲(chǔ)器114中。在引導(dǎo)程序讀取存儲(chǔ)在NVM120的一個(gè)或多個(gè)區(qū)塊中的數(shù)據(jù)和將其裝入到存儲(chǔ)器114中時(shí),可能會(huì)在這些區(qū)塊中的一些區(qū)塊中檢測(cè)到錯(cuò)誤。例如,某些錯(cuò)誤可能是非致命錯(cuò)誤(例如,通過(guò)發(fā)出一個(gè)或多個(gè)刷新通知而指出的錯(cuò)誤),而其它一些錯(cuò)誤可能是致命錯(cuò)誤(例如,通過(guò)發(fā)出一個(gè)或多個(gè)無(wú)法糾正的糾錯(cuò)編碼(uncorrectableerrorcorrectioncoding,“uECC”)通知而指出的錯(cuò)誤)。有多個(gè)因素可能阻止這些錯(cuò)誤被設(shè)備100糾正。一個(gè)因素是當(dāng)數(shù)據(jù)正在由引導(dǎo)程序讀取時(shí),設(shè)備100可能工作在無(wú)法糾正錯(cuò)誤的只讀環(huán)境中。如前面所提到的,“只讀環(huán)境”可以指電子設(shè)備不能對(duì)NVM執(zhí)行寫(xiě)入從而不能糾正在NVM中檢測(cè)到的任何錯(cuò)誤的工作狀態(tài)。另一因素是某些檢測(cè)到的錯(cuò)誤可能是瞬態(tài)的。例如,在設(shè)備引導(dǎo)期間,電子設(shè)備100可能接收到一個(gè)或多個(gè)刷新通知,其指出需要對(duì)特定頁(yè)面或區(qū)塊執(zhí)行刷新操作。然而,在隨后讀取該頁(yè)面或區(qū)塊時(shí),設(shè)備100可能不會(huì)接收到任何另外的刷新通知。盡管如此,仍然應(yīng)當(dāng)對(duì)該頁(yè)面或區(qū)塊執(zhí)行刷新操作。此外,由于正在裝入的數(shù)據(jù)僅僅由引導(dǎo)程序讀取,一旦設(shè)備100已經(jīng)完成了引導(dǎo),設(shè)備100可能無(wú)法再次檢測(cè)到這些錯(cuò)誤。因而,在設(shè)備引導(dǎo)完成之后,這些錯(cuò)誤可能未被糾正。結(jié)果,盡管最好是盡快地糾正這些錯(cuò)誤(例如,通過(guò)停用這一個(gè)或多個(gè)區(qū)塊或者將所存儲(chǔ)的數(shù)據(jù)移動(dòng)到NVM120中的不同區(qū)塊),但設(shè)備100可能繼續(xù)工作,直到固件無(wú)法裝入(例如,由于一個(gè)或多個(gè)致命錯(cuò)誤)。這時(shí)可能就需要對(duì)設(shè)備100執(zhí)行強(qiáng)制還原(forcerestore)0即使在完成了強(qiáng)制還原之后,原始錯(cuò)誤可能仍然保持未被糾正。特別地,在強(qiáng)制還原期間,新固件可能被寫(xiě)入NVM120。在某些情況下,新固件可能被寫(xiě)入到曾存儲(chǔ)舊固件的相同區(qū)塊。通常,設(shè)備100可能不會(huì)重新檢測(cè)原始錯(cuò)誤,因?yàn)闆](méi)有協(xié)議讓設(shè)備100在將新固件寫(xiě)入NVM120之前讀出并檢查舊固件。一種可能的解決方案是在引導(dǎo)過(guò)程完成之后讓電子設(shè)備100重新檢驗(yàn)存儲(chǔ)在存儲(chǔ)器114中的固件。但是,使用這種方法,設(shè)備100可能無(wú)法重新檢測(cè)瞬態(tài)的非致命錯(cuò)誤。而且,這種方法可能對(duì)設(shè)備性能有負(fù)面影響,因?yàn)樵O(shè)備100在它原本可以是全功能的時(shí)候浪費(fèi)時(shí)間讀數(shù)據(jù)。因此,為了防止固件故障和避免數(shù)據(jù)丟失,NVM接口116可以被配置為在設(shè)備引導(dǎo)期間檢測(cè)錯(cuò)誤和維護(hù)錯(cuò)誤日志。一旦設(shè)備100已經(jīng)進(jìn)入可寫(xiě)環(huán)境(例如,設(shè)備引導(dǎo)已完成),NVM驅(qū)動(dòng)器117就可以被配置為利用錯(cuò)誤日志來(lái)糾正所檢測(cè)到的錯(cuò)誤。例如,NVM驅(qū)動(dòng)器117可以將數(shù)據(jù)移動(dòng)到更可靠的區(qū)塊和/或停用接近故障的區(qū)塊,從而提升整體設(shè)備可靠性。如前面所提到的,“可寫(xiě)環(huán)境”可以指電子設(shè)備的一個(gè)或多個(gè)部件能夠?qū)VM執(zhí)行寫(xiě)入操作的工作狀態(tài)?,F(xiàn)在參考圖2,示出了電子設(shè)備引導(dǎo)的示意性圖示200。存儲(chǔ)器214可以與存儲(chǔ)器114(圖1)相同或相似。同樣,NVM220可以與NVM120(圖1)相同或相似。應(yīng)當(dāng)理解,圖2中示出的存儲(chǔ)器214的部分230-234僅僅是示意性的。例如,所示出的每個(gè)部分的大小是示意性的,并且不應(yīng)當(dāng)被視為是將實(shí)施例限制為所示出的大小。還應(yīng)當(dāng)理解,各個(gè)部分的順序可以被重新安排為任何適當(dāng)?shù)捻樞颉T谀承?shí)施例中,電子設(shè)備(例如圖1的電子設(shè)備100)的操作系統(tǒng)可以在電子設(shè)備的加電或重啟期間從NVM220引導(dǎo)。如圖2所示,例如,當(dāng)設(shè)備在時(shí)間段Tl期間加電或重啟時(shí),引導(dǎo)程序230可以通過(guò)NVM接口(例如圖1的NVM接口116)從NVM220被裝入易失性存儲(chǔ)器214中。在時(shí)間段T2期間,引導(dǎo)程序230可以被配置為將操作系統(tǒng)和相關(guān)數(shù)據(jù)裝入到存儲(chǔ)器214中。例如,除操作系統(tǒng)以外,NVM接口還可以裝入內(nèi)核和固件,它們可用于配置操作系統(tǒng)和/或可以由操作系統(tǒng)使用以進(jìn)行啟動(dòng)。特別地,NVM接口可以從NVM的一個(gè)或多個(gè)存儲(chǔ)單元(例如,一個(gè)或多個(gè)區(qū)塊)中讀取操作系統(tǒng)、內(nèi)核和固件。在某些實(shí)施例中,NVM接口可以在只讀環(huán)境下執(zhí)行該讀取。從而,如圖2所示,操作系統(tǒng)和相關(guān)數(shù)據(jù)可以由數(shù)據(jù)232表示,其可以通過(guò)NVM接口從NVM220裝入存儲(chǔ)器214中。在數(shù)據(jù)232被裝入存儲(chǔ)器214中時(shí),NVM接口可以檢測(cè)NVM220中的一個(gè)或多個(gè)錯(cuò)誤(例如,正從NVM220被讀取的固件中的一個(gè)或多個(gè)錯(cuò)誤)。在檢測(cè)到這樣的錯(cuò)誤后,NVM接口可以將一個(gè)或多個(gè)錯(cuò)誤通知(例如,刷新通知或uECC通知)存儲(chǔ)在存儲(chǔ)器214的一個(gè)部分中。例如,在時(shí)間段T3期間,NVM接口可以將一個(gè)或多個(gè)錯(cuò)誤通知存儲(chǔ)在錯(cuò)誤日志2;34中,錯(cuò)誤日志234可被實(shí)現(xiàn)為存儲(chǔ)器214中的暫存緩沖區(qū)(scratchmemorybuffer)和/或保留的隨機(jī)存取存儲(chǔ)區(qū)域。一旦電子設(shè)備已經(jīng)引導(dǎo)(例如,操作系統(tǒng)已裝入存儲(chǔ)器214中并且已經(jīng)啟動(dòng)),NVM驅(qū)動(dòng)器(例如圖1的NVM驅(qū)動(dòng)器117)就可以檢查錯(cuò)誤日志234并執(zhí)行一個(gè)或多個(gè)糾正動(dòng)作。特別地,NVM驅(qū)動(dòng)器可以工作在可寫(xiě)環(huán)境中,在該環(huán)境中,NVM驅(qū)動(dòng)器可以指示總線(xiàn)控制器(例如圖1的總線(xiàn)控制118)執(zhí)行一個(gè)或多個(gè)糾正動(dòng)作。因而,在圖2的時(shí)間段T4期間,NVM驅(qū)動(dòng)器可以檢查錯(cuò)誤日志234。例如,NVM驅(qū)動(dòng)器可以處理錯(cuò)誤日志234并讀取一個(gè)或多個(gè)錯(cuò)誤通知。然后,在時(shí)間段T5期間,NVM驅(qū)動(dòng)器可以利用錯(cuò)誤通知來(lái)糾正錯(cuò)誤250。例如,響應(yīng)于從錯(cuò)誤日志234讀取一個(gè)或多個(gè)刷新通知,NVM驅(qū)動(dòng)器可以刷新存儲(chǔ)在NVM220的頁(yè)面或區(qū)塊中的數(shù)據(jù)(例如,通過(guò)執(zhí)行垃圾收集(gartagecollection)).作為另一例子,響應(yīng)于從錯(cuò)誤日志234讀取一個(gè)或多個(gè)uECC通知,NVM驅(qū)動(dòng)器可以發(fā)送表明設(shè)備可能需要還原的通知。參考圖3,示出了用于處理從NVM(例如圖1的NVM120或圖2的NVM220)進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤的示意性過(guò)程300的流程圖。過(guò)程300的步驟可以由能夠與NVM進(jìn)行接口的NVM接口(例如圖1的NVM接口116)執(zhí)行,由能夠向NVM寫(xiě)入數(shù)據(jù)的NVM驅(qū)動(dòng)器(例如圖1的NVM驅(qū)動(dòng)器117)執(zhí)行,或者由電子設(shè)備(例如圖1的電子設(shè)備100)任何部件或部件組合來(lái)執(zhí)行。過(guò)程300可以在步驟302開(kāi)始。在步驟304,NVM接口可以更新固件。例如,固件可以在電子設(shè)備在工廠(chǎng)中時(shí)進(jìn)行更新,或者可以在設(shè)備正在使用時(shí)的軟件下載期間進(jìn)行更新。然后,在步驟306,可以確定固件更新是否成功。如果在步驟306確定固件更新不成功,則過(guò)程300可以返回步驟304,在這里可以重新更新固件。如果在步驟306確定固件更新成功,則過(guò)程300可以進(jìn)行到步驟308。在步驟308,電子設(shè)備可以從NVM引導(dǎo)。例如,NVM接口可以將引導(dǎo)程序從NVM裝入易失性存儲(chǔ)器(例如圖1的存儲(chǔ)器114或圖2的存儲(chǔ)器214)。然后,使用引導(dǎo)程序,NVM接口可以嘗試將操作系統(tǒng)、內(nèi)核和固件裝入到易失性存儲(chǔ)器中。例如,如圖2所示,NVM接口可以將引導(dǎo)程序230從NVM220裝入存儲(chǔ)器214,并且引導(dǎo)程序230可以嘗試將數(shù)據(jù)232裝入到存儲(chǔ)器214中。繼續(xù)到步驟310,可以確定是否發(fā)生了致命錯(cuò)誤(例如,致命的引導(dǎo)裝入錯(cuò)誤)。這樣的致命錯(cuò)誤可能阻止電子設(shè)備成功引導(dǎo)。如果在步驟310確定發(fā)生了致命錯(cuò)誤,則過(guò)程300可以返回步驟304,在這里NVM接口可以嘗試再次更新固件。如果在步驟310確定沒(méi)有發(fā)生致命錯(cuò)誤,則過(guò)程300可以進(jìn)行到步驟312。在步驟312,可以確定NVM中是否發(fā)生了至少一個(gè)錯(cuò)誤(例如,在固件裝入期間的一個(gè)或多個(gè)錯(cuò)誤)。如果在步驟312確定NVM中沒(méi)有發(fā)生至少一個(gè)錯(cuò)誤,則一旦NVM接口完成了將操作系統(tǒng)、內(nèi)核和固件裝入到易失性存儲(chǔ)器中,并且操作系統(tǒng)已經(jīng)啟動(dòng)(例如,設(shè)備已到達(dá)可寫(xiě)環(huán)境),過(guò)程300就可以進(jìn)行到步驟314。然而,如果在步驟312確定NVM中發(fā)生了至少一個(gè)錯(cuò)誤,則過(guò)程300可以進(jìn)行到步驟316。在某些實(shí)施例中,NVM接口可以響應(yīng)于接收到一個(gè)或多個(gè)錯(cuò)誤通知(例如,刷新通知和/或uECC通知)而確定發(fā)生了至少一個(gè)錯(cuò)誤。例如,如圖2所示,NVM接口可以檢測(cè)NVM220中的一個(gè)或多個(gè)錯(cuò)誤250。在步驟316,一個(gè)或多個(gè)錯(cuò)誤通知可以被存儲(chǔ)在易失性存儲(chǔ)器的一個(gè)部分中。例如,如圖2所示,NVM接口可以將錯(cuò)誤通知存儲(chǔ)在存儲(chǔ)器214的錯(cuò)誤日志234中。在存儲(chǔ)了一個(gè)或多個(gè)錯(cuò)誤通知后,過(guò)程300可以進(jìn)行到步驟314。在步驟314,可以確定在設(shè)備引導(dǎo)期間是否曾檢測(cè)到NVM中的一個(gè)或多個(gè)錯(cuò)誤。例如,NVM驅(qū)動(dòng)器(例如,圖1的NVM驅(qū)動(dòng)器117)可以處理錯(cuò)誤日志,并且確定錯(cuò)誤日志中是否存儲(chǔ)了一個(gè)或多個(gè)錯(cuò)誤通知。如果在步驟314確定在設(shè)備引導(dǎo)期間沒(méi)有檢測(cè)到錯(cuò)誤,過(guò)程300可以在步驟318結(jié)束。在某些實(shí)施例中,在稍后的一個(gè)時(shí)間點(diǎn),電子設(shè)備可以斷電并重啟。然后可以啟動(dòng)子過(guò)程330,其中在步驟308,電子設(shè)備可以從NVM引導(dǎo)。如果在步驟314確定在設(shè)備引導(dǎo)期間曾檢測(cè)到一個(gè)或多個(gè)錯(cuò)誤,則NVM驅(qū)動(dòng)器可以嘗試?yán)盟鎯?chǔ)的錯(cuò)誤通知來(lái)糾正這一個(gè)或多個(gè)錯(cuò)誤。因此,過(guò)程300可以進(jìn)行到步驟320。在步驟320,可以確定在設(shè)備引導(dǎo)期間是否曾檢測(cè)到一個(gè)或多個(gè)致命錯(cuò)誤。例如,NVM驅(qū)動(dòng)器可以確定錯(cuò)誤日志是否包括一個(gè)或多個(gè)uECC通知。如果在步驟320確定在設(shè)備引導(dǎo)期間檢測(cè)到的錯(cuò)誤是致命錯(cuò)誤,過(guò)程300可以進(jìn)行到步驟322。在步驟322,NVM驅(qū)動(dòng)器可以停用與該致命錯(cuò)誤相關(guān)聯(lián)的一個(gè)或多個(gè)區(qū)塊。例如,NVM驅(qū)動(dòng)器可以首先識(shí)別相關(guān)聯(lián)的區(qū)塊。NVM驅(qū)動(dòng)器然后可以通過(guò)將存儲(chǔ)在該相關(guān)聯(lián)的區(qū)塊中的數(shù)據(jù)復(fù)制到NVM中的其它區(qū)塊而停用該相關(guān)聯(lián)的區(qū)塊。在復(fù)制了數(shù)據(jù)之后,該相關(guān)聯(lián)的區(qū)塊可以從可用的可編程區(qū)塊的庫(kù)中被停用。在停用這些區(qū)塊后,過(guò)程300可以返回步驟304,在這里,NVM接口可以強(qiáng)制電子設(shè)備還原。例如,NVM接口可以嘗試再次更新固件。如果在步驟320確定在設(shè)備引導(dǎo)期間檢測(cè)到的錯(cuò)誤不是致命錯(cuò)誤,則過(guò)程300可以進(jìn)行到步驟324。例如,NVM驅(qū)動(dòng)器可能已經(jīng)確定該一個(gè)或多個(gè)錯(cuò)誤是對(duì)引導(dǎo)而言不重要的非致命錯(cuò)誤。在步驟324,NVM驅(qū)動(dòng)器可以移動(dòng)存儲(chǔ)在與該非致命錯(cuò)誤相關(guān)聯(lián)的一個(gè)或多個(gè)區(qū)塊中的數(shù)據(jù)。這種預(yù)防性移動(dòng)可以防止非致命錯(cuò)誤在以后發(fā)展為致命錯(cuò)誤。例如,NVM驅(qū)動(dòng)器可以首先識(shí)別相關(guān)聯(lián)的區(qū)塊。在識(shí)別了該區(qū)塊之后,NVM驅(qū)動(dòng)器可以將存儲(chǔ)在該相關(guān)聯(lián)的區(qū)塊中的數(shù)據(jù)寫(xiě)入NVM的其它區(qū)塊。過(guò)程300然后可以在步驟318結(jié)束。將會(huì)理解,錯(cuò)誤日志可以在電子設(shè)備(例如圖2的電子設(shè)備100)的任何引導(dǎo)過(guò)程期間被維護(hù)和處理。因此,步驟308到322(圖3中用虛線(xiàn)框出并被標(biāo)注為子過(guò)程330)可以表示由NVM接口和/或NVM驅(qū)動(dòng)器在任何設(shè)備引導(dǎo)過(guò)程期間采取的步驟。例如,在正常的設(shè)備引導(dǎo)期間,子過(guò)程330可以開(kāi)始于步驟308(例如,當(dāng)正在運(yùn)行的電子設(shè)備斷電和重啟時(shí))。應(yīng)當(dāng)理解,圖3的過(guò)程僅僅是示例性的。過(guò)程300和子過(guò)程330的任何步驟都可以被去除、修改或組合,并且可以增加任何另外的步驟,而不背離本發(fā)明的范圍。給出所描述的本發(fā)明的實(shí)施例是出于說(shuō)明的目的而不是限制。權(quán)利要求1.一種處理電子設(shè)備中的錯(cuò)誤的方法,該方法包括從非易失性存儲(chǔ)器(NVM)引導(dǎo)電子設(shè)備;確定在NVM中是否發(fā)生了錯(cuò)誤;響應(yīng)于確定在NVM中發(fā)生了錯(cuò)誤,將至少一個(gè)錯(cuò)誤通知存儲(chǔ)在易失性存儲(chǔ)器的一個(gè)部分中;和一旦電子設(shè)備完成了引導(dǎo),使用所述至少一個(gè)錯(cuò)誤通知糾正所述錯(cuò)誤。2.如權(quán)利要求1所述的方法,還包括響應(yīng)于確定在NVM中沒(méi)有發(fā)生錯(cuò)誤,繼續(xù)從NVM引導(dǎo)電子設(shè)備。3.如權(quán)利要求1所述的方法,其中所述易失性存儲(chǔ)器的所述一個(gè)部分是存儲(chǔ)緩沖區(qū)。4.如權(quán)利要求1所述的方法,其中所述易失性存儲(chǔ)器的所述一個(gè)部分是保留的隨機(jī)存取存儲(chǔ)區(qū)域。5.如權(quán)利要求1所述的方法,其中所述糾正包括確定所述錯(cuò)誤是非致命錯(cuò)誤;識(shí)別NVM中與所述錯(cuò)誤相關(guān)聯(lián)的至少一個(gè)區(qū)塊;和將存儲(chǔ)在所述至少一個(gè)區(qū)塊中的數(shù)據(jù)寫(xiě)入該NVM中的另一個(gè)區(qū)塊。6.如權(quán)利要求1所述的方法,其中所述糾正包括確定所述錯(cuò)誤是致命錯(cuò)誤;識(shí)別NVM中與所述錯(cuò)誤相關(guān)聯(lián)的至少一個(gè)區(qū)塊;和停用所述至少一個(gè)區(qū)塊。7.如權(quán)利要求6所述的方法,還包括強(qiáng)制電子設(shè)備還原;和更新電子設(shè)備上的固件。8.一種電子設(shè)備,包括非易失性存儲(chǔ)器(NVM);操作以存儲(chǔ)錯(cuò)誤日志的易失性存儲(chǔ)器;和能夠操作以訪(fǎng)問(wèn)NVM的存儲(chǔ)器接口,其中該存儲(chǔ)器接口操作以將引導(dǎo)程序從NVM裝入到所述易失性存儲(chǔ)器中;使用所述引導(dǎo)程序?qū)⒐碳腘VM裝入到所述易失性存儲(chǔ)器中;確定在固件裝入期間是否發(fā)生了至少一個(gè)錯(cuò)誤;和響應(yīng)于確定發(fā)生了至少一個(gè)錯(cuò)誤,在所述錯(cuò)誤日志中存儲(chǔ)至少一個(gè)錯(cuò)誤通知。9.如權(quán)利要求8所述的電子設(shè)備,其中當(dāng)固件正被裝入時(shí),所述電子設(shè)備處于只讀環(huán)境中。10.如權(quán)利要求8所述的電子設(shè)備,其中所述存儲(chǔ)器接口操作以響應(yīng)于接收到刷新通知和無(wú)法糾正的糾錯(cuò)編碼通知中的至少一個(gè)而確定發(fā)生了所述至少一個(gè)錯(cuò)誤。11.如權(quán)利要求8所述的電子設(shè)備,其中所述存儲(chǔ)器接口操作以將操作系統(tǒng)裝入所述易失性存儲(chǔ)器中。12.如權(quán)利要求11所述的電子設(shè)備,還包括操作以向NVM寫(xiě)入數(shù)據(jù)的NVM驅(qū)動(dòng)器。13.如權(quán)利要求12所述的電子設(shè)備,其中所述NVM驅(qū)動(dòng)器進(jìn)一步操作以處理所述錯(cuò)誤日志;和糾正所述至少一個(gè)錯(cuò)誤。14.如權(quán)利要求8所述的電子設(shè)備,其中響應(yīng)于確定沒(méi)有發(fā)生所述至少一個(gè)錯(cuò)誤,所述存儲(chǔ)器接口操作以繼續(xù)將固件裝入所述易失性存儲(chǔ)器中。15.如權(quán)利要求8所述的電子設(shè)備,其中所述NVM是NAND閃存。16.一種存儲(chǔ)器接口,包括控制電路,該控制電路操作以在只讀環(huán)境中將固件從電子設(shè)備的非易失性存儲(chǔ)器(NVM)讀取到該電子設(shè)備的易失性存儲(chǔ)器;和在被讀取的固件中檢測(cè)至少一個(gè)錯(cuò)誤;和NVM驅(qū)動(dòng)器,該NVM驅(qū)動(dòng)器操作以便一旦電子設(shè)備到達(dá)了可寫(xiě)環(huán)境就糾正所述至少一個(gè)錯(cuò)誤。17.如權(quán)利要求16所述的存儲(chǔ)器接口,其中所述控制電路操作以將至少一個(gè)錯(cuò)誤通知存儲(chǔ)在所述易失性存儲(chǔ)器的一個(gè)部分中。18.如權(quán)利要求16所述的存儲(chǔ)器接口,其中所述NVM驅(qū)動(dòng)器在可寫(xiě)環(huán)境中工作。19.如權(quán)利要求16所述的存儲(chǔ)器接口,其中所述NVM驅(qū)動(dòng)器操作以確定所述至少一個(gè)錯(cuò)誤是非致命錯(cuò)誤;識(shí)別NVM中與該錯(cuò)誤相關(guān)聯(lián)的至少一個(gè)區(qū)塊;和將存儲(chǔ)在該至少一個(gè)區(qū)塊中的數(shù)據(jù)移動(dòng)到該NVM的至少一個(gè)其它區(qū)塊。20.如權(quán)利要求16所述的存儲(chǔ)器接口,其中所述NVM驅(qū)動(dòng)器操作以確定所述至少一個(gè)錯(cuò)誤是致命錯(cuò)誤;識(shí)別NVM中與該錯(cuò)誤相關(guān)聯(lián)的至少一個(gè)區(qū)塊;將存儲(chǔ)在該至少一個(gè)區(qū)塊中的數(shù)據(jù)復(fù)制到該NVM的至少一個(gè)其它區(qū)塊;和停用所述至少一個(gè)區(qū)塊。21.—種處理電子設(shè)備中的錯(cuò)誤的裝置,該裝置包括用于從非易失性存儲(chǔ)器(NVM)引導(dǎo)電子設(shè)備的模塊;用于確定在NVM中是否發(fā)生了錯(cuò)誤的模塊;用于響應(yīng)于確定在NVM中發(fā)生了錯(cuò)誤,將至少一個(gè)錯(cuò)誤通知存儲(chǔ)在易失性存儲(chǔ)器的一個(gè)部分中的模塊;和用于一旦電子設(shè)備完成了引導(dǎo),使用所述至少一個(gè)錯(cuò)誤通知糾正所述錯(cuò)誤的模塊。22.如權(quán)利要求21所述的裝置,還包括用于響應(yīng)于確定在NVM中沒(méi)有發(fā)生錯(cuò)誤,繼續(xù)從NVM引導(dǎo)電子設(shè)備的模塊。23.如權(quán)利要求21所述的裝置,其中所述易失性存儲(chǔ)器的所述一個(gè)部分是存儲(chǔ)緩沖區(qū)。24.如權(quán)利要求21所述的裝置,其中所述易失性存儲(chǔ)器的所述一個(gè)部分是保留的隨機(jī)存取存儲(chǔ)區(qū)域。25.如權(quán)利要求21所述的裝置,其中所述用于糾正的模塊包括用于確定所述錯(cuò)誤是非致命錯(cuò)誤的模塊;用于識(shí)別NVM中與所述錯(cuò)誤相關(guān)聯(lián)的至少一個(gè)區(qū)塊的模塊;和用于將存儲(chǔ)在所述至少一個(gè)區(qū)塊中的數(shù)據(jù)寫(xiě)入該NVM中的另一個(gè)區(qū)塊的模塊。26.如權(quán)利要求21所述的裝置,其中所述用于糾正的模塊包括用于確定所述錯(cuò)誤是致命錯(cuò)誤的模塊;用于識(shí)別NVM中與所述錯(cuò)誤相關(guān)聯(lián)的至少一個(gè)區(qū)塊的模塊;和用于停用所述至少一個(gè)區(qū)塊的模塊。27.如權(quán)利要求沈所述的裝置,還包括用于強(qiáng)制電子設(shè)備還原的模塊;和用于更新電子設(shè)備上的固件的模塊。全文摘要本發(fā)明涉及處理從非易失性存儲(chǔ)器進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤。提供了用于處理從非易失性存儲(chǔ)器(“NVM”)進(jìn)行設(shè)備引導(dǎo)期間的錯(cuò)誤的系統(tǒng)和方法。電子設(shè)備的NVM接口可以被配置為在設(shè)備正在引導(dǎo)時(shí)檢測(cè)錯(cuò)誤并且在易失性存儲(chǔ)器中維護(hù)錯(cuò)誤日志。一旦設(shè)備引導(dǎo)完成,電子設(shè)備的NVM驅(qū)動(dòng)器可被配置為使用錯(cuò)誤日志糾正所檢測(cè)到的錯(cuò)誤。例如,電子設(shè)備可以將數(shù)據(jù)移動(dòng)到更可靠的區(qū)塊和/或停用接近故障的區(qū)塊,從而提升整體設(shè)備可靠性。文檔編號(hào)G06F11/00GK102385535SQ20111025345公開(kāi)日2012年3月21日申請(qǐng)日期2011年8月24日優(yōu)先權(quán)日2010年8月31日發(fā)明者D·J·波斯特,K·赫曼,M·拜奧姆,N·J·瓦克拉特申請(qǐng)人:蘋(píng)果公司