Nor閃存及其修補(bǔ)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明是有關(guān)于一種N0R閃存,且特別是有關(guān)于一種N0R閃存的修補(bǔ)方法。
【背景技術(shù)】
[0002]隨著閃存制作規(guī)格的持續(xù)演進(jìn),閃存芯片的耐用度的下滑,會(huì)是成本考量下所必然要面對(duì)的重要課題。在N0R閃存中,由于其應(yīng)用環(huán)境與NAND閃存大不相同。在成本的考量下,N0R閃存并沒(méi)有外加的控制芯片可以配合,也因此,通過(guò)復(fù)雜的算法來(lái)提升N0R閃存的使用壽命,具有一定的難度。
[0003]通常,N0R閃存被應(yīng)用在存儲(chǔ)例如開(kāi)機(jī)碼等重要數(shù)據(jù)。而這類型的數(shù)據(jù)通常無(wú)法容忍任何一個(gè)比特發(fā)生錯(cuò)誤。因此,在現(xiàn)有的N0R閃存的技藝中,從設(shè)計(jì)端到制造端都需要應(yīng)用最嚴(yán)謹(jǐn)?shù)姆椒▉?lái)從事生產(chǎn)。然而,隨著制作的演進(jìn)以及成本的考量,要使N0R閃存可以滿足所有的元件特性越來(lái)越困難。也因此,如何有效提升N0R閃存的性能,是本領(lǐng)域設(shè)計(jì)者的一大難題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種N0R閃存及其修補(bǔ)方法,以加強(qiáng)N0R閃存的使用效率。
[0005]本發(fā)明的N0R閃存的修補(bǔ)方法,包括判斷是否具有至少一備用存儲(chǔ)區(qū)塊未被使用;計(jì)數(shù)各存儲(chǔ)區(qū)塊的一被程序化次數(shù)以及各存儲(chǔ)區(qū)塊的一被抹除次數(shù);判別被程序化次數(shù)是否不小于一第一預(yù)設(shè)臨界值,及被抹除次數(shù)是否不小于一第二預(yù)設(shè)臨界值;以及當(dāng)存儲(chǔ)區(qū)塊的一選中存儲(chǔ)區(qū)塊對(duì)應(yīng)的被程序化次數(shù)不小于第一臨界值或被抹除次數(shù)不小于第二預(yù)設(shè)臨界值時(shí),使至少一備用存儲(chǔ)區(qū)塊與選中存儲(chǔ)區(qū)塊進(jìn)行置換。
[0006]本發(fā)明的N0R閃存,包括多數(shù)個(gè)存儲(chǔ)區(qū)塊、多數(shù)個(gè)備用存儲(chǔ)區(qū)塊以及存儲(chǔ)器控制器。存儲(chǔ)器控制器耦接存儲(chǔ)區(qū)塊以及備用存儲(chǔ)區(qū)塊,存儲(chǔ)器控制器判斷備用存儲(chǔ)區(qū)塊中是否具有至少一未被使用,并計(jì)數(shù)各存儲(chǔ)區(qū)塊的被程序化次數(shù)以及各存儲(chǔ)區(qū)塊的被抹除次數(shù)。存儲(chǔ)器控制器并判別被程序化次數(shù)是否不小于第一預(yù)設(shè)臨界值,及被抹除次數(shù)是否不小于第二預(yù)設(shè)臨界值。且當(dāng)存儲(chǔ)區(qū)塊的選中存儲(chǔ)區(qū)塊對(duì)應(yīng)的被程序化次數(shù)不小于第一臨界值或被抹除次數(shù)不小于第二預(yù)設(shè)臨界值時(shí),存儲(chǔ)器控制器使備用存儲(chǔ)區(qū)塊未被使用的其中之一與選中存儲(chǔ)區(qū)塊進(jìn)行置換。
[0007]基于上述,本發(fā)明通過(guò)計(jì)數(shù)N0R閃存各存儲(chǔ)區(qū)塊的被程序化次數(shù)以及被抹除次數(shù),并在當(dāng)存儲(chǔ)區(qū)塊的被程序化次數(shù)或被抹除次數(shù)超過(guò)預(yù)設(shè)的次數(shù)限制時(shí),將對(duì)應(yīng)的該存儲(chǔ)區(qū)塊與備用存儲(chǔ)區(qū)塊進(jìn)行置換動(dòng)作。藉此,有效確保使用中的存儲(chǔ)器區(qū)塊是具有高可靠度的存儲(chǔ)區(qū)塊,以維持N0R閃存的數(shù)據(jù)存取的品質(zhì)。并且,通過(guò)提供備用存儲(chǔ)區(qū)塊,N0R閃存的使用壽命也得以延長(zhǎng)。
[0008]為讓本發(fā)明的上述特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉實(shí)施例,并配合附圖作詳細(xì)說(shuō)明如下。
【附圖說(shuō)明】
[0009]圖1繪示本發(fā)明一實(shí)施例的N0R閃存的修補(bǔ)方法;
[0010]圖2A繪示本發(fā)明另一實(shí)施例的N0R閃存的修補(bǔ)方法;
[0011]圖2B繪示本發(fā)明再一實(shí)施例的N0R閃存的修補(bǔ)方法;
[0012]圖3繪示本發(fā)明實(shí)施例的存儲(chǔ)區(qū)塊與備用存儲(chǔ)區(qū)塊的置換的實(shí)施方式的示意圖;
[0013]圖4繪示本發(fā)明一實(shí)施例的N0R閃存的示意圖。
[0014]附圖標(biāo)記說(shuō)明:
[0015]S110 ?S140、S211 ?S219、S2110 ?S2111、S221 ?S229、S2210 ?S2211:修補(bǔ)方法的步驟;
[0016]A1?AM:存儲(chǔ)區(qū)塊;
[0017]BA1?BAN:備用存儲(chǔ)區(qū)塊;
[0018]AS:選中存儲(chǔ)區(qū)塊;
[0019]400:N0R 閃存;
[0020]410:存儲(chǔ)區(qū)塊;
[0021]420:備用存儲(chǔ)區(qū)塊;
[0022]430:存儲(chǔ)器控制器。
【具體實(shí)施方式】
[0023]請(qǐng)參照?qǐng)D1,圖1繪示本發(fā)明一實(shí)施例的N0R閃存的修補(bǔ)方法。分析N0R閃存所應(yīng)用的層面,較常見(jiàn)的為用來(lái)存儲(chǔ)開(kāi)機(jī)碼的基本輸入輸出系統(tǒng)(Basic Input OutputSystem,簡(jiǎn)稱B1S)。由NOR閃存所可能應(yīng)用的各種電子裝置來(lái)看,NOR閃存的使用者并不會(huì)針對(duì)N0R閃存存儲(chǔ)區(qū)塊來(lái)進(jìn)行程序化(program)以及抹除(erase)的動(dòng)作。通常,以開(kāi)機(jī)碼為范例,主程序化會(huì)被放置在固定的地址的存儲(chǔ)區(qū)塊上,并且,主程序化僅有在進(jìn)行固件更新時(shí)才會(huì)有所更動(dòng)。也就是說(shuō),主程序化所占有的存儲(chǔ)區(qū)塊所可能產(chǎn)生的程序化抹除的機(jī)率相對(duì)是很低的。
[0024]由上述的說(shuō)明可以得知,N0R閃存僅有部分用以運(yùn)算以及記錄的存儲(chǔ)區(qū)塊會(huì)較時(shí)常進(jìn)行程序化以及抹除的動(dòng)作,也就是說(shuō),針對(duì)這些常進(jìn)行程序化以及抹除的動(dòng)作的存儲(chǔ)區(qū)塊進(jìn)行修補(bǔ),就可以有效提升N0R閃存的整體壽命。
[0025]因此,本發(fā)明在存儲(chǔ)區(qū)塊中增加設(shè)置一個(gè)或多數(shù)個(gè)備用存儲(chǔ)區(qū)塊來(lái)配合修補(bǔ)動(dòng)作的進(jìn)行。其中,在步驟S110中,先判斷是否具有至少一備用存儲(chǔ)區(qū)塊未被使用。在當(dāng)步驟S110判斷出有一個(gè)或多個(gè)的備用存儲(chǔ)區(qū)塊未被使用時(shí),表示N0R閃存的修補(bǔ)動(dòng)作可以被進(jìn)行。據(jù)此,在步驟S120中,則執(zhí)行針對(duì)各存儲(chǔ)區(qū)塊執(zhí)行被程序化動(dòng)作以及被抹除動(dòng)作的次數(shù)的計(jì)數(shù)動(dòng)作。上述步驟S120的計(jì)數(shù)動(dòng)作是隨著N0R閃存被使用的狀態(tài)下所進(jìn)行的。其中,各個(gè)執(zhí)行過(guò)被程序化動(dòng)作的存儲(chǔ)器區(qū)塊可產(chǎn)生對(duì)應(yīng)的被程序化次數(shù)的計(jì)數(shù)值,而各個(gè)執(zhí)行過(guò)被抹除動(dòng)作的存儲(chǔ)器區(qū)塊可產(chǎn)生對(duì)應(yīng)的被抹除次數(shù)的計(jì)數(shù)值。當(dāng)然,執(zhí)行過(guò)被抹除動(dòng)作且也被執(zhí)行過(guò)被程序化動(dòng)作的存儲(chǔ)區(qū)塊,則產(chǎn)生對(duì)應(yīng)的被程序化次數(shù)的計(jì)數(shù)值以及被抹除次數(shù)的計(jì)數(shù)值。
[0026]關(guān)于步驟S120的實(shí)施細(xì)節(jié),舉例來(lái)說(shuō)明,當(dāng)N0R閃存接收到程序化命令以對(duì)存儲(chǔ)區(qū)塊A1進(jìn)行首次的程序化動(dòng)作時(shí),存儲(chǔ)區(qū)塊A1的地址Fi可以被記錄在一個(gè)存儲(chǔ)裝置中,并設(shè)定存儲(chǔ)區(qū)塊A1對(duì)應(yīng)的被程序化次數(shù)為1,當(dāng)后續(xù)又有程序化命令要對(duì)存儲(chǔ)區(qū)塊A1進(jìn)行程序化動(dòng)作時(shí),由于存儲(chǔ)區(qū)塊A1的地址Fi已被記錄在存儲(chǔ)裝置中,因此,NOR閃存可直接使存儲(chǔ)區(qū)塊A1對(duì)應(yīng)的被程序化次數(shù)進(jìn)行遞增(+1)。同理,當(dāng)NOR閃存接收到程序化命令以對(duì)存儲(chǔ)區(qū)塊A1進(jìn)行首次的抹除動(dòng)作時(shí),存儲(chǔ)區(qū)塊A1的地址Fi可以被記錄在一個(gè)存儲(chǔ)裝置中,并設(shè)定存儲(chǔ)區(qū)塊A1對(duì)應(yīng)的被抹除次數(shù)為1,當(dāng)后續(xù)又有程序化命令要對(duì)存儲(chǔ)區(qū)塊A1進(jìn)行抹除動(dòng)作時(shí),由于存儲(chǔ)區(qū)塊A1的地址Fi已被記錄在存儲(chǔ)裝置中,因此,NOR閃存可直接使存儲(chǔ)區(qū)塊A1對(duì)應(yīng)的被抹除次數(shù)進(jìn)行遞增(+1)。
[0027]在步驟S130中,則進(jìn)行各存儲(chǔ)區(qū)塊的被程序化次數(shù)以及被抹除次數(shù)的判斷。其中,各存儲(chǔ)區(qū)塊的被程序化次數(shù)可與第一預(yù)設(shè)臨界值進(jìn)行比對(duì),各存儲(chǔ)區(qū)塊的被抹除次數(shù)則可與第二預(yù)設(shè)臨界值進(jìn)行比對(duì)。上述的第一預(yù)設(shè)臨界值以及第二預(yù)設(shè)臨界值可以由設(shè)計(jì)者依據(jù)存儲(chǔ)區(qū)塊的特性進(jìn)行設(shè)定。其中,第一預(yù)設(shè)臨界值以及第二預(yù)設(shè)臨界值可以相同,也可以不相同。
[0028]在步驟S140中,在當(dāng)存儲(chǔ)區(qū)塊的被程序化次數(shù)大于或等于第一預(yù)設(shè)臨界值時(shí),表示該存儲(chǔ)區(qū)塊的被程序化次數(shù)已超過(guò)安全使用范圍。N0R閃存則可以執(zhí)行該存儲(chǔ)區(qū)塊與備用存儲(chǔ)區(qū)塊的置換動(dòng)作,以完成N0R閃存的修補(bǔ)動(dòng)作。同理,當(dāng)存儲(chǔ)區(qū)塊的被抹除次數(shù)大于或等于第二預(yù)設(shè)臨界值時(shí),則表示該存儲(chǔ)區(qū)塊的被抹除次數(shù)已超過(guò)安全使用范圍,而N0R閃存則也可以執(zhí)行該存儲(chǔ)區(qū)塊與備用存儲(chǔ)區(qū)塊的置換動(dòng)作,并藉此完成N0R閃存的修補(bǔ)動(dòng)作。
[0029]關(guān)于步驟S140的實(shí)施細(xì)節(jié),舉例來(lái)說(shuō),N0R閃存在判斷出存儲(chǔ)區(qū)塊A1的被程序化次數(shù)大于或等于第一預(yù)設(shè)臨界值時(shí),則可選擇未被使用的備用存儲(chǔ)區(qū)塊中的其中之一(備用存儲(chǔ)區(qū)塊B1)來(lái)與存儲(chǔ)區(qū)塊A1進(jìn)行置換動(dòng)作。具體來(lái)說(shuō)明,假設(shè)在初始條件下,邏輯地址LA1對(duì)應(yīng)至存儲(chǔ)區(qū)塊A1的實(shí)體地址,而在進(jìn)行存儲(chǔ)區(qū)塊A1與備用存儲(chǔ)區(qū)塊B1的置換動(dòng)作時(shí),則使邏輯地址LA1變更對(duì)應(yīng)至備用存儲(chǔ)區(qū)塊B1的實(shí)體地址。
[0030]附帶一提的,在當(dāng)存儲(chǔ)區(qū)塊A1與備用存儲(chǔ)區(qū)塊B1的置換動(dòng)作完成后,記錄在存儲(chǔ)裝置中的存儲(chǔ)區(qū)塊A1的地址以及對(duì)應(yīng)的被程序化次數(shù)及被抹除次數(shù)都可以被舍棄。
[0031]另外,本發(fā)明實(shí)施例的各備用存儲(chǔ)區(qū)塊都具有相對(duì)應(yīng)的使用狀態(tài)標(biāo)記。當(dāng)各備用存儲(chǔ)區(qū)塊未被使用與任一存儲(chǔ)區(qū)塊進(jìn)行置換時(shí),其所對(duì)應(yīng)的使用狀態(tài)標(biāo)記皆表示為未被使用狀態(tài)。當(dāng)備用存儲(chǔ)區(qū)塊(例如備用存儲(chǔ)區(qū)塊B1)被使用與一存儲(chǔ)區(qū)塊進(jìn)行置換后,備用存儲(chǔ)區(qū)塊B1的使用狀態(tài)標(biāo)記可被設(shè)定為已被使用狀態(tài)。
[0032]也就是說(shuō),當(dāng)要進(jìn)行如步驟S110的備用存儲(chǔ)區(qū)塊的使用狀態(tài)的檢查時(shí),只要簡(jiǎn)單的針對(duì)所有的使用狀態(tài)標(biāo)記進(jìn)行檢查即可。若使用狀態(tài)標(biāo)記中的至少其中之一表示為未被使用狀態(tài),表示存儲(chǔ)區(qū)塊的修補(bǔ)動(dòng)作仍可進(jìn)行。相對(duì)的,若所有的使用狀態(tài)標(biāo)記都表示為已被使用狀態(tài),則表示存儲(chǔ)區(qū)塊的修補(bǔ)動(dòng)作無(wú)法被進(jìn)行。
[0033]上述的使用狀態(tài)標(biāo)記可以利用邏輯值來(lái)表示為未被使用狀態(tài)或已被使用狀態(tài)。舉例來(lái)說(shuō),使用狀態(tài)標(biāo)記等于邏輯值1時(shí)可以表示對(duì)應(yīng)的備用存儲(chǔ)區(qū)塊為未被使用狀態(tài),使用狀態(tài)標(biāo)記等于邏輯值0時(shí)可以表示對(duì)應(yīng)的備用存儲(chǔ)區(qū)塊為已被使用狀態(tài)。當(dāng)然,邏輯值與未被使用狀態(tài)及已被使用狀態(tài)的對(duì)應(yīng)關(guān)系可以任意變更,上述的范例并不用以限縮本發(fā)明。
[0034]請(qǐng)參照?qǐng)D2A,圖2A繪示本發(fā)明另一實(shí)施例的N0R閃存的修補(bǔ)方法。在步驟S211中,接收程序化命令,并在步驟S212中依據(jù)所接收的程序化命令并將要進(jìn)行程序化的存儲(chǔ)區(qū)塊的地址Fi進(jìn)行存儲(chǔ)。在步驟S213中,判斷是否有至少一備用存儲(chǔ)區(qū)塊未被使用,若步驟S213的判斷結(jié)果為是時(shí),進(jìn)行步驟S214以執(zhí)行程序化及驗(yàn)證(program and verify)動(dòng)作。通過(guò)對(duì)該存儲(chǔ)區(qū)塊被程序化的次數(shù)L1進(jìn)行計(jì)數(shù),并且在步驟S215中進(jìn)行該存儲(chǔ)區(qū)塊的被程序化的次數(shù)L1與預(yù)設(shè)臨界值N1進(jìn)行比較。當(dāng)被程序化的次數(shù)L1小于N1時(shí),表示該存儲(chǔ)區(qū)塊可繼續(xù)提供進(jìn)行程序化,并在步驟S216中的驗(yàn)證動(dòng)作通過(guò)時(shí)