本發(fā)明涉及nandflash技術(shù)領(lǐng)域,具體地說是一種可快速定位問題所在的nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法。
背景技術(shù):
nandflash內(nèi)存是flash內(nèi)存的一種,其內(nèi)部采用非線性宏單元模式,為固態(tài)大容量?jī)?nèi)存的實(shí)現(xiàn)提供了廉價(jià)有效的解決方案,尤其在雷達(dá)及航天等領(lǐng)域,對(duì)存儲(chǔ)設(shè)備的容量及讀寫速率要求非??量獭kS著計(jì)算機(jī)技術(shù)的不斷發(fā)展,存儲(chǔ)設(shè)備的容量和速度都得到很大的提升。新型高速硬盤大多以nandflash芯片為存儲(chǔ)介質(zhì),但是該存儲(chǔ)芯片的控制復(fù)雜,需要壞塊管理和磨損均衡等控制機(jī)制。
基于上述現(xiàn)狀,本發(fā)明提出了一種nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的技術(shù)任務(wù)是針對(duì)以上不足之處,提供一種nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法。
一種nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法,基于安裝nandflash芯片的計(jì)算機(jī)系統(tǒng),其實(shí)現(xiàn)過程為:
首先在系統(tǒng)中建立nandflash芯片的塊信息標(biāo)識(shí)表,用于存儲(chǔ)塊信息及相應(yīng)的索引地址信息,這里的塊信息包括好塊標(biāo)識(shí)及壞塊標(biāo)識(shí);
對(duì)nandflash芯片進(jìn)行寫操作、讀操作及擦除操作,當(dāng)塊的信息在塊信息標(biāo)識(shí)表中標(biāo)記為好塊時(shí),將其進(jìn)行相應(yīng)的寫操作、讀操作及擦除操作,標(biāo)記為壞塊時(shí)則跳過;
當(dāng)寫操作、讀操作及擦除操作出現(xiàn)失敗時(shí),將塊信息標(biāo)識(shí)表中的對(duì)應(yīng)塊標(biāo)識(shí)為壞塊標(biāo)識(shí);
當(dāng)有所有好塊使用完后,向系統(tǒng)發(fā)送nandflash芯片寫滿信號(hào)。
所述nandflash芯片中配置有若干塊,即block,每個(gè)塊均有邏輯地址和物理地址,每一個(gè)邏輯地址對(duì)應(yīng)一個(gè)物理塊地址,所有塊根據(jù)位寬分成若干條目,每個(gè)條目中存儲(chǔ)與位寬等個(gè)數(shù)的block塊信息,存儲(chǔ)內(nèi)容為0時(shí)代表該block為好塊,存儲(chǔ)內(nèi)容1時(shí)代表該block為壞塊,每一個(gè)block對(duì)應(yīng)1bit。
對(duì)nandflash芯片進(jìn)行讀寫及擦除操作按照其邏輯地址順序進(jìn)行,且邏輯地址從0開始累加,每一個(gè)邏輯地址和塊信息標(biāo)識(shí)表中的一比特?cái)?shù)據(jù)有唯一關(guān)系,塊的邏輯地址和索引地址之間的關(guān)系為:邏輯地址=索引地址*位寬+block偏移地址,所述索引地址從0開始累加,block偏移地址則指塊在所處條目中的具體位信息。
在系統(tǒng)中配置有三組指針寄存器,分別用于存儲(chǔ)當(dāng)前nandflash芯片中塊的讀物理地址、寫物理地址、擦除物理地址。
在系統(tǒng)中配置有緩存,該緩存采用1page大小的中轉(zhuǎn)ram存儲(chǔ)器,并用于在系統(tǒng)寫操作完成后進(jìn)行熱備份操作時(shí),從壞塊中讀出的1page數(shù)據(jù)提供臨時(shí)存儲(chǔ)空間。
在寫操作過程中,當(dāng)寫入過程中發(fā)生寫入失敗時(shí),首先根據(jù)塊信息標(biāo)識(shí)表找出下一個(gè)好塊的物理地址,將寫入失敗的數(shù)據(jù)從緩存中取出然后寫入到下一個(gè)好塊相同的頁地址,并將寫入失敗的塊對(duì)應(yīng)的塊信息標(biāo)識(shí)表位置改成壞塊標(biāo)識(shí)。
所述系統(tǒng)中配置寫入失敗地址表,該寫入失敗地址表中記錄發(fā)生寫入失敗的塊物理地址、替換塊物理地址、寫入失敗頁地址信息,即:在寫操作過程中,當(dāng)寫入失敗時(shí),將該寫入失敗的塊物理地址、替換該寫入失敗塊的好塊物理地址、寫入失敗頁地址信息寫入到寫入失敗地址表,在繼續(xù)進(jìn)行新數(shù)據(jù)的寫入。
當(dāng)系統(tǒng)完成寫入操作后,從寫入失敗地址表中取出寫入失敗信息,使用熱備份copyback指令在寫入失敗的塊中,寫入失敗頁前的各頁數(shù)據(jù)及下一個(gè)好塊中對(duì)應(yīng)頁數(shù)的頁中。
當(dāng)進(jìn)行讀操作時(shí),從塊的起始邏輯地址開始讀,若該邏輯地址對(duì)應(yīng)的塊信息標(biāo)識(shí)為0,則該塊為有效塊,將該塊中的數(shù)據(jù)讀出;若對(duì)應(yīng)的塊信息標(biāo)識(shí)為1,則該塊為壞塊,放棄讀取,邏輯地址加1,重復(fù)上述過程直至完成文件邏輯地址的數(shù)據(jù)讀取。
當(dāng)進(jìn)行擦除操作時(shí),從起始邏輯地址開始擦除,若該邏輯地址對(duì)應(yīng)的塊信息標(biāo)識(shí)為0,則該塊為有效塊,對(duì)該塊進(jìn)行擦除操作;若對(duì)應(yīng)的塊信息標(biāo)識(shí)為1則該塊為壞塊,放棄擦除,邏輯地址加1,重復(fù)上述過程直至完成本次擦除操作。
本發(fā)明的一種nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法和現(xiàn)有技術(shù)相比,具有以下有益效果:
本發(fā)明的一種nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法,通過建立整個(gè)芯片的塊信息標(biāo)識(shí)表,實(shí)現(xiàn)每個(gè)block利用一比特?cái)?shù)據(jù)完成邏輯地址映射,從而實(shí)現(xiàn)使用極低的空間開銷完成靈活的邏輯地址映射、壞塊管理,使用該方法避免了復(fù)雜的壞塊管理算法和磨損均衡算法的實(shí)現(xiàn),大大降低了nandflash控制器的實(shí)現(xiàn)難度,同時(shí)提高了存儲(chǔ)寫入速度,實(shí)用性強(qiáng),適用范圍廣泛,易于推廣。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明的方案,下面結(jié)合具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供了一種nandflash芯片的塊信息標(biāo)識(shí)實(shí)現(xiàn)方法,基于安裝nandflash芯片的計(jì)算機(jī)系統(tǒng),其實(shí)現(xiàn)過程為:
首先在系統(tǒng)中建立nandflash芯片的塊信息標(biāo)識(shí)表,該表內(nèi)每一條目的位寬根據(jù)使用的存儲(chǔ)介質(zhì)確定,一般為8bit或者16bit,每一個(gè)block對(duì)應(yīng)1bit,每個(gè)條目可以存儲(chǔ)與位寬相等個(gè)數(shù)的block壞塊信息,表內(nèi)具體存儲(chǔ)塊信息及相應(yīng)的索引地址信息,這里的塊信息包括好塊標(biāo)識(shí)及壞塊標(biāo)識(shí);
對(duì)nandflash芯片進(jìn)行寫操作、讀操作及擦除操作,當(dāng)塊的信息在塊信息標(biāo)識(shí)表中標(biāo)記為好塊時(shí),將其進(jìn)行相應(yīng)的寫操作、讀操作及擦除操作,標(biāo)記為壞塊時(shí)則跳過;
當(dāng)寫操作、讀操作及擦除操作出現(xiàn)失敗時(shí),將塊信息標(biāo)識(shí)表中的對(duì)應(yīng)塊標(biāo)識(shí)為壞塊標(biāo)識(shí);
當(dāng)有所有好塊使用完后,向系統(tǒng)發(fā)送nandflash芯片寫滿信號(hào)。
所述nandflash芯片中配置有若干塊,即block,每個(gè)塊均有邏輯地址和物理地址,每一個(gè)邏輯地址對(duì)應(yīng)一個(gè)物理塊地址,所有塊根據(jù)位寬分成若干條目,每個(gè)條目中存儲(chǔ)與位寬等個(gè)數(shù)的block塊信息,存儲(chǔ)內(nèi)容為0時(shí)代表該block為好塊,存儲(chǔ)內(nèi)容1時(shí)代表該block為壞塊,每一個(gè)block對(duì)應(yīng)1bit。
對(duì)nandflash芯片進(jìn)行讀寫及擦除操作按照其邏輯地址順序進(jìn)行,且邏輯地址從0開始累加,每一個(gè)邏輯地址和塊信息標(biāo)識(shí)表中的一比特?cái)?shù)據(jù)有唯一關(guān)系,塊的邏輯地址和索引地址之間的關(guān)系為:邏輯地址=索引地址*位寬+block偏移地址,所述索引地址從0開始累加,block偏移地址則指塊在所處條目中的具體位信息。
在本發(fā)明中,邏輯地址等于物理地址。
所述索引地址是指具體的條目地址,索引地址從0開始累加,比如一個(gè)條目位寬是8bit,我們有1024個(gè)邏輯地址,每個(gè)邏輯地址對(duì)應(yīng)某一個(gè)條目的某一個(gè)bit。由于地址都是從0開始計(jì)數(shù),則邏輯地址10實(shí)際上是第11個(gè)塊,所以存在于條目1,第3個(gè)bit。
第0個(gè)邏輯地址在塊信息標(biāo)識(shí)表中對(duì)應(yīng)第0個(gè)條目,偏移地址是0,第一個(gè)邏輯地址對(duì)應(yīng)第0個(gè)條目偏移地址是1,第9個(gè)邏輯地址對(duì)應(yīng)條目1偏移地址是0,第10個(gè)邏輯地址對(duì)應(yīng)塊信息標(biāo)識(shí)表中條目1偏移地址是2。
在系統(tǒng)中配置有緩存,該緩存根據(jù)nandflash規(guī)格建立,在系統(tǒng)中建立1page大小的中轉(zhuǎn)ram,即隨機(jī)存取存儲(chǔ)器,用于在系統(tǒng)寫操作完成后進(jìn)行copyback操作時(shí)為從壞塊中讀出的1page數(shù)據(jù)提供臨時(shí)存儲(chǔ)空間。
順序讀取nandflash存儲(chǔ)芯片每個(gè)block的塊信息,將正常block的物理地址按順序存儲(chǔ)在邏輯地址映射表和對(duì)應(yīng)的空閑塊物理地址子表中。
在系統(tǒng)中配置有三組指針寄存器,分別用于存儲(chǔ)當(dāng)前nandflash芯片中塊的讀物理地址、寫物理地址、擦除物理地址。
所述系統(tǒng)中配置寫入失敗地址表,該寫入失敗地址表中記錄發(fā)生寫入失敗的塊物理地址、替換塊物理地址、寫入失敗頁地址信息,即:在寫操作過程中,當(dāng)寫入失敗時(shí),將該寫入失敗的塊物理地址、替換該寫入失敗塊的好塊物理地址、寫入失敗頁地址信息寫入到寫入失敗地址表,在繼續(xù)進(jìn)行新數(shù)據(jù)的寫入。
按邏輯地址順序?qū)andflash芯片進(jìn)行讀寫操作。邏輯地址從0開始累加,每一個(gè)邏輯地址對(duì)應(yīng)一個(gè)物理塊地址,每一個(gè)邏輯地址和塊信息標(biāo)識(shí)表中的一比特?cái)?shù)據(jù)有唯一關(guān)系,具體轉(zhuǎn)換關(guān)系跟存儲(chǔ)塊信息標(biāo)識(shí)表的存儲(chǔ)介質(zhì)位寬有關(guān)。
當(dāng)寫入過程中發(fā)生寫入失敗時(shí),首先根據(jù)塊信息標(biāo)識(shí)表找出下一個(gè)好塊的物理地址,將寫入失敗的數(shù)據(jù)從緩存中取出然后寫入好塊中相同的頁地址,之后將寫入失敗的塊對(duì)應(yīng)的塊信息標(biāo)識(shí)表那一比特置1,之后將寫入失敗塊物理地址,好塊物理地址,寫入失敗頁地址等信息存入寫入失敗地址表,之后繼續(xù)進(jìn)行新數(shù)據(jù)的寫入。
所述相同的頁地址舉例說明:
每個(gè)塊中有256個(gè)頁地址,把寫入失敗的數(shù)據(jù)從緩存中寫入好塊中對(duì)應(yīng)的頁地址,假如第2頁寫入失敗,那就把數(shù)據(jù)寫入下一個(gè)好塊的第二頁地址。每次寫入一頁,所以把寫入失敗的數(shù)據(jù)寫入好塊對(duì)應(yīng)頁地址。
當(dāng)系統(tǒng)完成寫入操作后,從寫入失敗地址表取出寫入失敗信息,使用copyback指令將寫入失敗的塊中寫入失敗頁前的各頁數(shù)據(jù)寫入好塊中對(duì)應(yīng)的頁。
當(dāng)進(jìn)行讀操作時(shí),從塊的起始邏輯地址開始讀,若該邏輯地址對(duì)應(yīng)的塊信息標(biāo)識(shí)為0,則該塊為有效塊,將該塊中的數(shù)據(jù)讀出;若對(duì)應(yīng)的塊信息標(biāo)識(shí)為1,則該塊為壞塊,放棄讀取,邏輯地址加1,重復(fù)上述過程直至完成文件邏輯地址的數(shù)據(jù)讀取。
當(dāng)進(jìn)行擦除操作時(shí),從起始邏輯地址開始擦除,若該邏輯地址對(duì)應(yīng)的塊信息標(biāo)識(shí)為0,則該塊為有效塊,對(duì)該塊進(jìn)行擦除操作;若對(duì)應(yīng)的塊信息標(biāo)識(shí)為1則該塊為壞塊,放棄擦除,邏輯地址加1,重復(fù)上述過程直至完成本次擦除操作。
當(dāng)有所有好塊使用完后,該映射表將向系統(tǒng)發(fā)送nandflash芯片寫滿信號(hào)。
下面我們以macronmt29f512g08cucabh310itz:a芯片為例進(jìn)行說明。
芯片是152-ball,8個(gè)diebga封裝,包括4個(gè)target,每個(gè)target有2個(gè)lun,每個(gè)lun有2個(gè)plane。因此,我們一共有32768個(gè)block,即32768個(gè)邏輯和物理地址。我們以fpga中得dram存儲(chǔ)塊信息標(biāo)識(shí)表,數(shù)據(jù)位寬為8bit,因此,信息表一共有4096個(gè)條目,每個(gè)條目存儲(chǔ)8個(gè)block的壞塊信息,存儲(chǔ)內(nèi)容為0代表該block為好塊,存儲(chǔ)內(nèi)容1代表該block為壞塊。
然后,按邏輯地址順序?qū)π酒M(jìn)行讀寫操作,當(dāng)寫入過程中發(fā)生寫入失敗時(shí),首先根據(jù)塊信息標(biāo)識(shí)表找出下一個(gè)好塊的物理地址,將寫入失敗的數(shù)據(jù)從緩存中取出然后寫入好塊中相同的頁地址,之后將寫入失敗的塊對(duì)應(yīng)的塊信息標(biāo)識(shí)表那一比特置1,之后將寫入失敗塊物理地址,好塊物理地址,寫入失敗頁地址等信息存入寫入失敗地址表,之后繼續(xù)進(jìn)行新數(shù)據(jù)的寫入。
當(dāng)系統(tǒng)完成寫入操作后,從寫入失敗地址表取出寫入失敗信息,使用copyback指令將寫入失敗的塊中寫入失敗頁前的各頁數(shù)據(jù)寫入好塊中對(duì)應(yīng)的頁;
當(dāng)進(jìn)行讀操作時(shí),從文件起始邏輯地址開始讀,若該邏輯地址對(duì)應(yīng)的壞塊信息標(biāo)識(shí)為0則該塊為有效塊,將該塊中的數(shù)據(jù)讀出,若對(duì)應(yīng)的壞塊信息標(biāo)識(shí)為1則該塊為壞塊,放棄讀取,邏輯地址加一,重復(fù)上述過程直至完成文件結(jié)束邏輯地址的數(shù)據(jù)讀??;
當(dāng)進(jìn)行擦除操作時(shí),從起始邏輯地址開始擦除,若該邏輯地址對(duì)應(yīng)的壞塊信息標(biāo)識(shí)為0則該塊為有效塊,對(duì)該塊進(jìn)行擦除操作,若對(duì)應(yīng)的壞塊信息標(biāo)識(shí)為1則該塊為壞塊,放棄擦除,邏輯地址加一,重復(fù)上述過程直至完成本次擦除操作,
當(dāng)有所有好塊使用完后,該映射表將向系統(tǒng)發(fā)送nandflash芯片寫滿信號(hào)。
通過上面具體實(shí)施方式,所述技術(shù)領(lǐng)域的技術(shù)人員可容易的實(shí)現(xiàn)本發(fā)明。但是應(yīng)當(dāng)理解,本發(fā)明并不限于上述的具體實(shí)施方式。在公開的實(shí)施方式的基礎(chǔ)上,所述技術(shù)領(lǐng)域的技術(shù)人員可任意組合不同的技術(shù)特征,從而實(shí)現(xiàn)不同的技術(shù)方案。
除說明書所述的技術(shù)特征外,均為本專業(yè)技術(shù)人員的已知技術(shù)。