專利名稱:快閃存儲(chǔ)器系統(tǒng)起動(dòng)操作的制作方法
技術(shù)領(lǐng)域:
本發(fā)明通常來(lái)說(shuō)涉及非易失性快閃存儲(chǔ)器系統(tǒng)的控制器的初始化,而更具體來(lái)說(shuō)涉及將操作固件存儲(chǔ)于快閃存儲(chǔ)器內(nèi)以及一旦初始化或重啟所述存儲(chǔ)器系統(tǒng)便將所存儲(chǔ)的固件讀入一控制器存儲(chǔ)器內(nèi)。
背景技術(shù):
如今人們正使用許多商業(yè)上已取得成功的非易失性存儲(chǔ)器產(chǎn)品,尤其是小形狀因數(shù)卡形式的產(chǎn)品,其采用一快閃EEPROM(電可抹除及可編程只讀存儲(chǔ)器)單元陣列。所述卡內(nèi)還包括一存儲(chǔ)器控制器以與所述卡所連接的一主機(jī)介接并控制所述卡內(nèi)所述存儲(chǔ)器陣列的操作。此一控制器通常包括一微處理器、某種非易失性只讀存儲(chǔ)器(ROM)以及一易失性隨機(jī)存取存儲(chǔ)器(RAM)。除所述記憶卡實(shí)施方案外,另一選擇是,還可將一個(gè)或一個(gè)以上集成電路形式的此類存儲(chǔ)器系統(tǒng)嵌入各類主機(jī)系統(tǒng)中。
二種通用的存儲(chǔ)器單元陣列架構(gòu)已在商業(yè)上獲得應(yīng)用NOR與NAND。在典型的NOR陣列中,存儲(chǔ)器單元連接在相鄰的位線源極及漏極擴(kuò)散之間,所述源極及漏極擴(kuò)散是在一列方向上延伸并有控制柵極連接至字線(沿單元行延伸)。一存儲(chǔ)器單元包括位于所述源極與漏極之間的至少一部分單元通道區(qū)域上的至少一存儲(chǔ)組件。因此,所述存儲(chǔ)組件上的一編程的電荷電平控制所述單元的一操作特征,然后可通過(guò)向所尋址的存儲(chǔ)器單元施加適當(dāng)?shù)碾妷簛?lái)讀取所述單元。美國(guó)專利案第5,070,032、5,095,344、5,313,421、5,315,541、5,343,063、5,661,053及6,222,762號(hào)中給出此類單元,及其存儲(chǔ)器系統(tǒng)中的使用及制造方法的實(shí)例。
所述NAND陣列利用與個(gè)別位線之間一個(gè)或一個(gè)以上選擇晶體管連接在一起的多個(gè)由二個(gè)以上(例如16或32個(gè))存儲(chǔ)器單元組成的串聯(lián)串與一參考電位來(lái)形成多個(gè)單元列。字線延伸跨過(guò)大量所述列內(nèi)的單元。在編程期間通過(guò)以下方式讀取及驗(yàn)證一列內(nèi)的一個(gè)別單元致使硬導(dǎo)通所述串中的其余單元以使流經(jīng)一串的電流取決于所述尋址單元內(nèi)存儲(chǔ)的電荷電平。美國(guó)專利案第5,570,315、5,774,397、6,046,935及6,522,580號(hào)中給出NAND架構(gòu)陣列及其作為存儲(chǔ)器系統(tǒng)的一部分操作的實(shí)例。
前面所參考的專利案及文章中所論述的當(dāng)前快閃EEPROM陣列的電荷存儲(chǔ)組件中最常見的是導(dǎo)電浮動(dòng)?xùn)艠O,起通常是由摻雜的多晶硅材料形成。可用于快閃EEPROM系統(tǒng)中的另一類存儲(chǔ)器單元使用一非導(dǎo)電介電材料替代一導(dǎo)電浮動(dòng)?xùn)艠O來(lái)以一非易失性方式存儲(chǔ)電荷。Chan等人的文章“真正的單晶體管氧化物-氮化物-氧化物EEPROM裝置”(IEEE電子裝置學(xué)刊第EDL-8卷第3號(hào),1987年3月,第93至95頁(yè))中說(shuō)明了此一單元。一由氧化硅、氮化硅及氧化硅(“ONO”)形成的三層電介質(zhì)被夾在一導(dǎo)電控制柵極與所述存儲(chǔ)器單元通道上一半導(dǎo)電襯底的一表面之間。通過(guò)將電子從所述單元通道注入所述氮化物來(lái)編程所述單元,其中所述電子被捕獲并存儲(chǔ)于一受限制區(qū)域內(nèi),并通過(guò)將熱電洞注入所述氮化物來(lái)抹除所述單元。2002年10月25日申請(qǐng)的序列號(hào)為10/280,352的美國(guó)專利申請(qǐng)案(公告案號(hào)為2003-0109093)中說(shuō)明了采用介電存儲(chǔ)組件的數(shù)種特定單元結(jié)構(gòu)。
如同在絕大多數(shù)集成電路應(yīng)用中,對(duì)于快閃EEPROM存儲(chǔ)器單元陣列,同樣存在縮小構(gòu)件建某一集成電路功能所需硅襯底區(qū)域的壓力。為了增加一給定尺寸的記憶卡及其它類型封裝的存儲(chǔ)容量,或?yàn)榱嗽黾尤萘客瑫r(shí)減小尺寸,一直希望增加硅襯底的一給定區(qū)域內(nèi)所能存儲(chǔ)的數(shù)字?jǐn)?shù)據(jù)的數(shù)量。增加數(shù)據(jù)存儲(chǔ)密度的一種方法是每一存儲(chǔ)器單元及/或每一存儲(chǔ)組件存儲(chǔ)多于一個(gè)數(shù)據(jù)位。此方法是通過(guò)將一存儲(chǔ)組件電荷電平電壓范圍窗口分成多于二個(gè)狀態(tài)而實(shí)現(xiàn)。使用四個(gè)此類狀態(tài)允許每一單元存儲(chǔ)二個(gè)數(shù)據(jù)位,八個(gè)狀態(tài)允許每一存儲(chǔ)組件存儲(chǔ)三個(gè)數(shù)據(jù)位,以此類推。美國(guó)專利案第5,043,940及5,172,338號(hào)中說(shuō)明了使用浮動(dòng)?xùn)艠O的多狀態(tài)快閃EEPROM結(jié)構(gòu)及其操作,而對(duì)于使用介電浮動(dòng)?xùn)艠O的結(jié)構(gòu),則在前面提到的序號(hào)為10/280,352的美國(guó)申請(qǐng)案中有相關(guān)說(shuō)明。一多狀態(tài)存儲(chǔ)器單元陣列的選定部分也可基于各種原因以美國(guó)專利案第5,930,167及6,456,528號(hào)中所說(shuō)明的方式在兩種狀態(tài)(二進(jìn)制)中操作。
一典型的快閃EEPROM陣列的存儲(chǔ)器單元被劃分成一起抹除的分立的單元區(qū)塊。即,區(qū)塊是抹除單位。每一區(qū)塊通常存儲(chǔ)一個(gè)或一個(gè)以上數(shù)據(jù)頁(yè)面,所述頁(yè)面是編程及讀取的最小單位,但在一單一操作中可編程或讀取多個(gè)頁(yè)面。每一頁(yè)面通常存儲(chǔ)一個(gè)或一個(gè)以上數(shù)據(jù)區(qū)段,所述區(qū)段的尺寸由主機(jī)系統(tǒng)來(lái)定義。根據(jù)一所建立的關(guān)于磁盤驅(qū)動(dòng)器的標(biāo)準(zhǔn),一實(shí)例區(qū)段包括512個(gè)用戶數(shù)據(jù)字節(jié),再加上某些數(shù)量的關(guān)于用戶數(shù)據(jù)及/或所述用戶數(shù)據(jù)存儲(chǔ)于其中的區(qū)塊的開銷信息的字節(jié)。存儲(chǔ)器系統(tǒng)通常在每一區(qū)塊內(nèi)配置有16、32或更多頁(yè)面,且每一頁(yè)面均存儲(chǔ)一個(gè)或僅數(shù)個(gè)主機(jī)數(shù)據(jù)區(qū)段。
一快閃存儲(chǔ)器系統(tǒng)中的控制器通常包括一微處理器,所述微處理器執(zhí)行來(lái)自—固件操作系統(tǒng)的指令以控制所述存儲(chǔ)器陣列的操作以及數(shù)據(jù)在所述陣列與所述主機(jī)系統(tǒng)之間的流動(dòng)。在某些商業(yè)產(chǎn)品中,此固件存儲(chǔ)于作為所述控制器一部分的一小型快閃EEPROM內(nèi),其通常是一與一個(gè)或一個(gè)以上存儲(chǔ)器單元陣列集成電路芯片分離的集成電路芯片。使用一快閃存儲(chǔ)器允許通過(guò)重新編程而容易地更新所述固件。通常,一旦所述系統(tǒng)通電或重置,便從所述快閃存儲(chǔ)器讀取所述固件并將所述固件讀入控制器RAM。最初,所述控制器微處理器執(zhí)行所述控制器ROM內(nèi)存儲(chǔ)的少量啟動(dòng)碼以將所述固件加載到RAM內(nèi)。然后,由于可使用能夠比所述快閃存儲(chǔ)器更快讀取的此一類型的存儲(chǔ)器,所述微處理器執(zhí)行來(lái)自所述RAM的固件指令。當(dāng)然,所述RAM是易失性的,但是,如果斷電,則在恢復(fù)電力后所述固件被再次從所述快閃存儲(chǔ)器加載到所述RAM內(nèi)并恢復(fù)所述存儲(chǔ)器系統(tǒng)的操作。
盡管此固件啟動(dòng)系統(tǒng)操作得相當(dāng)好,但所述控制器集成電路芯片較昂貴,因?yàn)楸仨毷褂门c用于形成所述芯片上的其它電路不同的一程序來(lái)形成所述快閃存儲(chǔ)器。因此人們已建議為了降低產(chǎn)品成本,將所述固件存儲(chǔ)于不允許所述主機(jī)存取以存儲(chǔ)用戶數(shù)據(jù)的快閃存儲(chǔ)器單元陣列的指定區(qū)塊內(nèi)。一旦系統(tǒng)初始化,所述控制器微處理器便執(zhí)行所述ROM啟動(dòng)碼以將所述固件從快閃存儲(chǔ)器的指定區(qū)塊加載到所述RAM內(nèi)。此仍然允許通過(guò)重新編程所述快閃區(qū)塊來(lái)改變及更新所有固件,因?yàn)樗鯮OM內(nèi)僅存儲(chǔ)少量碼來(lái)載入所述固件。
發(fā)明內(nèi)容
顯然,極為重要的是保持加載到所述控制器RAM內(nèi)的固件的完整性。所加載的固件中的任何錯(cuò)誤(即使僅在一個(gè)位內(nèi))也能致使所述存儲(chǔ)器系統(tǒng)不規(guī)則地操作,或者甚至根本不能操作。除此類不規(guī)則操作或失效的其它不利影響外,用戶數(shù)據(jù)在其編程或讀取時(shí)可能受到破壞,或者甚至使其不能從所述存儲(chǔ)器中檢索。即使后來(lái)通過(guò)重新加載所述固件或所述固件的另一副本來(lái)校正所述錯(cuò)誤,用戶數(shù)據(jù)或從所述快閃存儲(chǔ)器讀取用戶數(shù)據(jù)的能力可能已經(jīng)遭到不能修復(fù)的損害。因此,在將所述固件編程到所述快閃存儲(chǔ)器的保留區(qū)塊內(nèi)的過(guò)程中以及在所述固件在系統(tǒng)初始化后向RAM轉(zhuǎn)移期間,均采取步驟以改善所述固件的完整性,所述固件控制所述微處理器的操作以編程用戶數(shù)據(jù)并將用戶數(shù)據(jù)存儲(chǔ)于所述快閃存儲(chǔ)器的其它區(qū)塊內(nèi)。
將所述操作固件的二個(gè)或二個(gè)以上副本存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)的不同位置處。所述位置無(wú)需固定。而是,可最佳地選擇每一卡或嵌入式存儲(chǔ)器系統(tǒng)的存儲(chǔ)器單元的保留區(qū)塊以用于在將所述固件編程到所述存儲(chǔ)器內(nèi)(作為每一系統(tǒng)的最后制造步驟之一)時(shí)存儲(chǔ)所述固件。在制造期間,還將具有所述固件副本所存儲(chǔ)區(qū)塊的地址的映像圖編程到所述存儲(chǔ)器的數(shù)個(gè)指定區(qū)塊的一區(qū)塊中。所述ROM啟動(dòng)碼致使所述控制器微處理器依次尋址所述數(shù)個(gè)指定區(qū)塊直至其找到所述地址映像圖。然后將所述地址映像復(fù)制到所述控制器RAM內(nèi),并通過(guò)所述微處理器從所述地址映像圖中讀取所述固件的第一副本的起點(diǎn)存在于其中的快閃存儲(chǔ)器區(qū)塊的地址,然后使用讀取的所述地址來(lái)尋址所述區(qū)塊以開始將所述第一固件副本復(fù)制到RAM內(nèi)。所述可編程固件地址映像圖的使用允許將所述固件存儲(chǔ)于不同卡上的不同快閃存儲(chǔ)器位置而不會(huì)增加所述ROM啟動(dòng)碼或啟動(dòng)過(guò)程的復(fù)雜性。
盡管尋常的快閃存儲(chǔ)器是在用于用戶數(shù)據(jù)的多個(gè)狀態(tài)中操作,但存儲(chǔ)所述固件的保留區(qū)塊可在二進(jìn)制狀態(tài)或者數(shù)量比用于所述用戶數(shù)據(jù)的狀態(tài)少的狀態(tài)中操作。即,盡管所述快閃存儲(chǔ)器大部分中的存儲(chǔ)器單元的存儲(chǔ)組件存儲(chǔ)二個(gè)或二個(gè)以上數(shù)據(jù)位,但可操作所述保留區(qū)塊的存儲(chǔ)組件以各自存儲(chǔ)較少數(shù)量的一個(gè)或一個(gè)以上數(shù)據(jù)位。此改進(jìn)了不同狀態(tài)之間的容限,并因此使得所述固件數(shù)據(jù)對(duì)干擾及其它可能引起錯(cuò)誤的影響不太敏感。除此改進(jìn)的可靠性之外,可更快地讀取以較少數(shù)量的狀態(tài)存儲(chǔ)的數(shù)據(jù)。盡管此減小了所述保留區(qū)塊內(nèi)存儲(chǔ)的數(shù)據(jù)的密度,但僅涉及相對(duì)較少的區(qū)塊。因此,對(duì)作為一整體的存儲(chǔ)器系統(tǒng)的影響通常較低。
通常將所述固件數(shù)據(jù)與依據(jù)一已知冗余碼算法從所述數(shù)據(jù)中計(jì)算出的一錯(cuò)誤校正碼(ECC)一起存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)。所述ECC通常是與固件數(shù)據(jù)的每一區(qū)段或頁(yè)面一起存儲(chǔ)。一旦將所述固件數(shù)據(jù)從所述快閃存儲(chǔ)器保留區(qū)塊上載到所述控制器,便使用所述ECC檢查所述數(shù)據(jù)的錯(cuò)誤。如果一區(qū)段的一個(gè)或一個(gè)以上位是錯(cuò)誤的,則可使用所述區(qū)段的ECC來(lái)校正所述位,其前提是錯(cuò)誤位的數(shù)量在所使用的特定ECC算法的能力范圍內(nèi)。另一選擇是,可從存儲(chǔ)于快閃存儲(chǔ)器內(nèi)的一個(gè)或一個(gè)以上替代副本中讀取所述區(qū)段。如果所述第一副本內(nèi)的錯(cuò)誤數(shù)量超出所述ECC算法對(duì)其進(jìn)行校正的能力,則當(dāng)然從一替代固件副本中讀取所述區(qū)段。如果一區(qū)段的所有替代副本均包含錯(cuò)誤,則可校正并使用錯(cuò)誤最少的一副本。優(yōu)選由作為所述控制器一部分提供的一硬件電路來(lái)執(zhí)行所述ECC計(jì)算,而非由所述控制器微處理器在所述ROM啟動(dòng)碼的控制下執(zhí)行所述ECC計(jì)算。但是,一旦檢測(cè)到一可校正的數(shù)據(jù)錯(cuò)誤,所述微處理器便著手通過(guò)執(zhí)行ROM啟動(dòng)碼指令來(lái)校正所述錯(cuò)誤。
當(dāng)在讀取期間檢測(cè)到固件數(shù)據(jù)位的錯(cuò)誤時(shí),還可使用一容限技術(shù)。即,如果通過(guò)使用一ECC確定存在錯(cuò)誤,則第二次可以不同的參考電平讀取相同的數(shù)據(jù);即,為所述固件的一個(gè)或一個(gè)以上位的存儲(chǔ)等級(jí)中的某一錯(cuò)誤提供一容限。通常,將響應(yīng)所述ECC檢測(cè)到數(shù)量多于其可校正的錯(cuò)誤而使用所述容限讀取。另一選擇是,可在所述ECC檢測(cè)到錯(cuò)誤后但在使用所述ECC來(lái)校正所述錯(cuò)誤之前采用一容限讀取。在任一情況下,均使用所述ECC來(lái)驗(yàn)證借助容限讀取的數(shù)據(jù)的有效性。如果不能以此方式讀取有效數(shù)據(jù),則讀取第二固件副本。
可在所述快閃存儲(chǔ)器的一保留區(qū)段內(nèi)設(shè)定一“固件存在”旗標(biāo)以指示存儲(chǔ)所述固件碼的一副本。然后,所述啟動(dòng)碼促使在尋址包含所述啟動(dòng)碼的區(qū)域之前讀取所述旗標(biāo)。如果所述旗標(biāo)不指示存在一相關(guān)的固件副本,則不做讀取所述旗標(biāo)的嘗試。對(duì)于有效存儲(chǔ)的固件也可使用一“不加載”旗標(biāo)以防止在正執(zhí)行診斷時(shí)加載所述固件。所述二個(gè)旗標(biāo)的組合控制所述微處理器是否嘗試從所述快閃存儲(chǔ)器讀取及加載固件。
本發(fā)明的其他方面、優(yōu)點(diǎn)及特征包含在以下關(guān)于其實(shí)例的說(shuō)明中,應(yīng)結(jié)合附圖閱讀此說(shuō)明。本文所引用的所有專利案、專利申請(qǐng)案、文章及其它公告案的全部?jī)?nèi)容均出于各種目的以引用的方式并入本文中。
圖1是一其中可實(shí)施本發(fā)明各個(gè)方面的非易失性存儲(chǔ)器系統(tǒng)的方塊圖;圖2示意性地說(shuō)明圖1的系統(tǒng)的非易失性存儲(chǔ)器的地址空間,其顯示包括其一映像圖及固件文件在內(nèi)的保留文件的存儲(chǔ);圖3說(shuō)明存儲(chǔ)在圖1及2的非易失性存儲(chǔ)器內(nèi)的映像文件的數(shù)據(jù)內(nèi)容;
圖4是一顯示圖1的存儲(chǔ)器系統(tǒng)在系統(tǒng)初始化后即刻將固件從非易失性存儲(chǔ)器上載到控制器的操作的一第一實(shí)施例的流程圖;圖5說(shuō)明圖4的流程圖所說(shuō)明的操作的一個(gè)方面;圖6是一顯示將固件從一主機(jī)下加載到圖1的非易失性存儲(chǔ)器系統(tǒng)內(nèi)的流程圖;圖7是一顯示在卡制造期間發(fā)生的一裝載或升級(jí)固件的操作的流程圖;及圖8是一顯示圖1的存儲(chǔ)器系統(tǒng)在系統(tǒng)初始化后即刻將固件從非易失性存儲(chǔ)器上載到控制器的操作的一第二實(shí)施例的流程圖。
具體實(shí)施例方式
如上文背景技術(shù)中所述的快閃EEPROM系統(tǒng)在功能上可如圖1所示。一非易失性存儲(chǔ)器系統(tǒng)11通常包括一非易失性存儲(chǔ)器單元陣列13和一控制器15。存儲(chǔ)器單元陣列13可以是上文背景技術(shù)中所述的類型,或某些其它類型的可再編程非易失性存儲(chǔ)器。所述控制器包括與存儲(chǔ)器單元陣列13介接的電路17、一微處理器19、一隨機(jī)存取存儲(chǔ)器(RAM)21、一只讀存儲(chǔ)器(ROM)23、錯(cuò)誤校正碼(ECC)計(jì)算電路25及主機(jī)接口電路27。存儲(chǔ)器系統(tǒng)11通過(guò)主機(jī)接口電路27連接至一主機(jī)29。主機(jī)29可以是一個(gè)人計(jì)算機(jī)、數(shù)字照相機(jī)、個(gè)人數(shù)字助理、蜂窩式電話、數(shù)字音頻播放器或其它需要此一非易失性存儲(chǔ)器系統(tǒng)的電子系統(tǒng)。存儲(chǔ)器系統(tǒng)11可以嵌入所述主機(jī)內(nèi),并因此構(gòu)成所述主機(jī)系統(tǒng)的一部分,或者呈一以電及機(jī)械可拆除方式與所述主機(jī)連接的卡的形式。
對(duì)于用于具有一內(nèi)部控制器的快閃存儲(chǔ)器的此類可拆除卡,存在若干現(xiàn)有的標(biāo)準(zhǔn)。一此類標(biāo)準(zhǔn)(即個(gè)人計(jì)算機(jī)(PC)卡標(biāo)準(zhǔn))提供三種類型的個(gè)人計(jì)算機(jī)卡的規(guī)格。所述個(gè)人計(jì)算機(jī)卡標(biāo)準(zhǔn)是個(gè)人計(jì)算機(jī)記憶卡國(guó)際協(xié)會(huì)(PCMCIA)的產(chǎn)物。CompactFlashTM卡(CFTM卡)在功能上可與所述個(gè)人計(jì)算機(jī)卡兼容但要小得多。一甚至更小的非易失性記憶卡是多媒體卡(MMCTM)。MMCTM卡的一具有約相同尺寸的修改版本是后來(lái)的安全數(shù)字(SD)卡。對(duì)于適合用作記憶卡的這些及其它電子卡,存在若干標(biāo)準(zhǔn)。所述標(biāo)準(zhǔn)中的一些標(biāo)準(zhǔn)對(duì)任何公眾成員開放,而其它標(biāo)準(zhǔn)則對(duì)使用所述卡而形成的協(xié)會(huì)成員開放。
在操作中,控制器11從主機(jī)29接收數(shù)據(jù)區(qū)段連同將要編程所述數(shù)據(jù)的邏輯地址。然后,所述控制器將所述地址映像到存儲(chǔ)器單元陣列13內(nèi)物理頁(yè)面的地址內(nèi)。圖2中給出陣列13的一實(shí)例性物理存儲(chǔ)器地址映像圖。所述存儲(chǔ)器被劃分成若干區(qū)塊,例如一區(qū)塊31,其中每一區(qū)塊均是作為單一抹除操作一部分而一起抹除的最小存儲(chǔ)器單元單位。進(jìn)而,每一區(qū)塊被劃分成若干存儲(chǔ)器單元頁(yè)面,例如頁(yè)面31的頁(yè)面33、35、37和39。盡管為解說(shuō)簡(jiǎn)單起見顯示每一區(qū)塊內(nèi)僅存在四個(gè)頁(yè)面,但通常使用更多的頁(yè)面。發(fā)展趨勢(shì)是具有更多頁(yè)面的更大區(qū)塊,其中每一頁(yè)面均存儲(chǔ)多個(gè)數(shù)據(jù)區(qū)段。
存儲(chǔ)器單元陣列13被劃分成眾多區(qū)塊,如圖2所示。所述區(qū)塊中的數(shù)個(gè)區(qū)塊被指定為“保留區(qū)塊”,以用于存儲(chǔ)控制器15用來(lái)管理陣列13的操作并與主機(jī)29通訊的固件、參數(shù)及其它數(shù)據(jù)。此實(shí)例中顯示區(qū)塊41、43、45、47及49是保留區(qū)塊。所述區(qū)塊無(wú)需是所述相同存儲(chǔ)器系統(tǒng)的不同副本中的相同區(qū)塊,而且甚至可能在一單一存儲(chǔ)器系統(tǒng)操作期間動(dòng)態(tài)地重新指定所述區(qū)塊(如果變化的條件使得重新指定合意的話)。控制器15不允許主機(jī)29存取所述保留區(qū)塊,相反,所述控制器使用存儲(chǔ)于所述保留區(qū)塊內(nèi)的數(shù)據(jù)來(lái)操作所述系統(tǒng)。控制器15可使用所述系統(tǒng)的其余區(qū)塊來(lái)存儲(chǔ)由主機(jī)29提供的用戶數(shù)據(jù),不過(guò),在某些情況下,不允許若干區(qū)塊用于正常使用并將其指定為可在所述系統(tǒng)操作期間替代其它區(qū)塊的冗余區(qū)塊(如果此變得需要的話)。所述控制器將邏輯地址從所述主機(jī)映像到變得可用于存儲(chǔ)用戶數(shù)據(jù)的陣列的物理地址空間內(nèi)。
為解說(shuō)所述控制器對(duì)操作固件的存儲(chǔ)及使用,顯示所述固件的第一副本是存儲(chǔ)于相鄰的保留區(qū)塊47及49內(nèi),然而,不一定需要將超出一個(gè)區(qū)塊容量的固件存儲(chǔ)于物理上相鄰的區(qū)塊內(nèi)。所述固件的一第二副本存儲(chǔ)于保留區(qū)塊41及43內(nèi)。由于所述控制器所使用的固件及其它數(shù)據(jù)(例如,操作參數(shù)的數(shù)據(jù))對(duì)于所述存儲(chǔ)器系統(tǒng)的操作是如此重要,因此將其存儲(chǔ)在二個(gè)副本內(nèi)以確保防止在使用所述存儲(chǔ)器系統(tǒng)時(shí)所述第一副本隨時(shí)間而可能遭到破壞。所述固件文件所占據(jù)的區(qū)塊數(shù)量當(dāng)然取決于所述文件的尺寸及所述區(qū)塊的數(shù)據(jù)存儲(chǔ)容量。
在所述系統(tǒng)的初始化(例如在通電時(shí)發(fā)生或響應(yīng)一硬重置)期間,將所述固件碼的一副本從快閃存儲(chǔ)器13加載到所述控制器的RAM 21內(nèi)。然后,微處理器19執(zhí)行來(lái)自RAM 21的固件碼。為了在加載所述固件碼時(shí)向微處理器19提供指令,在ROM 23內(nèi)提供少量的啟動(dòng)碼。一旦系統(tǒng)初始化,微處理器19便讀取并執(zhí)行所述啟動(dòng)碼的指令以將一固件副本及其它必需的操作數(shù)據(jù)從快閃存儲(chǔ)器13的保留區(qū)段加載到RAM 21內(nèi)。然后,微處理器19執(zhí)行所加載的固件碼的指令以控制所述存儲(chǔ)器系統(tǒng)的操作。對(duì)于通常類型的ROM 23,由于不能容易地更新或以其它方式改變所述啟動(dòng)碼,因此將盡可能多的系統(tǒng)碼放置于快閃存儲(chǔ)器13內(nèi)存儲(chǔ)的固件碼內(nèi),因?yàn)榭扇菀椎刂匦聦懭氪斯碳a。
所述啟動(dòng)碼促使所述微處理器起初存取所述快閃存儲(chǔ)器內(nèi)一包含一映射圖(其包括此信息)的較小文件,而非將所述固件及操作數(shù)據(jù)的地址永久地包含于所述啟動(dòng)碼快閃存儲(chǔ)器內(nèi)。在此實(shí)例中,將所述映像圖存儲(chǔ)于所述快閃存儲(chǔ)器的一頁(yè)面中。為了能夠?qū)⒋擞诚駡D存儲(chǔ)于若干頁(yè)面中的任一頁(yè)面中,所述啟動(dòng)碼促使所述微處理器依次存取若干指定的頁(yè)面并從所述頁(yè)面中讀取所述數(shù)據(jù)直至其找到所述映像圖。圖2中顯示此操作的一實(shí)例,其中指定頁(yè)面51、53、55及57。在此實(shí)例中,所述指定頁(yè)面物理地分布于整個(gè)陣列的不同位置處的若干區(qū)塊的第一頁(yè)面(頁(yè)面0)。因此,如果已知所述陣列中的某些位置比其它位置更佳,則將所述映像數(shù)據(jù)編程到所述較佳位置內(nèi),因?yàn)檫@對(duì)于控制器能夠精確地讀取所述映像圖很重要。例如,在具有一或數(shù)千吉位用戶數(shù)據(jù)存儲(chǔ)容量的一存儲(chǔ)器系統(tǒng)中,可指定十或十二個(gè)此類潛在的映像頁(yè)面。
圖3中顯示存儲(chǔ)于一實(shí)例地址映像頁(yè)面中的數(shù)據(jù)。字段61包含一識(shí)別所述頁(yè)面包含所述地址映像數(shù)據(jù)的唯一簽名。所述微處理器需要存取的若干保留文件的地址數(shù)據(jù)包含在所述地址映像頁(yè)面中,圖3中顯示兩個(gè)此類保留文件0及1的數(shù)據(jù)。每一保留文件均包括四個(gè)數(shù)據(jù)字段。對(duì)于保留文件0,字段63包含所述文件的一識(shí)別符(ID)??蓪⒋宋募付楣碳募?。字段65規(guī)定所述文件的長(zhǎng)度,例如頁(yè)面的數(shù)量。字段67中規(guī)定所述快閃存儲(chǔ)器內(nèi)所述保留文件的一第一副本的一地址,字段69中規(guī)定其第二副本的一地址。所述地址通常將是所述文件的第一頁(yè),其存儲(chǔ)于所述文件長(zhǎng)度字段65所表示的若干連續(xù)頁(yè)面中。所述地址映像圖內(nèi)還包括所述保留文件1的相同數(shù)據(jù)、至少在所述初始化過(guò)程期間需要由所述控制器處理的任何其它數(shù)據(jù)。
將固件上載到控制器的第一實(shí)施例圖4的一流程圖顯示初始化存儲(chǔ)器系統(tǒng)11以將固件碼從快閃存儲(chǔ)器13加載到控制器RAM 21內(nèi)的一實(shí)例。如步驟71所示,一旦給所述系統(tǒng)通電或在一通電的系統(tǒng)中接收一硬重置,所述過(guò)程便開始。下一步驟73初始化所述控制器專用集成電路(ASIC),向快閃存儲(chǔ)器13供電并向所述主機(jī)傳送一指示所述存儲(chǔ)器忙碌的信號(hào)。然后在步驟75中,讀取并通過(guò)微處理器19來(lái)執(zhí)行ROM 23內(nèi)的啟動(dòng)碼。
步驟75包括在快閃存儲(chǔ)器內(nèi)定位所述地址映像頁(yè)面(參見圖2),讀取所述地址映像頁(yè)面且然后讀取一保留區(qū)塊內(nèi)的一文件,所述文件在所述地址映像中被識(shí)別為包括二個(gè)一位的旗標(biāo)。所述旗標(biāo)中的一個(gè)是一“FW_Present”旗標(biāo),其指示所述快閃存儲(chǔ)器內(nèi)是否存儲(chǔ)有固件碼。此旗標(biāo)允許所述控制器在所述快閃存儲(chǔ)器內(nèi)不存在任何固件碼的情況下避免嘗試讀取固件碼。當(dāng)希望不將所述固件加載到所述控制器內(nèi)(即便所述固件存在于所述快閃存儲(chǔ)器內(nèi))時(shí),設(shè)定一第二“不加載”旗標(biāo)。例如,當(dāng)在無(wú)固件碼的情況下執(zhí)行診斷例程時(shí),設(shè)定此第二旗標(biāo)。但是,如果未預(yù)期此一操作,則不需要使用所述“不加載”旗標(biāo)。如果使用所述“不載入”旗標(biāo),則可將其存儲(chǔ)于所述快閃存儲(chǔ)器外,例如一寄存器或一硬件旗標(biāo)內(nèi)。假定使用二個(gè)旗標(biāo),則下一步驟77決定所述旗標(biāo)是否指示存在固件而不存在所設(shè)定的“不加載”旗標(biāo)。如果指示,則以一步驟79開始的一序列繼續(xù)加載所述固件。如果不指示,則所述控制器進(jìn)入一閑置回路,如步驟101所指示,且可選擇讓所述主機(jī)介入來(lái)控制所述過(guò)程。
作為將所述二個(gè)旗標(biāo)作為二個(gè)數(shù)據(jù)位存儲(chǔ)于一保留區(qū)段內(nèi)的一替代方案,可指定所述封裝外的二個(gè)管腳用于設(shè)定所述二個(gè)位。例如,如果所述管腳其中之一接地,則設(shè)定那個(gè)管腳所代表的旗標(biāo)。從而,作為步驟75及77的一部分,詢問(wèn)所述管腳的電狀態(tài)。
如步驟79所指示,所述控制器設(shè)置自身以讀取所述固件,其中包括匯編步驟75中從所述地址映像頁(yè)面讀取的二個(gè)副本的地址并準(zhǔn)備讀取所述第一副本??稍谧x取所述FW_Present旗標(biāo)(步驟75)的同時(shí)從所述保留區(qū)塊中讀取標(biāo)稱讀取條件,例如在針對(duì)特定存儲(chǔ)器陣列的讀取期間擬使用的各種電壓電平,并在所述步驟79中使用所述標(biāo)稱讀取條件設(shè)置所述讀取。
在步驟81中,讀取所述第一固件副本的第一頁(yè)面。在此實(shí)例中,由于每一頁(yè)面均存儲(chǔ)一數(shù)據(jù)區(qū)段,因此術(shù)語(yǔ)“區(qū)段”在所述流程圖中用作讀取單位。假如所述個(gè)別頁(yè)面將要存儲(chǔ)二個(gè)、四個(gè)或更多個(gè)數(shù)據(jù)區(qū)段,則將會(huì)同時(shí)讀取一頁(yè)面內(nèi)的所有數(shù)據(jù)區(qū)段。然而,如圖4的流程圖所指示,一次仍只可處理一個(gè)數(shù)據(jù)區(qū)段。
基本上采取與從所述快閃存儲(chǔ)器中讀取任何數(shù)據(jù)相同的方式將讀取的固件數(shù)據(jù)傳遞經(jīng)過(guò)所述控制器的ECC電路25。從每一數(shù)據(jù)區(qū)段中計(jì)算出一ECC并將所述ECC與作為所述區(qū)段的一部分存儲(chǔ)為開銷數(shù)據(jù)的ECC相比較。所存儲(chǔ)的ECC是在其編程期間根據(jù)所述數(shù)據(jù)計(jì)算得出。只要在所述區(qū)段層執(zhí)行錯(cuò)誤校正,便可進(jìn)行此操作,無(wú)論每一頁(yè)面中是否存儲(chǔ)有一個(gè)或一個(gè)以上數(shù)據(jù)區(qū)段。另一選擇是,如果將一單一ECC用于一單一頁(yè)面內(nèi)的多個(gè)主機(jī)區(qū)段數(shù)據(jù),則對(duì)一頁(yè)面僅進(jìn)行一次所述ECC檢查。然而,按慣例每一數(shù)據(jù)區(qū)段包括二個(gè)ECC,一個(gè)用于所述固件數(shù)據(jù)部分,而另一個(gè)用于包括所述數(shù)據(jù)ECC及/或其它操作參數(shù)的開銷部分。作為另一替代方案,可將與一個(gè)或一個(gè)以上固件數(shù)據(jù)區(qū)段相關(guān)的開銷數(shù)據(jù)存儲(chǔ)于不同于所述固件數(shù)據(jù)的一頁(yè)面或區(qū)塊內(nèi),但連續(xù)讀取所述開銷數(shù)據(jù)并使其相關(guān)在一起。
在一步驟83中,在所說(shuō)明的特定實(shí)例中,ECC電路25促使從讀取的固件數(shù)據(jù)中計(jì)算一ECC,而且作為與連同所述數(shù)據(jù)一起讀取的ECC的比較結(jié)果,提供若干指示所述ECC所覆蓋的所讀取數(shù)據(jù)區(qū)段狀態(tài)的輸出位。然后,執(zhí)行所述啟動(dòng)碼的處理器19促使讀取所述狀態(tài)位。如果所述狀態(tài)位指示所讀取的數(shù)據(jù)內(nèi)無(wú)錯(cuò)誤,則如步驟85所示,為讀取下一頁(yè)面而更新所述頁(yè)面地址及類似者。如果未讀取包含所述固件文件的第一副本的所有頁(yè)面,則所述處理返回到步驟79以讀取下一頁(yè)面。然而,如果剛讀取的頁(yè)面是所述第一固件文件的最后頁(yè)面,則所述處理繼續(xù)進(jìn)行下文說(shuō)明的步驟95、97及99。
但是,如果在步驟83中,來(lái)自所述ECC電路25的狀態(tài)位指示所述讀取位中一個(gè)或一個(gè)以上位是錯(cuò)誤的,則接下來(lái)在步驟89中通過(guò)執(zhí)行所述啟動(dòng)碼來(lái)決定是否啟用控制器15以使用所述ECC來(lái)校正所述錯(cuò)誤(如果能的話)。下文對(duì)此進(jìn)行解說(shuō)。如果啟用,則在步驟91中由執(zhí)行所述啟動(dòng)碼的微處理器19依據(jù)所述狀態(tài)位確定所述錯(cuò)誤的數(shù)量及類型是否可由所使用的特定錯(cuò)誤校正算法來(lái)校正。如果能,則在步驟93中通過(guò)執(zhí)行所述啟動(dòng)碼來(lái)校正所讀取的數(shù)據(jù),而然后所述處理繼續(xù)進(jìn)行到步驟85,好似已無(wú)任何錯(cuò)誤地讀取了所述數(shù)據(jù)。但是如果依據(jù)ECC電路25所產(chǎn)生的狀態(tài)位確定不能通過(guò)使用所述啟動(dòng)碼中所包括的錯(cuò)誤校正算法來(lái)校正所述錯(cuò)誤,則在步驟105中識(shí)別依次輪到的下一固件副本。一典型的ECC算法能夠依據(jù)位錯(cuò)誤的復(fù)雜性而識(shí)別給定數(shù)量的位錯(cuò)誤,但能夠校正的位數(shù)量要少于所識(shí)別的給定數(shù)量。例如,如果不能校正第一固件文件副本0的區(qū)段數(shù)據(jù),則代之以讀取并使用第二固件文件副本1的相同區(qū)段。步驟107確定是否保留一未讀取的固件數(shù)據(jù)副本,且如果保留,則促使所述處理繼續(xù)回到步驟81以對(duì)所述第二固件副本的相同區(qū)段重復(fù)上面說(shuō)明的過(guò)程。但是,如果未成功地從所述固件碼的二個(gè)副本(或者二個(gè)以上副本,如果提供了的話,)讀取所述區(qū)段,則所述處理繼續(xù)進(jìn)行到步驟109,如下文所說(shuō)明。
但是首先返回步驟89,如果未啟用校正(此是尋常的初始條件),則下一步驟103促使設(shè)定一旗標(biāo)以指示存在一ECC錯(cuò)誤。然后,在剛才說(shuō)明的回路中,通過(guò)步驟105、107、81及后面的步驟來(lái)讀取下一副本的相同區(qū)段。通過(guò)步驟103設(shè)定的旗標(biāo)與一固件副本中包含一個(gè)或一個(gè)以上位錯(cuò)誤的區(qū)段相關(guān),且優(yōu)選地存儲(chǔ)為所述區(qū)段的開銷數(shù)據(jù)的一部分或存儲(chǔ)在其它地方以供隨后參考,以便就所述數(shù)據(jù)區(qū)段采取某一補(bǔ)救動(dòng)作。所述固件可包括一例程以用于搜尋在所述上載過(guò)程期間設(shè)定的所有此類旗標(biāo),從而一旦成功地將所述固件加載到所述控制器內(nèi),便可采取某一動(dòng)作來(lái)直接校正所述快閃存儲(chǔ)器內(nèi)存儲(chǔ)的錯(cuò)誤固件數(shù)據(jù)區(qū)段或解決所述錯(cuò)誤數(shù)據(jù)的一可能成因。舉例而言,此時(shí)可通過(guò)校正所述數(shù)據(jù)且然后在相同的快閃存儲(chǔ)器頁(yè)面中重新寫入經(jīng)校正的數(shù)據(jù)來(lái)擦除或刷新旗標(biāo)所指示的固件數(shù)據(jù)區(qū)段。例如,美國(guó)專利案第5,532,962、6,151,246及6,222,762號(hào)及2003年10月3日申請(qǐng)的序列號(hào)為10/678,345的美國(guó)專利申請(qǐng)案中即說(shuō)明了若干特定的擦除過(guò)程??赏ㄟ^(guò)使用一區(qū)段數(shù)據(jù)ECC或通過(guò)以不同于正常所用的參考電平讀取數(shù)據(jù)(“容限讀取”)來(lái)校正所述區(qū)段的數(shù)據(jù),以便對(duì)已經(jīng)移動(dòng)(或似乎已由于與其它電荷存儲(chǔ)組件的場(chǎng)耦合而移動(dòng))出原始嚴(yán)格范圍(對(duì)于所存儲(chǔ)的電荷電平已編程至的狀態(tài))外的所存儲(chǔ)的電荷電平做出補(bǔ)償。另一選擇是,可從所述固件的另一副本讀取具有未校正錯(cuò)誤的數(shù)據(jù)區(qū)段,并將所述數(shù)據(jù)區(qū)段插入所校正的副本。然后,將所校正的副本重新寫入所述快閃存儲(chǔ)器,優(yōu)選重新寫入一新的位置內(nèi),但也可重新寫入至相同的位置(在抹除后)。
再次返回步驟89,在此實(shí)例中,最初停用對(duì)任何錯(cuò)誤讀取數(shù)據(jù)的校正。首先從依次輪到的下一固件副本中讀取相同的區(qū)段直至確定不能無(wú)錯(cuò)誤地從快閃存儲(chǔ)器內(nèi)存儲(chǔ)的任一副本中讀取一特定數(shù)據(jù)區(qū)段,而非校正來(lái)自一副本的錯(cuò)誤數(shù)據(jù)。此是在無(wú)任何錯(cuò)誤地從所有固件副本中讀取給定區(qū)段的嘗試已失敗后通過(guò)步驟107來(lái)決定。然后,所述處理促使通過(guò)包括步驟109、111、112及113(返回至步驟81)的一回路依序一次一個(gè)地從所述固件副本中重新讀取所述區(qū)段達(dá)一預(yù)定次數(shù),直至無(wú)錯(cuò)誤地讀取所述區(qū)段數(shù)據(jù),從而促使所述處理從步驟83繼續(xù)到步驟85??稍诓煌娜菹迼l件下進(jìn)行所述再試中的某些嘗試,如步驟112所示。
但是,如步驟113所確定,如果此讀取在所允許數(shù)量的再試的最后嘗試后仍未成功,則通過(guò)啟用步驟115中的ECC校正來(lái)允許一旦下一次讀取相同的區(qū)段數(shù)據(jù)便發(fā)生對(duì)所述錯(cuò)誤的校正。當(dāng)步驟83確定存在一可校正的ECC錯(cuò)誤時(shí),此舉促使步驟89將所述處理引導(dǎo)經(jīng)過(guò)步驟91及93的路徑,如上文所說(shuō)明。如果存在一不可校正的ECC錯(cuò)誤,則通過(guò)步驟105及107再次對(duì)所述數(shù)據(jù)區(qū)段的下一副本做相同嘗試。但是,如果借助所述固件數(shù)據(jù)區(qū)段的所有副本的ECC校正進(jìn)行的所述讀取失敗,則在步驟111中,將所述處理置入步驟101所示的閑置回路狀態(tài)。
總之,對(duì)于此實(shí)例實(shí)施方案,當(dāng)二個(gè)固件副本存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)時(shí),可對(duì)二個(gè)副本內(nèi)均有錯(cuò)誤的一給定數(shù)據(jù)區(qū)段進(jìn)行多達(dá)一定次數(shù)的讀取而不嘗試借助所述ECC來(lái)校正所述數(shù)據(jù),所述讀取次數(shù)是由步驟109中建立的再試設(shè)定次數(shù)所決定。然后,借助以所述ECC校正所述數(shù)據(jù)的能力實(shí)施從每一副本中讀取所述給定區(qū)段的最后一次再試。僅在二個(gè)數(shù)據(jù)區(qū)段均不可校正的情況下,所述過(guò)程才失敗。
另一選擇是,但通常并非優(yōu)選,可將步驟89設(shè)定為始終啟用校正,但同時(shí)在步驟103中設(shè)定所述旗標(biāo)用于隨后處理所述區(qū)段內(nèi)的數(shù)據(jù)錯(cuò)誤。在此一情況下,圖4的處理將僅一次性從每一固件副本中讀取所述給定數(shù)據(jù)區(qū)段。讀取所述第一副本,并嘗試通過(guò)所述ECC來(lái)校正其錯(cuò)誤。如果成功,則到達(dá)步驟85。如果不成功,則讀取所述第二固件副本的給定區(qū)段,而且,如果存在錯(cuò)誤,則嘗試校正。如果所述作法均不成功,則所述處理繼續(xù)到步驟109。
盡管圖4中未具體說(shuō)明,但優(yōu)選采取與針對(duì)所述固件副本所述的方式類似的方式來(lái)執(zhí)行讀取所述地址映像頁(yè)面及一保留區(qū)塊的任何部分的步驟75。即,一個(gè)或一個(gè)以上ECC是與此類數(shù)據(jù)存儲(chǔ)在一起并用于在讀取期間確定所讀取的數(shù)據(jù)是否包含任何位錯(cuò)誤。如果包含位錯(cuò)誤且如果可校正,則可通過(guò)使用所述ECC來(lái)校正所述數(shù)據(jù)。如果不可校正,則可在不同的讀取條件下重新讀取所述數(shù)據(jù)。如果錯(cuò)誤仍然存在,則對(duì)重新讀取的數(shù)據(jù)使用所述ECC。一旦得到校正,便重寫有錯(cuò)誤的映射頁(yè)面及/或保留區(qū)塊部分,通常寫入所述快閃存儲(chǔ)器內(nèi)的一不同位置。如果不能從所述一個(gè)副本中獲得良好的數(shù)據(jù),則可保留所述映像頁(yè)面的一復(fù)制副本。
參考圖5,其在概念上顯示依據(jù)結(jié)合圖4所說(shuō)明的所述處理的一部分從快閃存儲(chǔ)器內(nèi)所存儲(chǔ)的二個(gè)副本中成功地讀取固件的一實(shí)例。為解說(shuō)簡(jiǎn)單起見假定所述固件為8個(gè)區(qū)段長(zhǎng),讀入控制器RAM 21的一固件文件121的所述8個(gè)區(qū)段被顯示為取自二個(gè)固件副本123與125。區(qū)段0、1、2、4、5及7來(lái)自第一固件文件123及區(qū)段3和6,由于不能從所述第一副本中成功地讀取所述區(qū)段,因此,其是取自第二固件文件125。
返回圖4的處理流程圖,特別是步驟87,一旦已讀取一固件文件(例如圖5的文件121),所述處理便繼續(xù)到步驟95。作為步驟95的一部分,檢查所讀取的固件文件的開銷字段127及129(圖5)。該些字段各自包含所述固件文件的長(zhǎng)度及ROM 23內(nèi)存儲(chǔ)的啟動(dòng)碼版本的一指定,因?yàn)樗鰡?dòng)碼在不同的存儲(chǔ)器系統(tǒng)中可能隨時(shí)間變化。將所讀取文件121的實(shí)際長(zhǎng)度與從字段127和129中讀取的值相比較。還將從字段127及129讀取的所述ROM啟動(dòng)碼版本的指定與所述啟動(dòng)碼本身中所包括的一版本指定相比較。如果在所述步驟97中確定所述長(zhǎng)度及啟動(dòng)碼指定的比較均為肯定的話,則將固件文件121(圖5)上載到控制器RAM 21(圖1),而所述過(guò)程結(jié)束。但是,如果所述固件文件長(zhǎng)度或所述啟動(dòng)碼版本指定的比較均為否定的話,則如步驟101所示,所述處理停止直至從所述主機(jī)接收某些進(jìn)一步的指令。
將固件下載至快閃存儲(chǔ)器圖6說(shuō)明用于將固件編程到圖1及2的存儲(chǔ)器系統(tǒng)11的快閃存儲(chǔ)器13的保留區(qū)段的一過(guò)程。此過(guò)程通常是在生產(chǎn)的最后階段或在更新較早制造的卡的固件時(shí)由存儲(chǔ)器系統(tǒng)的制造商通過(guò)主機(jī)系統(tǒng)29(通常是計(jì)算機(jī)形式)來(lái)完成。所述存儲(chǔ)器系統(tǒng)的采購(gòu)者及用戶通常將不會(huì)將固件碼加載到所述快閃存儲(chǔ)器內(nèi)。
參考圖6,步驟131指示所述下載過(guò)程的起點(diǎn)。在步驟133期間,交替地將不同的數(shù)據(jù)模式寫入各種快閃存儲(chǔ)器區(qū)塊,并從不同的快閃存儲(chǔ)器區(qū)塊讀取不同的數(shù)據(jù)模式,所述快閃存儲(chǔ)器區(qū)塊是存儲(chǔ)所述固件數(shù)據(jù)的保留區(qū)塊的候選者。作為此測(cè)試的結(jié)果,選擇一個(gè)或一個(gè)以上區(qū)塊的各二個(gè)固件碼存儲(chǔ)區(qū)域(例如,圖2中的區(qū)塊對(duì)41、43及47、49)。僅選擇允許無(wú)任何錯(cuò)誤地讀取已編程測(cè)試數(shù)據(jù)的區(qū)塊。進(jìn)一步,可額外地對(duì)所存儲(chǔ)的測(cè)試數(shù)據(jù)執(zhí)行一測(cè)試以決定所存儲(chǔ)的電荷電平是否在最佳范圍內(nèi)。同樣,可在編程所述測(cè)試數(shù)據(jù)后使所述存儲(chǔ)器系統(tǒng)經(jīng)歷各種環(huán)境例程以決定所存儲(chǔ)的數(shù)據(jù)是否因此而改變。
在下一步驟135中,所述主機(jī)計(jì)算機(jī)將下載固件加載到所述控制器RAM 21內(nèi)以提供指令將所述存儲(chǔ)器控制固件寫入快閃存儲(chǔ)器13的選定保留區(qū)塊內(nèi)(圖1及2)。接下來(lái),在步驟137中,通過(guò)所述主機(jī)來(lái)讀取作為擬編程到所述快閃存儲(chǔ)器的固件的一部分存儲(chǔ)的ROM啟動(dòng)碼兼容性指示以及存儲(chǔ)于所述ROM 23內(nèi)的啟動(dòng)碼版本指示并對(duì)其進(jìn)行比較。所述存儲(chǔ)器系統(tǒng)控制固件的下載僅在與永久且不可重寫地存儲(chǔ)于ROM23內(nèi)的啟動(dòng)碼相兼容的情況下才會(huì)繼續(xù)。如果指明不兼容性,則補(bǔ)救辦法是將擬加載到所述快閃存儲(chǔ)器內(nèi)的系統(tǒng)固件碼的版本改變成一與已存在的ROM啟動(dòng)碼兼容的版本。
然后,在步驟139中,所述主機(jī)向控制器15發(fā)送一固件寫入命令,而在步驟141中,控制器15最初通過(guò)清除所述FW_Present旗標(biāo)來(lái)作出回應(yīng)。上文已說(shuō)明此旗標(biāo)。接下來(lái),在步驟143中,所述主機(jī)將所述固件數(shù)據(jù)的一組區(qū)段轉(zhuǎn)移至所述存儲(chǔ)器系統(tǒng)。如步驟145所示,指定由步驟133選擇用于存儲(chǔ)所述固件碼的二個(gè)保留區(qū)塊區(qū)域其中之一來(lái)接收所述第一固件碼副本。然后控制器15將先前從所述主機(jī)接收的固件數(shù)據(jù)區(qū)段編程到所述第一選定保留區(qū)塊內(nèi),如步驟147所示。如果此編程步驟成功,如步驟149所確定,則所述控制器促使將所述相同的固件數(shù)據(jù)區(qū)段編程到所述第二選定保留區(qū)塊內(nèi)。包括步驟151、153及145在內(nèi)的一局部回路促使尋址所述第二位置,且其中通過(guò)步驟147將相同的數(shù)據(jù)區(qū)塊編程到所述第二位置內(nèi)。
一旦已將該組數(shù)據(jù)區(qū)塊編程到所述快閃存儲(chǔ)器的二個(gè)位置內(nèi),則所述處理繼續(xù)到一步驟155以確定是否有更多的固件數(shù)據(jù)區(qū)段需要編程。如果有,則在步驟143中通過(guò)所述主機(jī)來(lái)發(fā)送另一組數(shù)據(jù)區(qū)段,并通過(guò)包括步驟145至153在內(nèi)的回路以相同的方式將所述數(shù)據(jù)區(qū)段編程到二個(gè)快閃存儲(chǔ)器位置內(nèi)。如步驟155所確定,在以此方式將所有固件碼區(qū)段編程后,設(shè)定FW_Present旗標(biāo)(如步驟157所示),并在步驟159中完成所述下載操作。
如果在步驟149中檢測(cè)到一組區(qū)段編程失敗,則將步驟147中對(duì)所述區(qū)段的編程重復(fù)預(yù)定次數(shù),如步驟161及163所示。如果在所述次數(shù)的嘗試中未成功地完成對(duì)任何一組區(qū)段的編程,則在步驟165中指明所述過(guò)程操作的失敗,并終止所述過(guò)程。
盡管如上文背景技術(shù)中所述在多狀態(tài)中操作所述快閃存儲(chǔ)器以每一電荷存儲(chǔ)組件存儲(chǔ)多于一個(gè)數(shù)據(jù)位,但可操作一多狀態(tài)系統(tǒng)的保留區(qū)塊以每一電荷存儲(chǔ)組件存儲(chǔ)較少數(shù)量的一個(gè)或一個(gè)以上位。舉例而言,如果是在用于用戶數(shù)據(jù)的八個(gè)狀態(tài)中操作所述電荷存儲(chǔ)組件,則可以每一電荷存儲(chǔ)組件四個(gè)狀態(tài)將數(shù)據(jù)存儲(chǔ)于所述保留區(qū)塊內(nèi)。同樣,如果所述用戶數(shù)據(jù)將被存儲(chǔ)在四個(gè)狀態(tài)中,則可以二進(jìn)制來(lái)存儲(chǔ)保留區(qū)塊數(shù)據(jù)。此舉對(duì)于存儲(chǔ)所述存儲(chǔ)器映像圖及固件的保留區(qū)塊尤其有價(jià)值。由于當(dāng)采用較少數(shù)量的狀態(tài)時(shí)定義每一狀態(tài)的范圍較大,因此,以較少數(shù)量的狀態(tài)存儲(chǔ)的數(shù)據(jù)不太會(huì)受到錯(cuò)誤的讀取。當(dāng)每一電荷存儲(chǔ)組件中存儲(chǔ)較少的狀態(tài)時(shí),在存儲(chǔ)器晶體管閾電壓范圍與電荷存儲(chǔ)電平范圍之間有較大的容限,且所述范圍較大。當(dāng)然,以較少數(shù)量的狀態(tài)操作的區(qū)塊中存儲(chǔ)較少的數(shù)據(jù),但存儲(chǔ)上文所述的存儲(chǔ)器映像、操作參數(shù)、旗標(biāo)及固件的保留區(qū)塊的此類操作不會(huì)明顯地影響所述存儲(chǔ)器的存儲(chǔ)容量,因?yàn)榇藘H需在較少數(shù)量的狀態(tài)中操作小部分存儲(chǔ)器。
圖7顯示記憶卡形式的此類系統(tǒng)的制造商用于將固件數(shù)據(jù)編程到快閃存儲(chǔ)器系統(tǒng)內(nèi)的一整個(gè)過(guò)程,此過(guò)程既用于新的空白卡也用于其中正更新固件的卡。此過(guò)程包括使用圖4步驟165中的固件上載以及圖6步驟167中的固件下載。首先,將所述卡與一主機(jī)連接,所述主機(jī)在步驟169與171中確定所述記憶卡是否是一空白卡。如果是空白卡,則在步驟173及175中將所述存儲(chǔ)器陣列格式化。接下來(lái),如先前結(jié)合圖6所述,將所述固件副本編程到所述卡存儲(chǔ)器陣列內(nèi)。一旦在步驟177中確定已成功地將所述固件編程到所述卡內(nèi),所述過(guò)程即結(jié)束。然后所述卡準(zhǔn)備好供使用。
如果在步驟171中確定所述卡并非空白,則將假定駐留于所述快閃存儲(chǔ)器內(nèi)的固件加載到所述控制器RAM內(nèi),如上面結(jié)合圖4所述。如果在一步驟179中確定所述固件上載失敗,則執(zhí)行一失敗分析功能181以了解所述失敗的原因。在圖4中,當(dāng)所述過(guò)程處于閑置回路101中時(shí),認(rèn)定存在失敗。然后,作為響應(yīng)而舍棄所述卡。
但是,如果在步驟179中確定已正確地上載所述固件,且如果確定需要重新格式化所述卡(步驟183)或應(yīng)將所述固件升級(jí)至一更新的版本(步驟185),則可通過(guò)步驟167的過(guò)程重新寫入所述固件。然而,如果既不需要重新格式化也不需要固件升級(jí),則對(duì)所述固件正確地從所述快閃存儲(chǔ)器加載到所述控制器RAM內(nèi)的確認(rèn)致使所述過(guò)程結(jié)束。然后,已確認(rèn)所述卡準(zhǔn)備好供使用。
將固件上載到控制器的第二實(shí)施例圖8顯示在所述ROM啟動(dòng)碼控制下將所述固件從快閃存儲(chǔ)器13上載進(jìn)入控制器15的RAM 21(圖1)的一過(guò)程的一第二實(shí)施例。此程序類似于上文結(jié)合圖4所述的第一實(shí)施例。圖8中與圖4的步驟相同或基本上相同的步驟具有相同的參考編號(hào),在此不做進(jìn)一步解說(shuō)。這二個(gè)實(shí)施例之間的差異在于對(duì)所讀取數(shù)據(jù)中存在錯(cuò)誤的確定做出的響應(yīng)。
參考圖8,對(duì)應(yīng)于步驟83中確定已通過(guò)使用所述ECC檢測(cè)到一數(shù)據(jù)錯(cuò)誤,此實(shí)施例的處理直接進(jìn)行到上述步驟103中旗標(biāo)的設(shè)定以供隨后使用。在下一步驟191中,確定是否能通過(guò)所使用的ECC來(lái)校正所述錯(cuò)誤以及所述錯(cuò)誤是否包括比規(guī)定數(shù)量少的位(少于N個(gè)位)。如果是,則在步驟193中通過(guò)所述ECC來(lái)校正所述數(shù)據(jù),而所述處理繼續(xù)讀取下一區(qū)段的固件數(shù)據(jù)。在此實(shí)施例中,僅在擬校正的位數(shù)量較少旦少于所述ECC能夠校正的讀取區(qū)段的位數(shù)量的情況下,才會(huì)在所述處理的此較早階段校正所述錯(cuò)誤數(shù)據(jù)。此是因?yàn)樾U鰯?shù)據(jù)要花費(fèi)與所校正的位數(shù)量相關(guān)的處理時(shí)間量。
因此,如果步驟191中的確定是不可校正或可校正所述數(shù)據(jù)但所述數(shù)據(jù)有N或多個(gè)位要校正,則下一步驟195決定哪一情況才是實(shí)際情況。如果所述N或多個(gè)錯(cuò)誤位是可校正的,則步驟197確定是否已從所述快閃存儲(chǔ)器內(nèi)存儲(chǔ)的一個(gè)或一個(gè)以上其它固件副本中讀取了所述給定區(qū)段。如果是,則在步驟193中使用所述EEC來(lái)校正所述數(shù)據(jù),而所述處理通過(guò)步驟85而繼續(xù)到擬讀取的下一數(shù)據(jù)區(qū)段。如果仍有尚未讀取其給定區(qū)段的一固件副本,則步驟199切換至促使步驟81讀取另一副本。
但是,如果在步驟197中確定不可校正所述N或多個(gè)錯(cuò)誤位,則可使用步驟201來(lái)確定是否已以一規(guī)則方式從所有所述固件副本中讀取所述給定區(qū)段達(dá)規(guī)定的次數(shù)。如果否,則步驟199將尋址另一固件副本內(nèi)的給定區(qū)段,并將通過(guò)步驟81來(lái)讀取所述區(qū)段。如果所有固件副本均已被讀取規(guī)定的次數(shù),則采用異常努力來(lái)讀取數(shù)據(jù)。規(guī)則讀取的規(guī)定次數(shù)可以是2、3或更多次,但重新讀取數(shù)據(jù)花費(fèi)時(shí)間,而且在初始讀取已產(chǎn)生不可校正的錯(cuò)誤數(shù)據(jù)后,在相同的條件下重新讀取相同的數(shù)據(jù)區(qū)段不太可能提供正確的數(shù)據(jù)。因此,可通過(guò)對(duì)每一固件副本進(jìn)行規(guī)定次數(shù)的讀取來(lái)實(shí)施所述過(guò)程,在所述規(guī)定次數(shù)完成后,如果無(wú)一次讀取成功,則采取異常讀取步驟。
所述異常讀取過(guò)程中的一第一步驟203是確定是否已經(jīng)執(zhí)行從所述給定固件副本中讀取所述給定區(qū)段數(shù)據(jù)的一或多次規(guī)定嘗試。如果未執(zhí)行,則通過(guò)步驟211來(lái)設(shè)定異常讀取參數(shù),并通過(guò)所述不同的參數(shù)而在步驟81中再次讀取所述區(qū)段。但是,如果通過(guò)所述異常讀取參數(shù)對(duì)所述給定數(shù)據(jù)區(qū)段進(jìn)行規(guī)定的一次或多次讀取而未成功,則步驟205確定此情形對(duì)于所述快閃存儲(chǔ)器內(nèi)存儲(chǔ)的其它固件副本是否也如此。如果也如此,則認(rèn)為所述固件上載已失敗,如207中所示,不提供任何其它技術(shù)來(lái)讀取或校正所述錯(cuò)誤數(shù)據(jù)。但是,如果尚未以所述異常方式讀取所有固件副本,則通過(guò)步驟209來(lái)設(shè)定所述異常讀取參數(shù),而下一步驟199促使通過(guò)步驟81來(lái)讀取一不同固件副本的給定區(qū)段。
所述異常讀取過(guò)程可包括步驟209及211中對(duì)更可能讀取錯(cuò)誤數(shù)據(jù)的不同讀取條件的設(shè)定。一稱作“容限”的技術(shù)使得一存儲(chǔ)器單元電荷存儲(chǔ)組件的每一狀態(tài)的讀取范圍比在對(duì)所述數(shù)據(jù)區(qū)段進(jìn)行首次、普通讀取期間使用的讀取范圍加寬。此具有減小所述范圍之間的容限的作用,從而可能在所述讀取過(guò)程中引入其它錯(cuò)誤。但是,當(dāng)不能正常讀取所述數(shù)據(jù)時(shí),容限還可致使正確讀取已漂移出其各自范圍的單元的狀態(tài)。容限讀取的正確與否是通過(guò)使用所述ECC并通過(guò)步驟83及后續(xù)步驟以與正常數(shù)據(jù)讀取相同的方式來(lái)確定。
結(jié)論雖然已經(jīng)依據(jù)本發(fā)明的實(shí)例性實(shí)施例說(shuō)明了本發(fā)明的各個(gè)方面,但是應(yīng)了解,本發(fā)明享有在隨附權(quán)利要求書的完整范疇內(nèi)受到保護(hù)的權(quán)利。
權(quán)利要求
1.一種初始化一存儲(chǔ)器存儲(chǔ)系統(tǒng)的方法,所述存儲(chǔ)器存儲(chǔ)系統(tǒng)具有快閃存儲(chǔ)器,其包含存儲(chǔ)于所述快閃存儲(chǔ)器中不同位置中的固件碼的至少第一及第二副本;一微處理器;一只讀存儲(chǔ)器(ROM),其包含微處理器可存取的啟動(dòng)碼;及一隨機(jī)存取存儲(chǔ)器(RAM),其用于存儲(chǔ)微處理器可存取的固件碼,所述方法包含執(zhí)行所述啟動(dòng)碼以將所述固件的一第一副本從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM,識(shí)別所述固件碼的所述轉(zhuǎn)移的第一副本中的任何位錯(cuò)誤,如果位錯(cuò)誤被識(shí)別為是可校正的,則校正所述錯(cuò)誤位,如果位錯(cuò)誤被識(shí)別是不可校正的,則將所述固件碼的所述第二副本的至少一部分讀入所述RAM,以替代所述第一副本中包含所述不可校正的位錯(cuò)誤的至少一部分,及執(zhí)行來(lái)自所述RAM的所述固件碼的一無(wú)錯(cuò)誤副本。
2.如權(quán)利要求1所述的方法,其中識(shí)別所述轉(zhuǎn)移的第一副本中的任何位錯(cuò)誤包括通過(guò)將所述固件部分在其從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM時(shí)連續(xù)傳遞經(jīng)過(guò)錯(cuò)誤校正碼(ECC)電路而依據(jù)所述固件的所述第一副本的個(gè)別部分來(lái)計(jì)算ECC,并將所述計(jì)算的ECC與先前依據(jù)所述固件數(shù)據(jù)的所述第一副本的所述部分計(jì)算出的ECC進(jìn)行比較。
3.如權(quán)利要求2所述的方法,其中校正所述錯(cuò)誤位包括所述微處理器執(zhí)行所述啟動(dòng)碼的一錯(cuò)誤校正算法以校正錯(cuò)誤位。
4.如權(quán)利要求2所述的方法,其中所述固件碼的所述第一副本的所述個(gè)別部分包括一個(gè)或一個(gè)以上數(shù)據(jù)區(qū)段,及先前依據(jù)所述個(gè)別部分計(jì)算出的并與所述個(gè)別部分一起存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)的一ECC。
5.如權(quán)利要求1所述的方法,其另外包含在執(zhí)行所述啟動(dòng)碼以將所述固件的一第一副本從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM之前進(jìn)行以下操作首先一次一個(gè)位置地存取所述快閃存儲(chǔ)器內(nèi)的復(fù)數(shù)個(gè)固定位置,直至發(fā)現(xiàn)一初始化存儲(chǔ)器映像圖是存儲(chǔ)于所述復(fù)數(shù)個(gè)固定位置的至少一位置處且其包含其中存儲(chǔ)有所述固件碼的至少第一及第二副本的所述快閃存儲(chǔ)器的所述不同位置的地址,讀取所述初始化存儲(chǔ)器映像圖的數(shù)據(jù)以獲得所述地址,且然后存取所述固件碼的所述第一副本。
6.如權(quán)利要求5所述的方法,其進(jìn)一步包含識(shí)別從所述初始化存儲(chǔ)器映像圖讀取的所述數(shù)據(jù)內(nèi)的任何位錯(cuò)誤,如果所述讀取數(shù)據(jù)內(nèi)的位錯(cuò)誤被識(shí)別為是可校正的,則校正所述錯(cuò)誤位,及如果所述讀取數(shù)據(jù)內(nèi)的位錯(cuò)誤被識(shí)別為是不可校正的,則在不同條件下重新讀取所述初始化存儲(chǔ)器映像圖的所述數(shù)據(jù)。
7.如權(quán)利要求1所述的方法,其中將所述固件碼的至少第一及第二副本存儲(chǔ)于所述快閃存儲(chǔ)器的所述不同位置中,而所述存儲(chǔ)器的每一快閃存儲(chǔ)器存儲(chǔ)組件僅存儲(chǔ)一給定數(shù)量的一個(gè)或一個(gè)以上固件碼位,而所述存儲(chǔ)器存儲(chǔ)系統(tǒng)的進(jìn)一步特征在于將用戶數(shù)據(jù)每一存儲(chǔ)組件多于所述給定數(shù)量的用戶數(shù)據(jù)位地存儲(chǔ)于所述快閃存儲(chǔ)器的其它位置中。
8.如權(quán)利要求7所述的方法,其中所述給定數(shù)量的一個(gè)或一個(gè)以上位確切地是每一快閃存儲(chǔ)器存儲(chǔ)組件一個(gè)位。
9.如權(quán)利要求1所述的方法,其進(jìn)一步包含識(shí)別所述固件碼的所述第二副本的所述轉(zhuǎn)移的至少一部分內(nèi)的任何位錯(cuò)誤,及如果識(shí)別所述固件碼的所述第二副本的所述轉(zhuǎn)移的至少一部分內(nèi)的位錯(cuò)誤是不可校正的,則在趨向于減少所述第二副本中所述轉(zhuǎn)移的至少一部分內(nèi)的位錯(cuò)誤數(shù)量的條件下,重復(fù)讀取所述固件碼的所述第二副本的所述至少一部分。
10.如權(quán)利要求1所述的方法,其進(jìn)一步包含在執(zhí)行所述啟動(dòng)碼以將所述同件的一第一副本從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM之前,檢查在將固件存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)時(shí)設(shè)定的一固件存在旗標(biāo)的狀態(tài);及僅當(dāng)設(shè)定所述固件存在旗標(biāo)時(shí),才繼續(xù)執(zhí)行所述啟動(dòng)碼以將所述固件的所述第一副本從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM。
11.如權(quán)利要求1所述的方法,其另外包含響應(yīng)于識(shí)別一預(yù)定數(shù)量的一個(gè)或一個(gè)以上位錯(cuò)誤的若干位錯(cuò)誤,設(shè)定與所述固件的所述第一副本的所述錯(cuò)誤數(shù)據(jù)所存儲(chǔ)的所述快閃存儲(chǔ)器的位置相關(guān)的一內(nèi)務(wù)處理旗標(biāo)。
12.如權(quán)利要求11所述的方法,其另外包含響應(yīng)于設(shè)定所述內(nèi)務(wù)處理旗標(biāo),在已將所述固件碼的一無(wú)錯(cuò)誤副本轉(zhuǎn)移進(jìn)所述RAM后,校正所述固件的所述第一副本的所述錯(cuò)誤數(shù)據(jù)。
13.如權(quán)利要求12所述的方法,其中校正所述固件的所述第一副本的所述錯(cuò)誤數(shù)據(jù)包括將所述固件的所述校正的第一副本重新寫入所述快閃存儲(chǔ)器中。
14.如權(quán)利要求13所述的方法,其中重新寫入所述固件的所述校正的第一副本包括將所述校正的第一副本重新寫入與其原先存儲(chǔ)的位置不同的一位置。
15.如權(quán)利要求12所述的方法,其中校正固件的所述第一副本的所述錯(cuò)誤數(shù)據(jù)包括使用一錯(cuò)誤校正碼。
16.如權(quán)利要求12所述的方法,其中校正所述固件的所述第一副本的所述錯(cuò)誤數(shù)據(jù)包括轉(zhuǎn)移來(lái)自固件碼的所述第二副本的良好數(shù)據(jù)。
17.一種操作一存儲(chǔ)器存儲(chǔ)系統(tǒng)的方法,所述存儲(chǔ)器存儲(chǔ)系統(tǒng)具有快閃存儲(chǔ)器;一微處理器;一只讀存儲(chǔ)器(ROM),其包含可由所述微處理器存取的啟動(dòng)碼;一隨機(jī)存取存儲(chǔ)器(RAM);及依據(jù)通過(guò)其的數(shù)據(jù)計(jì)算一錯(cuò)誤校正碼(ECC)的電路,所述方法包含通過(guò)一次一個(gè)地將固件副本傳遞經(jīng)過(guò)所述ECC電路而將固件碼的至少第一及第二副本存儲(chǔ)于所述快閃存儲(chǔ)器的不同可尋址位置中及將由此計(jì)算出的所述ECC存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi),然后,通過(guò)促使所述微處理器執(zhí)行所述啟動(dòng)碼以經(jīng)由所述ECC電路將所述固件的所述第一副本從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM來(lái)起始所述存儲(chǔ)器系統(tǒng)的操作,其中所述ECC電路依據(jù)轉(zhuǎn)移的所述固件的所述第一副本計(jì)算一ECC,利用所述計(jì)算并存儲(chǔ)的ECC來(lái)識(shí)別所述固件碼的所述轉(zhuǎn)移的第一副本內(nèi)的任何位錯(cuò)誤,及如果位錯(cuò)誤被識(shí)別為是可校正的,則促使所述微處理器執(zhí)行所述啟動(dòng)碼內(nèi)的一錯(cuò)誤校正算法以校正所述錯(cuò)誤位,以將所述固件碼無(wú)任何錯(cuò)誤地加載到所述RAM內(nèi),或者如果位錯(cuò)誤被識(shí)別為是不可校正的,則將所述固件碼的所述第二副本的至少一部分轉(zhuǎn)移到所述RAM內(nèi),以替代所述第一副本中包含所述不可校正的位錯(cuò)誤的至少一部分,以將所述固件碼無(wú)任何錯(cuò)誤地加載到所述RAM內(nèi)。
18.如權(quán)利要求17所述的方法,其中存儲(chǔ)所述固件碼包括存儲(chǔ)依據(jù)所述固件碼的一個(gè)或一個(gè)以上區(qū)段個(gè)別計(jì)算出的ECC。
19.如權(quán)利要求17所述的方法,其另外包含將一映像圖存儲(chǔ)于所述快閃存儲(chǔ)器的預(yù)定復(fù)數(shù)個(gè)位置中的一個(gè)位置內(nèi),所述映像圖包含固件碼的所述至少第一及第二副本的所述可尋址位置;且其中所述微處理器執(zhí)行所述啟動(dòng)碼包括通過(guò)首先通過(guò)以一次一個(gè)地存取所述預(yù)定的復(fù)數(shù)個(gè)位置直至找到所述映像圖來(lái)定位所述映像圖,及在存儲(chǔ)有所述映像圖的所述位置處讀取所述映像圖的內(nèi)容。
20.如權(quán)利要求17所述的方法,其中存儲(chǔ)所述固件碼另外包括設(shè)定一旗標(biāo)以指示至少一固件副本存在于所述快閃存儲(chǔ)器內(nèi),且其中執(zhí)行所述啟動(dòng)碼以轉(zhuǎn)移所述固件碼的所述第一或第二副本中的任一副本包括首先讀取與所述副本相關(guān)的所述旗標(biāo)并僅在設(shè)定所述相關(guān)旗標(biāo)的情況下繼續(xù)讀取所述固件碼的所述副本。
21.一種快閃存儲(chǔ)器存儲(chǔ)系統(tǒng),其包含一快閃存儲(chǔ)器單元陣列,其將數(shù)據(jù)存儲(chǔ)于電荷存儲(chǔ)組件中并在所述陣列的復(fù)數(shù)個(gè)預(yù)定地址中的至少一個(gè)地址處包含一存儲(chǔ)器映像圖,所述映像圖包括指定其中存儲(chǔ)固件碼的一個(gè)或一個(gè)以上副本的地址的數(shù)據(jù),一控制器處理器,一只讀存儲(chǔ)器,其包含所述處理器響應(yīng)所述存儲(chǔ)系統(tǒng)的初始化而存取并執(zhí)行的啟動(dòng)碼,一隨機(jī)存取存儲(chǔ)器,其可由所述處理器存取以獲得擬執(zhí)行的指令,及其中所述啟動(dòng)碼促使所述處理器存取所述快閃存儲(chǔ)器內(nèi)的所述復(fù)數(shù)個(gè)預(yù)定地址以定位并讀取所述存儲(chǔ)器映像圖的所述數(shù)據(jù),所述數(shù)據(jù)指定其中存儲(chǔ)所述固件的一個(gè)或一個(gè)以上副本的地址,然后,讀取位于所述指定的一個(gè)或一個(gè)以上地址的至少一個(gè)地址處的所述固件碼,及然后將所述讀取的固件碼寫入所述隨機(jī)存取存儲(chǔ)器。
22.如權(quán)利要求21所述的系統(tǒng),其中將所述映像圖及所述固件碼每一存儲(chǔ)器單元存儲(chǔ)組件一個(gè)位地存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi),且進(jìn)一步其中將數(shù)據(jù)每一存儲(chǔ)器單元存儲(chǔ)組件多于一個(gè)位地存儲(chǔ)于所述存儲(chǔ)器陣列中除包含所述映像圖及固件的地址外的至少一些地址中。
23.一種快閃存儲(chǔ)器存儲(chǔ)系統(tǒng),其包含一快閃存儲(chǔ)器單元陣列,其將數(shù)據(jù)存儲(chǔ)于電荷存儲(chǔ)組件中并包含與各自的第一及第二組錯(cuò)誤校正碼(ECC)一起存儲(chǔ)于其中的固件碼的至少第一及第二副本,所述各自的第一及第二組ECC是依據(jù)所述固件碼的所述第一及第二副本計(jì)算出的,一控制器處理器,電路,其依據(jù)經(jīng)過(guò)所述電路的數(shù)據(jù)來(lái)計(jì)算ECC,一只讀存儲(chǔ)器,其包含所述處理器響應(yīng)于所述存儲(chǔ)系統(tǒng)的初始化而存取并執(zhí)行的啟動(dòng)碼,一隨機(jī)存取存儲(chǔ)器,其可由所述處理器存取以獲得擬執(zhí)行的指令,及其中所述啟動(dòng)碼促使所述處理器讀取所述第一固件碼副本,包括將所述讀取的第一固件碼副本傳遞經(jīng)過(guò)所述ECC計(jì)算電路,所述ECC電路計(jì)算ECC并依據(jù)與所述第一固件碼副本一起存儲(chǔ)的所述第一組ECC提供關(guān)于與所述ECC有關(guān)的所述第一固件碼副本的多個(gè)部分中存在的任何數(shù)據(jù)錯(cuò)誤的一狀態(tài),及(A)如果所述狀態(tài)指示在所述第一固件碼副本的所述部分的一給定部分內(nèi)無(wú)數(shù)據(jù)錯(cuò)誤,則將所述固件碼的所述第一副本的所述給定部分寫入所述隨機(jī)存取存儲(chǔ)器,但是(B)如果所述狀態(tài)指示在所述第一固件碼副本的所述給定部分內(nèi)有數(shù)據(jù)錯(cuò)誤,則所述啟動(dòng)碼促使所述處理器確定所述固件碼內(nèi)的位錯(cuò)誤的數(shù)量是否超過(guò)一給定數(shù)量,及(i)如果所述位錯(cuò)誤的數(shù)量不超過(guò)所述給定數(shù)量,則進(jìn)一步促使所述處理器校正所述錯(cuò)誤位并將所述校正的第一固件碼副本寫入所述隨機(jī)存取存儲(chǔ)器,但是(ii)如果所述位錯(cuò)誤的數(shù)量等于或超過(guò)所述給定數(shù)量,則進(jìn)一步促使所述處理器讀取所述第二固件副本的至少一部分,將所述讀取的第二固件碼傳遞經(jīng)過(guò)所述ECC計(jì)算電路,所述ECC計(jì)算電路依據(jù)傳遞的所述第二固件碼計(jì)算至少一個(gè)ECC,并提供關(guān)于與所述至少一個(gè)ECC有關(guān)的所述第二固件碼副本的所述至少一個(gè)部分中存在的任何數(shù)據(jù)錯(cuò)誤的狀態(tài),而且如果所述狀態(tài)指示所述第二固件碼副本的所述至少一個(gè)部分內(nèi)無(wú)任何數(shù)據(jù)錯(cuò)誤,則將所述固件碼的所述讀取的第二副本的所述至少一個(gè)部分寫入所述隨機(jī)存取存儲(chǔ)器。
24.如權(quán)利要求23所述的系統(tǒng),其中將所述固件碼每一存儲(chǔ)器單元存儲(chǔ)組件一個(gè)位地存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi),且進(jìn)一步其中將數(shù)據(jù)每一存儲(chǔ)器單元存儲(chǔ)組件多于一個(gè)位地存儲(chǔ)于所述存儲(chǔ)器陣列中除包含所述固件碼的地址以外的至少一些地址處。
25.一種快閃存儲(chǔ)器存儲(chǔ)系統(tǒng),其包含一快閃存儲(chǔ)器單元陣列,其將數(shù)據(jù)存儲(chǔ)于電荷存儲(chǔ)組件中并包含與一第一旗標(biāo)及一第二旗標(biāo)一起存儲(chǔ)于其中的固件碼的至少一副本,所述第一旗標(biāo)指示所述固件碼的存在而所述第二旗標(biāo)指示如果存在所述固件碼則不應(yīng)載入所述固件碼,一控制器處理器,一只讀存儲(chǔ)器,其包含所述處理器響應(yīng)于所述存儲(chǔ)系統(tǒng)的初始化而存取并執(zhí)行的啟動(dòng)碼,一隨機(jī)存取存儲(chǔ)器,其可由所述處理器存取以獲得擬執(zhí)行的指令,及其中所述啟動(dòng)碼促使所述處理器尋找所述第一及第二旗標(biāo),以及(A)如果存在所述第一旗標(biāo)而不存在所述第二旗標(biāo),則繼續(xù)將所述固件碼加載到所述隨機(jī)存取存儲(chǔ)器內(nèi),或者(B)如果所述第一及第二旗標(biāo)均存在,則提供對(duì)所述固件碼的存取以在不將所述固件碼加載到所述隨機(jī)存取存儲(chǔ)器內(nèi)的情況下進(jìn)行測(cè)試,或者(C)如果所述第一旗標(biāo)不存在,則既不嘗試將所述固件碼加載到所述隨機(jī)存取存儲(chǔ)器內(nèi)也不嘗試提供對(duì)所述固件碼的存取以進(jìn)行測(cè)試。
26.如權(quán)利要求25所述的系統(tǒng),其中將所述固件碼與第一及第二旗標(biāo)每一存儲(chǔ)器單元存儲(chǔ)組件一個(gè)位地存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi),且其中進(jìn)一步將數(shù)據(jù)每一存儲(chǔ)器單元存儲(chǔ)組件多于一個(gè)位地存儲(chǔ)于所述存儲(chǔ)器陣列中除包含所述固件碼與第一及第二旗標(biāo)的地址外的至少一些地址處。
27.一種起始一存儲(chǔ)器存儲(chǔ)系統(tǒng)的方法,所述存儲(chǔ)器存儲(chǔ)系統(tǒng)具有快閃存儲(chǔ)器,其包含存儲(chǔ)于所述快閃存儲(chǔ)器的不同位置中的固件碼的至少第一及第二副本;一微處理器;一只讀存儲(chǔ)器(ROM),其包含微處理器可存取的啟動(dòng)碼;及一隨機(jī)存取存儲(chǔ)器(RAM),其用于存儲(chǔ)微處理器可存取的固件碼,所述方法包含將所述固件碼的所述至少第一及第二副本的一個(gè)位存儲(chǔ)于所述快閃存儲(chǔ)器的所述不同位置中的存儲(chǔ)器單元的個(gè)別存儲(chǔ)組件中,而將所述用戶數(shù)據(jù)的多個(gè)位存儲(chǔ)于所述快閃存儲(chǔ)器的所述其它位置中的存儲(chǔ)器單元的個(gè)別存儲(chǔ)組件中,執(zhí)行所述啟動(dòng)碼以將所述固件的所述第一副本從所述快閃存儲(chǔ)器轉(zhuǎn)移至所述RAM,在轉(zhuǎn)移所述固件碼的所述第一副本時(shí),識(shí)別所述固件碼的所述第一副本中的任何位錯(cuò)誤,校正所述轉(zhuǎn)移的第一固件碼副本內(nèi)所述識(shí)別的位錯(cuò)誤中的特定錯(cuò)誤,或讀取所述固件碼的所述第二副本的至少一部分,以替換所述第一固件碼副本中包含所述識(shí)別的位錯(cuò)誤的至少一部分,及執(zhí)行來(lái)自所述RAM的所述固件碼的一無(wú)錯(cuò)誤副本。
全文摘要
本發(fā)明揭示將用于控制非易失性快閃存儲(chǔ)器系統(tǒng)操作的固件碼的多個(gè)副本存儲(chǔ)于存儲(chǔ)器系統(tǒng)的快閃存儲(chǔ)器的不同合適位置處。還將這些位置的一地址映像圖存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)。一旦所述存儲(chǔ)器系統(tǒng)初始化,其微處理器執(zhí)行存儲(chǔ)于所述存儲(chǔ)器控制器內(nèi)的啟動(dòng)碼,以參考所述地址映像圖并將所述固件的一副本從所述快閃存儲(chǔ)器加載到一控制器存儲(chǔ)器內(nèi),然后所述微處理器可從所述控制器存儲(chǔ)器中執(zhí)行所述固件副本以操作所述存儲(chǔ)器系統(tǒng)來(lái)存儲(chǔ)及檢索用戶數(shù)據(jù)。一錯(cuò)誤校正碼(ECC)用于檢查所述數(shù)據(jù),但所述快閃存儲(chǔ)器內(nèi)存儲(chǔ)的所述二個(gè)或更多個(gè)固件副本的最佳部分用于減少對(duì)使用ECC的需要。當(dāng)用戶數(shù)據(jù)是以二種以上狀態(tài)存儲(chǔ)于所述快閃存儲(chǔ)器內(nèi)時(shí),則可將所述固件碼以二種狀態(tài)存儲(chǔ)于所述同一快閃存儲(chǔ)器內(nèi)。
文檔編號(hào)G06F11/10GK1902583SQ200480039310
公開日2007年1月24日 申請(qǐng)日期2004年12月16日 優(yōu)先權(quán)日2003年12月31日
發(fā)明者卡洛斯·J·岡薩雷斯, 安德魯·湯姆林 申請(qǐng)人:桑迪士克股份有限公司