一種測試nftl的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種測試NFTL的方法和系統(tǒng),所述方法包括:控制單元監(jiān)測是否接收到NFTL的操作指令;如果接收到NFTL的操作指令,判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并結(jié)束流程;如果否,則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一。由于機械硬盤沒有最大擦除次數(shù)的限制,因此本發(fā)明不會由于擦除次數(shù)多而損壞機械硬盤,即使在NFTL的測試量很大時,也能夠避免損壞機械硬盤,從而減少資源浪費。
【專利說明】一種測試NFTL的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式系統(tǒng)領(lǐng)域,尤其是涉及一種測試NFTL的方法及系統(tǒng)。
【背景技術(shù)】
[0002]存儲設(shè)備作為程序和數(shù)據(jù)的主要載體,是目前嵌入式系統(tǒng)中不可或缺的硬件模塊。其中,NAND閃存憑借其體積小、容量大、成本低以及掉電數(shù)據(jù)不丟失等一系列優(yōu)點,成為常用的存儲設(shè)備之一。
[0003]NAND閃存中包括多個chip (片選),各個chip具有多個block (塊),各個block包括相同個數(shù)的page (頁),并且NAND閃存根據(jù)其型號的不同具有特定的chip個數(shù)、各個chip包括的block個數(shù)、各個block包括的page個數(shù),以及各個page的大小。對NAND閃存的操作主要包括讀、寫以及擦除操作。
[0004]目前,由于NAND閃存的物理結(jié)構(gòu),導(dǎo)致其具有一些特性要求,例如,對NAND閃存執(zhí)行讀或者寫操作時,都是以page為單位進行,而執(zhí)行擦除操作時以block為單位進行;數(shù)據(jù)不能被直接覆蓋,必須在空的或者已擦除的block內(nèi)執(zhí)行寫操作;NAND閃存的block具有擦除的次數(shù)限制,當(dāng)一個block的擦除次數(shù)大于最大擦除次數(shù)時,則該block成為壞塊,不能繼續(xù)使用。由于NAND閃存的諸多特性,目前通常通過一層中間層,即NAND Flash Translation Layer (NAND閃存轉(zhuǎn)換層,縮寫為NFTL),對NAND閃存進行各種操作,以實現(xiàn)在嵌入式系統(tǒng)中更好的對NAND閃存進行管理。而NFTL在投入市場使用之前,通常要經(jīng)過一系列的測試,以保證NFTL對NAND閃存的操作邏輯符合NAND閃存的特性要求。
[0005]目前,在現(xiàn)有技術(shù)中,對NFTL的測試主要是通過向NFTL輸入不同的數(shù)據(jù)和操作指令,經(jīng)過NFTL的處理后向NAND閃存執(zhí)行相應(yīng)的操作,根據(jù)操作的結(jié)果和測試輸入的數(shù)據(jù)來測試NFTL的操作邏輯。例如,通過NFTL向NAND閃存存入數(shù)據(jù),之后讀取該數(shù)據(jù),判斷讀取的數(shù)據(jù)和存入的數(shù)據(jù)是否一致;又例如,在通過NFTL向NAND存入數(shù)據(jù)后擦除該數(shù)據(jù),判斷數(shù)據(jù)是否成功擦除??梢钥闯觯捎诂F(xiàn)有技術(shù)中,通過NAND閃存對NFTL進行測試,而NAND閃存由于物理結(jié)構(gòu)的特性,擦除次數(shù)達到最大擦除次數(shù)的block會成為壞塊,不能繼續(xù)使用,從而造成NAND閃存損壞,尤其是NFTL的測試量很大時,會損壞大量的NAND閃存而導(dǎo)致資源浪費。
【發(fā)明內(nèi)容】
[0006]本發(fā)明解決的技術(shù)問題在于提供一種測試NFTL的方法及系統(tǒng),即使NFTL的測試量很大時,也能夠避免損壞NAND閃存,從而減少資源的浪費。
[0007]為此,本發(fā)明解決技術(shù)問題的技術(shù)方案是:
[0008]本發(fā)明提供了一種測試NFTL的方法,所述方法用于測試NFTL的系統(tǒng)中,所述系統(tǒng)包括控制單元和機械硬盤,所述控制單元根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)、各個塊的塊標(biāo)識以及塊的最大擦除次數(shù),并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始次數(shù);[0009]所述方法包括:
[0010]控制單元監(jiān)測是否接收到NFTL的操作指令,其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識;
[0011]如果接收到NFTL的操作指令,判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并結(jié)束流程;如果否,則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一;
[0012]其中,當(dāng)機械硬盤存儲的任一塊標(biāo)識對應(yīng)的擦除次數(shù)達到最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。
[0013]優(yōu)選地,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識、以及各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識為讀失敗標(biāo)識或讀成功標(biāo)識,并且在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識;所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù);
[0014]則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括:
[0015]判斷所述操作指令中的操作類型是否為讀操作,如果為讀操作,則判斷機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的讀操作標(biāo)識中是否存在讀失敗標(biāo)識,如果是,則結(jié)束流程。
[0016]優(yōu)選地,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識、以及各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識為寫失敗標(biāo)識或?qū)懗晒?biāo)識,并且在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識;所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù);
[0017]則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括:
[0018]判斷所述操作指令中的操作類型是否為寫操作,如果為寫操作,則判斷機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的寫操作標(biāo)識中是否存在寫失敗標(biāo)識,如果是,則結(jié)束流程。
[0019]優(yōu)選地,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識為擦除失敗標(biāo)識或擦除成功標(biāo)識,并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識;
[0020]則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括:
[0021]判斷所述操作指令中的操作類型是否為擦除操作,如果為擦除操作,則判斷機械硬盤中與操作指令中的操作塊標(biāo)識對應(yīng)的擦除操作標(biāo)識是否為擦除失敗標(biāo)識,如果是,則結(jié)束流程。
[0022]優(yōu)選地,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù);所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù);[0023]在接收到NFTL的操作指令后還包括:判斷所述操作指令中的操作類型是否為寫操作,
[0024]如果是寫操作,則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括:判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為第O頁,如果不為第O頁,則返回寫操作不為第O頁的錯誤提示,并且結(jié)束流程;如果不為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為最大使用頁加一的和,如果否,則返回寫順序錯誤提示并結(jié)束流程;
[0025]如果是寫操作,則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作時,還包括在機械硬盤將操作指令中的操作塊標(biāo)識對應(yīng)的最大使用頁存儲為與所述操作塊標(biāo)識對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù)。
[0026]優(yōu)選地,所述操作參數(shù)還包括層類型標(biāo)識,所述判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識之前還包括:判斷所述層類型標(biāo)識是否為雙層標(biāo)識,如果是,則判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識時還包括:判斷所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并結(jié)束流程。
[0027]優(yōu)選地,設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個頁標(biāo)識對應(yīng)的數(shù)據(jù)為初始數(shù)據(jù);
[0028]則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作包括:
[0029]當(dāng)所述操作指令中的操作類型為寫操作時,在機械硬盤中將與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為寫入數(shù)據(jù),其中,所述操作參數(shù)還包括寫入數(shù)據(jù)、起始頁標(biāo)識和操作頁個數(shù);
[0030]當(dāng)所述操作指令中的操作類型為讀操作時,讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù),其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù);
[0031]當(dāng)所述操作指令中的操作類型是擦除操作時,將操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)。
[0032]優(yōu)選地,其特征在于,所述操作參數(shù)還包括層標(biāo)識;
[0033]當(dāng)所述操作指令中的操作類型為寫操作或讀操作時,若所述操作指令中的層標(biāo)識為單層標(biāo)識,則所述與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識具體為--與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid, pageid+pagenum-1]區(qū)間的各個頁標(biāo)識;若所述操作指令中的層標(biāo)識為雙層標(biāo)識,則所述與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識具體為:與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid, pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識,以及與所述操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的標(biāo)識為[pageid,pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識;其中,pageid為起始頁標(biāo)識,pagenum為操作頁個數(shù);
[0034]當(dāng)所述操作指令中的操作類型為擦除操作時,若所述操作指令中的層標(biāo)識為雙層標(biāo)識,則將操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)時還包括:將操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)。
[0035]本發(fā)明提供了一種測試NFTL的系統(tǒng),所述系統(tǒng)包括控制單元和機械硬盤;
[0036]所述控制單元根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)、各個塊的塊標(biāo)識以及塊的最大擦除次數(shù),并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始次數(shù),以及監(jiān)測是否接收到NFTL的操作指令;其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識;
[0037]如果所述控制單元接收到NFTL的操作指令,所述控制單元判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并停止工作;如果否,則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一;
[0038]其中,所述控制單元還用于當(dāng)機械硬盤存儲的任一塊標(biāo)識對應(yīng)的擦除次數(shù)達到最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。
[0039]優(yōu)選地,所述控制單元還用于根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù);其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù);
[0040]所述控制單元還用于,在接收到NFTL的操作指令后,判斷所述操作指令中的操作類型是否為寫操作;
[0041]如果是寫操作,則所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前,判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為第O頁,如果不為第O頁,則返回寫操作不為第O頁的錯誤提示,并且停止工作;如果不為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為最大使用頁加一的和,如果否,則返回寫順序錯誤提示并停止工作;
[0042]如果是寫操作,則所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作時,在機械硬盤將操作指令中的操作塊標(biāo)識對應(yīng)的最大使用頁存儲為與所述操作塊標(biāo)識對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù)。
[0043]通過上述技術(shù)方案可知,在機械硬盤中存儲塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識和擦除次數(shù),當(dāng)控制單元監(jiān)測到NFTL的操作指令后,判斷操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是壞塊標(biāo)識,則返回操作壞塊提示并且結(jié)束流程,此時可知NFTL向壞塊執(zhí)行了操作;如果不為壞塊標(biāo)識,則根據(jù)操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的讀、寫以及擦除操作,并且判斷操作指令的操作類型是否為擦除操作,如果是,則將機械硬盤中與操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一。當(dāng)機械硬盤中存儲的任一個塊標(biāo)識對應(yīng)的擦除次數(shù)達到了最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。也就是說,在本發(fā)明的技術(shù)方案里,NFTL無需再對NAND閃存執(zhí)行相應(yīng)的操作,只需對控制單元發(fā)送操作指令,控制單元根據(jù)操作指令在機械硬盤中執(zhí)行相應(yīng)的操作,并且通過設(shè)置各個塊的狀態(tài)標(biāo)識使得擦除次數(shù)達到最大擦除次數(shù)的塊成為壞塊。由于機械硬盤與NAND閃存的物理結(jié)構(gòu)完全不同,而且機械硬盤并沒有最大擦除次數(shù)的限制,因此,本發(fā)明的技術(shù)方案并沒有通過NAND閃存測試NFTL,并且也不會由于擦除次數(shù)多而損壞機械硬盤,即使在NFTL的測試量很大時,也能夠避免損壞機械硬盤,更加不會損壞NAND閃存,從而減少資源浪費。
【專利附圖】
【附圖說明】
[0044]圖1為本發(fā)明提供的方法實施例的流程示意圖;
[0045]圖2為一款NAND閃存的物理結(jié)構(gòu);
[0046]圖3為NAND閃存雙plane操作下的cache操作的操作對象圖;
[0047]圖4為本發(fā)明提供的另一方法實施例的流程示意圖;
[0048]圖5為NAND閃存的存儲數(shù)據(jù)圖;
[0049]圖6為本發(fā)明提供的另一方法實施例的流程示意圖;
[0050]圖7為逆序?qū)?、覆蓋寫、和跳寫的示意圖;
[0051]圖8A和圖8B為本發(fā)明提供的另一方法實施例的流程不意圖;
[0052]圖9為本發(fā)明提供的系統(tǒng)實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0053]請參閱圖1,本發(fā)明提供了一種測試NFTL的方法的具體實施例,在該實施例中,所述方法用于測試NFTL的系統(tǒng)中,該系統(tǒng)包括控制單元和機械硬盤。具體地,所述測試NFTL的系統(tǒng)可以為計算機(例如PC機)、嵌入式硬件板等,控制單元可以為ARM (Advanced RISCMachines)、MCU(Micro Control Unit,微處理器)、FPGA(Field-Programmable Gate Array,即現(xiàn)場可編程門陣列)等具有控制功能的模塊。控制單元根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)、各個塊的塊標(biāo)識以及塊的最大擦除次數(shù)。這里,測試NFTL的目標(biāo)NAND閃存是指能夠用于測試該NFTL的NAND閃存,塊標(biāo)識為與NAND閃存的每個塊唯一對應(yīng)的標(biāo)識號。
[0054]并且在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始次數(shù)。這里,實際上是在機械硬盤上給每一個塊都設(shè)置了一個用來標(biāo)識塊的狀態(tài)的標(biāo)識位,以及給每一個塊都設(shè)置一個用來記錄塊的擦除次數(shù)的數(shù)據(jù)位。在具體實施時,可以是在機械硬盤中存儲每一個塊標(biāo)識與該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識和擦除次數(shù),還可以是在機械硬盤中按一定的順序存儲所有的狀態(tài)標(biāo)識和擦除次數(shù),例如,在機械硬盤的一個存儲位置開始依次存放塊標(biāo)識O對應(yīng)的狀態(tài)標(biāo)識,接下來存放塊標(biāo)識I對應(yīng)的狀態(tài)標(biāo)識,以此類推,直到將所有的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識都進行存儲,存儲擦除次數(shù)可以與存儲狀態(tài)標(biāo)識的方式類似,這里不再贅述。
[0055]所述方法包括:
[0056]SlOl:控制單元監(jiān)測是否接收到NFTL的操作指令,其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識。
[0057]操作類型包括讀操作、寫操作、和擦除操作。由于對NAND閃存執(zhí)行讀操作和寫操作時,是以page為單位進行的,因此操作類型為讀操作時,操作參數(shù)至少具有操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù);操作類型是寫操作時,操作參數(shù)至少具有操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)和寫入數(shù)據(jù)。而對NAND閃存執(zhí)行擦除操作時以block為單位的,因此操作類型為擦除操作時,操作參數(shù)至少具有操作塊標(biāo)識。其中,操作塊標(biāo)識指的是NFTL需要執(zhí)行具體讀、寫或者擦除操作的目標(biāo)塊的塊標(biāo)識,起始頁標(biāo)識指的是NFTL需要執(zhí)行具體讀或者寫操作的目標(biāo)頁標(biāo)識的起始頁的頁標(biāo)識,操作頁個數(shù)指的是NFTL需要執(zhí)行具體讀或者寫操作的目標(biāo)頁標(biāo)識的標(biāo)識個數(shù)。
[0058]如果該步驟中的控制單元接收到NFTL的操作指令后,則執(zhí)行S102。這里,如果未接到NFTL的操作指令,則可以持續(xù)執(zhí)行、也可以是以一定時間為周期循環(huán)執(zhí)行S101,均不影響本發(fā)明的實施。
[0059]S102:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則執(zhí)行S103,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為壞塊標(biāo)識;如果否,則執(zhí)行S104,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識不為壞塊標(biāo)識。
[0060]S103:返回操作壞塊提示并結(jié)束流程。此時由于NFTL發(fā)送的操作指令中操作塊標(biāo)識對應(yīng)的是壞塊,因此結(jié)束整個流程。
[0061]S104:根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則執(zhí)行S105。
[0062]S105:將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加
O
[0063]下面根據(jù)操作類型的類別,分別介紹步驟S104中所述對機械硬盤執(zhí)行相應(yīng)的操作這一步驟的具體執(zhí)行動作。
[0064]當(dāng)操作類型為寫操作時,在步驟S104之前設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,則該步驟S104中的根據(jù)所述操作 指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作包括:在機械硬盤中將與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為寫入數(shù)據(jù)。其中,與操作塊標(biāo)識、操作頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識指的是與所述操作塊標(biāo)識對應(yīng)的、頁標(biāo)識為[pageid, pageid+pagenum-1]區(qū)間的各個頁標(biāo)識。其中,pageid為操作參數(shù)中的起始頁標(biāo)識,pagenum為操作參數(shù)中的操作頁個數(shù)。例如,操作塊標(biāo)識blkid為2, pageid為4,操作頁個數(shù)pagenum為5,則上述與操作塊標(biāo)識、操作頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識指的是,操作塊標(biāo)識blkid為2對應(yīng)的,頁標(biāo)識4、5、6、7和8。
[0065]當(dāng)操作類型為讀操作時,在步驟S104之前設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,則該步驟S104的根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作包括:讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù)。這里對與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識的解釋與上一段相同,因此不再贅述。在該步驟S104之前,還可以在機械硬盤中將各個塊標(biāo)識所對應(yīng)的各個頁標(biāo)識對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù),例如Oxff。
[0066]當(dāng)操作類型為擦除操作時,則該步驟S104中的根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作包括:擦除機械硬盤中、所述操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)。如果在該步驟S104之前已經(jīng)將機械硬盤中各個塊標(biāo)識對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù),例如Oxff,則上述擦除機械硬盤中、所述操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)可以具體為將機械硬盤中、所述操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù),例如Oxff。
[0067]在該實施例中,所述方法還包括:當(dāng)機械硬盤存儲的任一塊標(biāo)識對應(yīng)的擦除次數(shù)達到最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。具體地,判斷該塊標(biāo)識對應(yīng)的擦除次數(shù)的過程可以在該實施例中的任一步驟,由于只有在執(zhí)行了擦除操作后擦除次數(shù)才會發(fā)生變化,因此上述判斷過程通常在執(zhí)行擦除操作之前、或者執(zhí)行擦除操作并且擦除次數(shù)加一之后執(zhí)行。下面分別具體介紹:若在執(zhí)行擦除操作之前執(zhí)行上述判斷過程,則具體為當(dāng)步驟SlOl的判斷結(jié)果為是,并且在執(zhí)行步驟S102之前執(zhí)行:若所述操作類型為擦除操作,則判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。若在執(zhí)行擦除操作并且擦除次數(shù)加一之后執(zhí)行,則具體為所述將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一之后還包括:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。
[0068]通過上述技術(shù)方案可知,該實施例中在機械硬盤中存儲塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識和擦除次數(shù),當(dāng)控制單元監(jiān)測到NFTL的操作指令后,判斷操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是壞塊標(biāo)識,則返回操作壞塊提示并且結(jié)束流程,此時可知NFTL向壞塊執(zhí)行了操作;如果不為壞塊標(biāo)識,則根據(jù)操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的讀、寫以及擦除操作,并且判斷操作指令的操作類型是否為擦除操作,如果是,則將機械硬盤中與操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一。當(dāng)機械硬盤中存儲的任一個塊標(biāo)識對應(yīng)的擦除次數(shù)達到了最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。也就是說,在本發(fā)明的技術(shù)方案里,NFTL無需再對NAND閃存執(zhí)行相應(yīng)的操作,只需對控制單元發(fā)送操作指令,控制單元根據(jù)操作指令在機械硬盤中執(zhí)行相應(yīng)的操作,并且通過設(shè)置各個塊的狀態(tài)標(biāo)識使得擦除次數(shù)達到最大擦除次數(shù)的塊成為壞塊。而機械硬盤與NAND閃存的物理結(jié)構(gòu)完全不同,并且機械硬盤與NAND閃存相比,具有非常重要的一項特性,就是機械硬盤并沒有最大擦除次數(shù)的限制,因此,本發(fā)明的技術(shù)方案并沒有通過NAND閃存測試NFTL,并且也不會由于擦除次數(shù)多而損壞機械硬盤,即使在NFTL的測試量很大時,也能夠避免損壞機械硬盤,更加不會損壞NAND閃存,從而減少資源浪費。
[0069]并且現(xiàn)有技術(shù)中,由于直接在NAND閃存上進行測試,因此無法對測試過程進行調(diào)試,并且很難判斷測試時出現(xiàn)的問題是由NFTL造成,還是由NAND閃存本身造成。而在本實施例中,還可以在所述系統(tǒng)中安裝調(diào)試工具,例如VisualC++(VC)等,以實現(xiàn)方便的跟蹤調(diào)試測試中發(fā)現(xiàn)的調(diào)試問題,從而確定測試的問題是否由NFTL造成。
[0070]實際上,NAND閃存可以具有單層(plane)操作和雙層(plane)操作,則此時在操作參數(shù)中還包括層(plane)類型標(biāo)識,其中plane類型標(biāo)識包括單層標(biāo)識和雙層標(biāo)識兩種類型。首先介紹一下NAND閃存的單plane操作和雙plane操作。
[0071]圖2為一款三星公司的型號為K9LBG08U0M的NAND閃存的plane切分圖。單片選的 K9LBG08U0M 共有 8192 個 block,被切分為 4 個 plane,分別為 planeO、planel、plane2和 plane3。其中 planeO 包括了 blockO、block2、…、block4094 共 2098 個 block, planel包括了 blockl、block3、…、block4095 共 2098 個 block, plane2 包括了 block4096、
block4098、…、block8190 共 2098 個 block,plane3 包括了 block4097、block4099、......、
block8191 共 2098 個 block。每個 block 各包括 pageO 到 pagel27 共 128 個 page。
[0072]其中,planeO與planel中的block互為奇偶交替,plane2和plane3中的block也互為奇偶交替,這些奇偶交替的一對plane就稱為pairedplane,在互為paired plane的兩個plane內(nèi)處于一條水平線的兩個block,稱為同組block。例如:plane0的blockO和planel 的 blockl 是同組的 block ;plane2 的 block3 和 plane3 的 block4 是同組的 block
坐坐寸寸O
[0073]對于不是cache方式的NAND閃存的普通操作,都是單plane的操作,即擦除操作時只能夠擦除某個plane的一個block,讀操作或者寫操作則只能夠同時讀或?qū)懩骋粋€plane的某個block的其中一個page。
[0074]圖2所示的NAND閃存除了提供單plane的操作外,還提供雙plane的操作。值得說明的是,雙plane操作只能在互為paired plane的兩個plane內(nèi)操作。如:雙plane擦除操作可對planeO的block2和planel的block3同時進行擦除;雙plane讀操作或者寫操作則可對block2和block3的同一頁進行寫或讀操作。
[0075]因此,本實施例中的操作參數(shù)還可以包括起始頁標(biāo)識、操作頁個數(shù)、和plane類型標(biāo)識,并且在步驟S104之前為各個塊標(biāo)識設(shè)置對應(yīng)的頁標(biāo)識。當(dāng)plane類型標(biāo)識為雙層標(biāo)識時,說明此時需要對標(biāo)識為blkid和blkid+Ι的塊標(biāo)識執(zhí)行操作。其中,blkid為操作塊標(biāo)識。因此在步驟S102之前還可以包括:判斷所述層類型標(biāo)識是否為雙層標(biāo)識,如果是,則執(zhí)行步驟S102時還包括:判斷所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并結(jié)束流程。
[0076]此外,本實施例的步驟S104中,當(dāng)操作類型為讀操作或?qū)懖僮鲿r并且所述plane類型標(biāo)識為雙層標(biāo)識時,則與操作塊標(biāo)識、操作頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識應(yīng)該指的是與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid, pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識,以及與所述操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的標(biāo)識為[pageid,pageid+pagenum/2-l]區(qū)間的各個頁標(biāo)識。其中,pageid為所述起始頁標(biāo)識,pagenum為所述操作頁個數(shù)。例如,操作塊標(biāo)識blkid為2, pageid為4,操作頁個數(shù)pagenum為6,則上述與操作塊標(biāo)識、操作頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識指的是,操作塊標(biāo)識blkid為2對應(yīng)的,頁標(biāo)識4、5、6和操作塊標(biāo)識blkid為3對應(yīng)的頁標(biāo)識4、5、6。當(dāng)操作類型為擦除操作時并且所述plane類型標(biāo)識為雙層標(biāo)識時,則所述將操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)擦除時還包括:將操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)擦除。當(dāng)然,這里擦除操作也可以用存儲為初始數(shù)據(jù)這一操作進行替換。具體過程參見步驟104的相關(guān)之處的具體描述。
[0077]NAND閃存之所以能夠被廣泛應(yīng)用,一個很重要的原因就是NAND閃存具有掉電不丟失的特性,這是因為NAND閃存上所有塊上每個頁均存在的00B(Out Of Band)信息。00B信息是用于在寫數(shù)據(jù)時NAND閃存關(guān)機或掉電時保存的恢復(fù)數(shù)據(jù),并且當(dāng)NAND閃存再開機后則根據(jù)該00B信息進行數(shù)據(jù)的恢復(fù)操作。因此在本實施例中,操作參數(shù)還可以包括起始頁標(biāo)識、操作頁個數(shù)、以及00B信息。則步驟S104中所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作時還包括:
[0078]判斷所述操作指令中的操作類型為寫操作、讀操作或擦除操作,如果為寫操作,則根據(jù)操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)將操作參數(shù)中的00B信息寫入機械硬盤中,其中所述操作參數(shù)除操作塊標(biāo)識外,還包括起始頁標(biāo)識、操作頁個數(shù)和00B信息;如果為讀操作,則讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的00B信息,其中所述操作參數(shù)除操作塊標(biāo)識外,還包括起始頁標(biāo)識和操作頁個數(shù);如果為擦除操作,則擦除機械硬盤中與所述操作塊標(biāo)識對應(yīng)的所有操作頁標(biāo)識所對應(yīng)的00B信息,其中所述操作參數(shù)包括操作塊標(biāo)識。當(dāng)然,這里擦除操作也可以用存儲為初始數(shù)據(jù)這一操作進行替換。具體過程參見步驟S104的相關(guān)之處的具體描述。
[0079]優(yōu)選地,在操作指令中的操作類型為讀操作或者寫操作時,需要從機械硬盤中讀取或?qū)懭霐?shù)據(jù)。在執(zhí)行讀取或?qū)懭氩僮鲿r,根據(jù)目標(biāo)NAND閃存的型號,如果NAND閃存支持cache方式,還可以采用cache方式進行操作,即一次性對連續(xù)的多個頁同時執(zhí)行讀操作或?qū)懖僮鳌F渲?,cache方式分為單plane情況下的cache方式,以及雙plane情況下的cache方式。單plane情況下的cache方式能夠?qū)δ硞€plane的某個block內(nèi)的連續(xù)的若干頁同時執(zhí)行讀或?qū)懖僮?,而雙plane情況下的cache方式能夠?qū)閜aired plane的兩個plane內(nèi)的同組block內(nèi)同時執(zhí)行若干頁的讀或?qū)懖僮?。例?單plane情況下的cache方式,可對某個plane的某個block內(nèi)的所有頁同時進行讀或?qū)懀蝗鐖D3所示,雙plane情況下的cache方式讀或?qū)?,貝U可對block2和block3的從pageO到pagel27同時進行讀或與。
[0080]在本實施例中,所述方法用于單個片選的情況,而在其他實施例中,還可以設(shè)置多個片選。具體為:控制單元還根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置片選的個數(shù)、各個片選的片選標(biāo)識,以及設(shè)置各個片選的片選標(biāo)識分別對應(yīng)的塊標(biāo)識。例如,片選個數(shù)為4時,各個片選的片選標(biāo)識分別為chipidO、chipidl、chipid2、chipid3,其中,各個片選的片選標(biāo)識各對應(yīng)4個塊標(biāo)識,具體為片選標(biāo)識chipidO對應(yīng)blkidO、blkidl、blkid2、和 blkid3 的塊標(biāo)識,片選標(biāo)識 chipidl、chipid2、和 chipid3 也各對應(yīng) blkidO、blkidl、blkid2、和blkid3的塊標(biāo)識。此時操作參數(shù)還包括操作片選標(biāo)識。
[0081]為了測試NFTL處理各種失敗(讀失敗、寫失敗和擦失敗)的容錯處理能力,可以在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識、讀失敗標(biāo)識、和擦除失敗標(biāo)識。下面通過一個實施例加以說明。在這里需要說明的是,在下面的一個實施例中,不妨設(shè)所述測試NFTL的系統(tǒng)為一 PC機,同時NFTL的目標(biāo)NAND閃存的型號決定該NAND閃存具有4個塊、每個塊具有6個頁,每個頁的大小是4個字節(jié)。
[0082]請參閱圖4,本發(fā)明還提供了一測試NFTL的方法的另一具體實施例,在該實施例中,所述方法用于一PC機中,所述PC機包括控制單元(具體可以為CPU)和機械硬盤??刂茊卧鶕?jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)為4,各個塊標(biāo)識分別為blkidO、blkidl、blkid2和blkid3,每個塊標(biāo)識對應(yīng)6個頁標(biāo)識,每個塊標(biāo)識對應(yīng)的頁標(biāo)識分別為pageid0> pageidl、pageid2、pageid3、pageid4、和 pageid5。塊的最大擦除次數(shù)為 100。
[0083]在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識BLK_ERASEFLAG、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始值0x00,存儲各個頁標(biāo)識對應(yīng)的初始數(shù)據(jù)為Oxff。在本實施例中,存儲初始標(biāo)識、初始值時,按照第O個塊到最后一個塊的順序,即塊標(biāo)識blkidO到blkid3的順序進行存儲。存儲初始數(shù)據(jù)時,按照第O個塊到最后一個塊的順序,每個塊中按照第O個頁到最后一頁的順序,即頁標(biāo)識pageido到pageid5的順序進行存儲。在其他實施例中,存儲的順序不加限定。圖5為本實施例中各個塊標(biāo)識對應(yīng)的各個頁標(biāo)識所對應(yīng)的初始數(shù)據(jù)的示意圖。
[0084]控制單元還根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識為讀失敗標(biāo)識或讀成功標(biāo)識,設(shè)置各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識為寫失敗標(biāo)識或?qū)懗晒?biāo)識、以及設(shè)置各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識為擦除失敗標(biāo)識或擦除成功標(biāo)識,并且在機械硬盤中存儲各個頁標(biāo)識對應(yīng)的讀操作標(biāo)識、寫操作標(biāo)識和各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識。例如,根據(jù)測試的需要,可以設(shè)置NAND閃存的任意個頁的讀操作標(biāo)識為讀失敗標(biāo)識,其余頁標(biāo)識對應(yīng)的讀操作標(biāo)識為讀成功標(biāo)識。
[0085]所述方法包括:
[0086]S401:控制單元監(jiān)測是否接收到NFTL的操作指令,其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識。
[0087]操作類型包括讀操作、寫操作、和擦除操作。當(dāng)操作類型為讀操作時,操作參數(shù)至少具有操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)、和層(Plane)類型標(biāo)識;操作類型是寫操作時,操作參數(shù)至少具有操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)、寫入數(shù)據(jù)、plane類型標(biāo)識、和OOB信息;操作類型為擦除操作時,操作參數(shù)至少具有操作塊標(biāo)識、和plane類型標(biāo)識。
[0088]如果該步驟中的控制單元接收到NFTL的操作指令后,則執(zhí)行S402。這里,如果未接到NFTL的操作指令,則可以持續(xù)執(zhí)行、也可以是以一定時間為周期循環(huán)執(zhí)行S401,均不影響本發(fā)明的實施。
[0089]S402:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識BLK_BADFLAG,如果是,則執(zhí)行S403,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為壞塊標(biāo)識BLK_BADFLAG ;如果否,則執(zhí)行S404,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識不為壞塊標(biāo)識BLK_BADFLAG。
[0090]S403:返回操作壞塊提示并結(jié)束流程。此時由于NFTL發(fā)送的操作指令中操作塊標(biāo)識對應(yīng)的是壞塊,因此結(jié)束整個流程。
[0091]S404:判斷操作指令中的操作類型為寫操作、讀操作或者擦除操作,如果為寫操作,則執(zhí)行S405。如果為讀操作,執(zhí)行S408,如果為擦除操作,執(zhí)行S411。
[0092]S405,此時操作類型為寫操作,判斷機械硬盤中與所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識中所對應(yīng)的寫操作標(biāo)識是否存在寫失敗標(biāo)識,如果是,則執(zhí)行S406,如果否,則執(zhí)行S407。
[0093]S406:結(jié)束流程,并且結(jié)束流程時還可以返回寫失敗提示。
[0094]S407:在機械硬盤中將與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為所述寫入數(shù)據(jù),并且根據(jù)操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)將操作參數(shù)中的OOB信息寫入機械硬盤中。結(jié)束流程。
[0095]S408:此時操作類型為讀操作,判斷機械硬盤中與所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識中所對應(yīng)的讀操作標(biāo)識是否存在讀失敗標(biāo)識,如果是,則執(zhí)行S409,如果否,則執(zhí)行S410。
[0096]S409:結(jié)束流程,并且結(jié)束流程時還可以返回讀失敗提示。
[0097]S410:讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù),并且讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的OOB信息。結(jié)束流程。
[0098]其中,在讀操作和寫操作中的與所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識,當(dāng)操作參數(shù)中的plane類型標(biāo)識為單層標(biāo)識時,指的是與所述操作塊標(biāo)識對應(yīng)的、頁標(biāo)識為[pageid, pageid+pagenum-1]區(qū)間的各個頁標(biāo)識。當(dāng)操作參數(shù)中的PI an e類型標(biāo)識為雙層標(biāo)識時,指的是與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid,pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識,以及與所述操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的標(biāo)識為[pageid,pageid+pagenum/2-l]區(qū)間的各個頁標(biāo)識。其中,pageid為所述起始頁標(biāo)識,pagenum為所述操作頁個數(shù)。并且,在讀操作和寫操作中所指的所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)與其所對應(yīng)的OOB信息的對應(yīng)關(guān)系,與本段所述的所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)與其所對應(yīng)的頁標(biāo)識的對應(yīng)關(guān)系相同,因此不再贅述。
[0099]優(yōu)選地,在上述寫數(shù)據(jù)或讀數(shù)據(jù)的過程可以采用cache的方式。
[0100]S411:此時操作類型為擦除操作,判斷plane類型標(biāo)識為單層標(biāo)識或雙層標(biāo)識,如果為單層標(biāo)識,則執(zhí)行S412,如果為雙層標(biāo)識,則執(zhí)行S416。
[0101]S412:此時plane類型標(biāo)識為單層標(biāo)識,判斷機械硬盤中與操作指令中的操作塊標(biāo)識對應(yīng)的擦除操作標(biāo)識是否為擦除失敗標(biāo)識,如果是,則執(zhí)行S413,如果否,則執(zhí)行S414。
[0102]S413:結(jié)束流程,并且結(jié)束流程時還可以返回擦除失敗提示。
[0103]S414:將機械硬盤中、所述操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)Oxff,并且將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一。
[0104]S415:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG。也就是說,當(dāng)擦除次數(shù)達到100次的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為BLK_BADFLAG,不能再對該塊標(biāo)識對應(yīng)的數(shù)據(jù)執(zhí)行讀、寫或者擦除操作。結(jié)束流程。
[0105]S416:此時plane類型標(biāo)識為雙層標(biāo)識,判斷機械硬盤中與操作指令中的操作塊標(biāo)識blkid和操作塊標(biāo)識blkid加一的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識中是否存在擦除失敗標(biāo)識,如果是,則執(zhí)行S413,如果否,則執(zhí)行S417。
[0106]S417:將機械硬盤中、所述操作塊標(biāo)識,和所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)Oxff并且將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一,以及將操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的擦除次數(shù)加
O
[0107]S418:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG,以及判斷所述操作指令中的操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG。
[0108]可以看出,在本實施例中,在機械硬盤中為每個頁標(biāo)識都存儲了對應(yīng)的讀操作標(biāo)識、寫操作標(biāo)識、以及為每個塊標(biāo)識都存儲了擦除操作標(biāo)識,而在其他實施例中,可以只存儲讀操作標(biāo)識、寫操作標(biāo)識和擦除操作標(biāo)識中的一個或任意個組合,還可以只為每個頁標(biāo)識設(shè)置一個操作標(biāo)識,該操作標(biāo)識可以具體為讀失敗標(biāo)識READPAGE_FAIL、寫失敗標(biāo)識WRITEPAGE_FAIL、擦除失敗標(biāo)識 ERASEPAGE_FAIL,以及操作成功標(biāo)識 RWEPAGE_SUCCESS。當(dāng)操作類型為寫操作或讀操作時,步驟S404中判斷讀操作標(biāo)識或?qū)懖僮鳂?biāo)識的過程替換為判斷操作標(biāo)識的過程。當(dāng)操作類型為擦除操作時,步驟S404中判斷操作標(biāo)識的過程替換為判斷操作塊標(biāo)識對應(yīng)的某一個或某幾個頁標(biāo)識的操作標(biāo)識的過程。例如,判斷操作塊標(biāo)識為blkidO的塊標(biāo)識是否為擦除失敗時,只需判斷操作塊標(biāo)識為blkidO的塊標(biāo)識對應(yīng)的第O個頁的頁標(biāo)識pageido的操作標(biāo)識是否為擦除失敗。
[0109]綜上,本實施例中通過在機械硬盤中存儲讀操作標(biāo)識、寫操作標(biāo)識和擦除操作標(biāo)識,實現(xiàn)測試NFTL處理各種失敗(讀失敗、寫失敗和擦失敗)的容錯處理能力。
[0110]本實施例中,所述系統(tǒng)中還可以安裝調(diào)試工具,例如VC等,以實現(xiàn)方便的跟蹤和調(diào)試測試中發(fā)現(xiàn)的BUG。
[0111]在目前的現(xiàn)有技術(shù)中,對NFTL的測試是通過直接在NAND閃存上進行的,當(dāng)執(zhí)行寫操作時,也只是將數(shù)據(jù)寫到操作參數(shù)指定的頁上,并不能對NFTL的操作指令是否符合NAND閃存的寫操作順序的特性要求進行測試。而在本發(fā)明提供的下一個實施例中,就能夠解決上述問題。在這里需要說明的是,在下面的一個實施例中,不妨設(shè)所述測試NFTL的系統(tǒng)為一 PC機,同時NFTL的目標(biāo)NAND閃存的型號決定該NAND閃存具有4個塊、每個塊具有6個頁,每個頁的大小是4個字節(jié)。
[0112]請參閱圖6,本發(fā)明還提供了一測試NFTL的方法的另一具體實施例,在該實施例中,所述方法用于一PC機中,所述PC機包括控制單元(具體可以為CPU)和機械硬盤??刂茊卧鶕?jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)為4,各個塊標(biāo)識分別為blkidO、blkidl、blkid2和blkid3,每個塊標(biāo)識對應(yīng)6個頁標(biāo)識,每個塊標(biāo)識對應(yīng)的頁標(biāo)識分別為pageidO、pageidl、pageid2、pageid3、pageid4、和 pageid5。塊的最大擦除次數(shù)為 100。
[0113]在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識BLK_ERASEFLAG、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始值0x00,存儲各個頁標(biāo)識對應(yīng)的初始數(shù)據(jù)為Oxff、存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù)Oxffff。
[0114]所述方法包括:
[0115]S601:控制單元監(jiān)測是否接收到NFTL的操作指令,其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識。
[0116]操作類型包括讀操作、寫操作、和擦除操作。當(dāng)操作類型為讀操作時,操作參數(shù)至少具有操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)、和層(Plane)類型標(biāo)識;操作類型是寫操作時,操作參數(shù)至少具有操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)、寫入數(shù)據(jù)、層類型標(biāo)識、和00B信息;操作類型為擦除操作時,操作參數(shù)至少具有操作塊標(biāo)識、和層類型標(biāo)識。
[0117]如果該步驟中的控制單元接收到NFTL的操作指令后,則執(zhí)行S602。這里,如果未接到NFTL的操作指令,則可以持續(xù)執(zhí)行、也可以是以一定時間為周期循環(huán)執(zhí)行S601,均不影響本發(fā)明的實施。
[0118]S602:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識BLK_BADFLAG,如果是,則執(zhí)行S603,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為壞塊標(biāo)識BLK_BADFLAG ;如果否,則執(zhí)行S604,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識不為壞塊標(biāo)識BLK_BADFLAG。
[0119]S603:返回操作壞塊提示并結(jié)束流程。此時由于NFTL發(fā)送的操作指令中操作塊標(biāo)識對應(yīng)的是壞塊,因此結(jié)束整個流程。
[0120]S604:判斷操作指令中的操作類型為寫操作、讀操作或者擦除操作。如果為寫操作,執(zhí)行S605,如果為讀操作,執(zhí)行S611,如果為擦除操作,執(zhí)行S612。
[0121]S605:此時操作類型為寫操作,判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則執(zhí)行S606,如果不為初始頁數(shù),則執(zhí)行S608。[0122]S606:判斷所述起始頁標(biāo)識是否為第O頁,如果不為第O頁,則執(zhí)行S607 ;如果為第O頁,則執(zhí)行S610。
[0123]S607:返回寫操作不為第O頁的錯誤提示,并且結(jié)束流程。
[0124]S608:判斷所述起始頁標(biāo)識是否為最大使用頁加一的和,如果否,則執(zhí)行S609,如果是,則執(zhí)行S610。
[0125]S609:返回寫順序錯誤提示并結(jié)束流程。
[0126]S610:在機械硬盤中將與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為所述寫入數(shù)據(jù),以及在機械硬盤將與操作指令中的操作塊標(biāo)識對應(yīng)的最大使用頁存儲為與所述操作塊標(biāo)識對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù),并且根據(jù)操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)將操作參數(shù)中的OOB信息寫入機械硬盤中。這里所說的的未寫入數(shù)據(jù)的頁標(biāo)識是指沒有在機械硬盤存儲寫入數(shù)據(jù)的頁標(biāo)識,而存儲初始數(shù)據(jù)的頁標(biāo)識并不算是寫入數(shù)據(jù)的頁標(biāo)識。結(jié)束流程。
[0127]S611:此時操作類型為讀操作,讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù),并且讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的OOB信息。
[0128]其中,在讀操作和寫操作中的與所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識,當(dāng)操作參數(shù)中的plane類型標(biāo)識為單層標(biāo)識時,指的是與所述操作塊標(biāo)識對應(yīng)的、頁標(biāo)識為[pageid, pageid+pagenum-1]區(qū)間的各個頁標(biāo)識。當(dāng)操作參數(shù)中的PI an e類型標(biāo)識為雙層標(biāo)識時,指的是與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid,pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識,以及與所述操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的標(biāo)識為[pageid,pageid+pagenum/2-l]區(qū)間的各個頁標(biāo)識。其中,pageid為所述起始頁標(biāo)識,pagenum為所述操作頁個數(shù)。并且,在讀操作和寫操作中所指的所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)與其所對應(yīng)的OOB信息的對應(yīng)關(guān)系,與本段所述的所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)與其所對應(yīng)的頁標(biāo)識的對應(yīng)關(guān)系相同,因此不再贅述。
[0129]優(yōu)選地,在上述寫數(shù)據(jù)或讀數(shù)據(jù)的過程可以采用cache的方式。
[0130]S612:此時操作類型為擦除操作,判斷plane類型為單層標(biāo)識或雙層標(biāo)識,如果為單層標(biāo)識,則執(zhí)行S613,如果為雙層標(biāo)識,則執(zhí)行S615。
[0131]S613:此時plane類型標(biāo)識為單層標(biāo)識,將機械硬盤中、所述操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)Oxff,并且將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一。
[0132]S614:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG。也就是說,當(dāng)擦除次數(shù)達到100次的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為BLK_BADFLAG,因此不能對該塊標(biāo)識對應(yīng)的數(shù)據(jù)執(zhí)行讀、寫或者擦除操作。結(jié)束流程。
[0133]S615:此時plane類型標(biāo)識為雙層標(biāo)識,將機械硬盤中、與所述操作塊標(biāo)識,和所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)OxfT并且將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一、以及將操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的擦除次數(shù)加一。[0134]S616:判斷所述操作指令中的操作塊標(biāo)識和對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG,以及判斷所述操作指令中的操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG。
[0135]在本實施例的步驟S605中,當(dāng)操作類型為寫操作時,判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù)這一步驟可以用判斷所述操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為初始標(biāo)識BLK_ERASEFLAG代替。并且當(dāng)所述操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識BLK_ERASEFLAG時,則相當(dāng)于所述操作塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù)。此時,則在機械硬盤中將與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為所述寫入數(shù)據(jù)時還包括:在機械硬盤中將與操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為已寫狀態(tài)BLK_DIRTYFLAG,并且在該步驟S612中,當(dāng)操作類型為擦除操作時,當(dāng)plane類型標(biāo)識為單層標(biāo)識時,則在機械硬盤中將操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為初始狀態(tài)BLK_ERASEFLAG,當(dāng)plane類型標(biāo)識為雙層標(biāo)識時,則將機械硬盤中、所述操作塊標(biāo)識,和所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識均存儲為初始狀態(tài)BLK_ERASEFLAG。
[0136]在本實施例中的步驟S605中,當(dāng)操作類型為寫操作并且操作塊標(biāo)識對應(yīng)的最大使用頁不為初始頁數(shù)時,判斷起始頁標(biāo)識是否為最大使用頁加一的和。實際上,當(dāng)起始頁標(biāo)識不為最大使用頁加一的和時,說明NFTL的操作指令可能發(fā)生了逆序?qū)?、跳寫和覆蓋寫錯誤。參照圖7,圖7中從上到下依次描述了順序連續(xù)性、逆序?qū)?、覆蓋寫和跳寫的塊示意圖。其中每一個方格為一個page,每十個page為一個block,圖7中不出了 blockO、blockl和block2,有斜線的page為已寫有數(shù)據(jù)的page,有橫線的page為本次寫入數(shù)據(jù)的page。逆序?qū)懯侵笇?shù)據(jù)寫入該塊中已經(jīng)寫有數(shù)據(jù)的最大頁之前的頁中,覆蓋寫是指將數(shù)據(jù)寫入該塊中已經(jīng)寫有數(shù)據(jù)的最大頁中,而跳寫指的是將數(shù)據(jù)寫入該塊中已經(jīng)寫有數(shù)據(jù)的最大頁加一的頁之后的頁中。
[0137]為了能夠進一步判斷NFTL的操作指令是否符合NAND閃存的順序?qū)?、跳寫和覆蓋寫的特性要求,在本實施例的步驟S605中,當(dāng)操作類型為寫操作時,判斷所述起始頁標(biāo)識是否為最大使用頁加一的和可以具體為判斷所述起始頁標(biāo)識是否小于最大使用頁,如果是,則返回逆序?qū)戝e誤并結(jié)束流程、判斷所述起始頁標(biāo)識是否等于最大使用頁,如果是,則返回覆蓋寫錯誤并結(jié)束流程、以及判斷所述起始頁標(biāo)識是否大于最大使用頁加一的和,如果是,則返回跳寫錯誤并結(jié)束流程。
[0138]可以看出,本實施例中,當(dāng)執(zhí)行寫操作時,能夠?qū)FTL的操作指令是否符合NAND閃存的寫操作順序的特性要求進行測試。
[0139]下面提供一個本發(fā)明優(yōu)選的一個具體實施例。
[0140]請參閱圖8A和圖8B,本發(fā)明還提供了一測試NFTL的方法的另一具體實施例,在該實施例中,所述方法用于一 PC機中,所述PC機包括控制單元(具體可以為CPU)和機械硬盤。控制單元根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的片選個數(shù)為2,各個片選標(biāo)識分別為chipidO和chipidl,各個片選的塊的個數(shù)為4,各個塊標(biāo)識分別為blkid0、blkidl、blkid2和blkid3,每個塊標(biāo)識對應(yīng)6個頁標(biāo)識,每個塊標(biāo)識對應(yīng)的頁標(biāo)識分別為pageidO、pageidl、pageid2、pageid3、pageid4、和 pageid5。塊的最大擦除次數(shù)為 100。[0141]在PC機的機械硬盤上為每個片選生成3個文件,分別命名為vnand.data, vnand.blkstatus和vnand.spare。vnand.data存儲的是單個片選上所有塊上每個頁的數(shù)據(jù),vnand.blkstatus記錄的是單個片選上所有塊的狀態(tài)標(biāo)識、擦除次數(shù)和最大使用頁,vnand.spare記錄的是單個片選上所有塊上每個頁的OOB信息。也就是說,在本實施例中,通過文件實現(xiàn)模擬真實的NAND閃存的方式,因此不需要用真實的NAND閃存來測試NFTL。
[0142]在vnand.blkstatus中存儲各個塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識BLK_ERASEFLAG、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始值0x00、以及存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù)Oxffff。在vnand.data中存儲各個頁標(biāo)識對應(yīng)的初始數(shù)據(jù)為Oxff0在本實施例中,存儲初始標(biāo)識、初始值時,按照第O個塊到最后一個塊的順序,即塊標(biāo)識blkidO到blkid5的順序進行存儲。存儲初始數(shù)據(jù)時,按照第O個塊到最后一個塊的順序,每個塊中按照第O個頁到最后一頁的順序,即頁標(biāo)識pageidO到pageid5的順序進行存儲。在其他實施例中,存儲的順序不加限定。
[0143]控制單元還根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個頁的頁標(biāo)識對應(yīng)的操作標(biāo)識為讀失敗標(biāo)識READPAGE_FAIL、寫失敗標(biāo)識WRITEPAGE_FAIL、擦除失敗標(biāo)識ERASEPAGE_FAIL,以及操作成功標(biāo)識RWEPAGE_SUCCESS。各個塊的擦除操作狀態(tài)由該塊的第O個頁對應(yīng)的操作標(biāo)識決定。
[0144]此外需要說明的是,本實施例中提供的方法共有27個步驟,其中S801-S804,以及S816-S827在圖8A中,S805-S815在圖8B中,圖8A中S804的判斷結(jié)果為寫操作時,則執(zhí)行圖8B中的S805。
[0145]所述方法包括:
[0146]S801:控制單元監(jiān)測是否接收到NFTL的操作指令,其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作片選標(biāo)識和操作塊標(biāo)識。
[0147]操作類型包括讀操作、寫操作、和擦除操作。當(dāng)操作類型為讀操作時,操作參數(shù)至少具有操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)、和層(Plane)類型標(biāo)識;操作類型是寫操作時,操作參數(shù)至少具有操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識、操作頁個數(shù)、寫入數(shù)據(jù)、層類型標(biāo)識、和OOB信息;操作類型為擦除操作時,操作參數(shù)至少具有操作片選標(biāo)識、操作塊標(biāo)識、和層類型標(biāo)識。
[0148]如果該步驟中的控制單元接收到NFTL的操作指令后,則執(zhí)行S802。這里,如果未接到NFTL的操作指令,則可以持續(xù)執(zhí)行、也可以是以一定時間為周期循環(huán)執(zhí)行S801,均不影響本發(fā)明的實施。
[0149]S802:判斷所述操作指令中的操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識所對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識BLK_BADFLAG,如果是,則執(zhí)行S803,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為壞塊標(biāo)識BLK_BADFLAG ;如果否,則執(zhí)行S804,此時操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識不為壞塊標(biāo)識BLK_BADFLAG。
[0150]S803:返回操作壞塊提示并結(jié)束流程。此時由于NFTL發(fā)送的操作指令中操作塊標(biāo)識對應(yīng)的是壞塊,因此結(jié)束整個流程。
[0151]S804:判斷操作指令中的操作類型為寫操作、讀操作或者擦除操作,如果為寫操作,則執(zhí)行S805,如果為讀操作,則執(zhí)行S817,如果為擦除操作,則執(zhí)行S820。
[0152]S805:此時操作類型為寫操作,判斷機械硬盤中與所述操作參數(shù)中的操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識中所對應(yīng)的操作標(biāo)識是否存在寫失敗標(biāo)識WRITEPAGE_FAIL,如果是,則執(zhí)行S806,此時待寫的頁標(biāo)識中存在寫失敗標(biāo)識,如果否,則執(zhí)行S807,此時待寫的頁標(biāo)識均為操作成功標(biāo)識。
[0153]S806:結(jié)束流程,并且結(jié)束流程時還可以返回寫失敗提示。
[0154]S807:判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則執(zhí)行S808,如果不為初始頁數(shù),則執(zhí)行S810。
[0155]S808:判斷所述起始頁標(biāo)識是否為弟O頁,如果不為弟O頁,則執(zhí)彳丁 S809,如果為第O頁,則執(zhí)行S816。
[0156]S809:返回寫操作不為第O頁的錯誤提示,并且結(jié)束流程,
[0157]S810:判斷所述起始頁標(biāo)識是否小于最大使用頁,如果是,則執(zhí)行S811,如果否,則執(zhí)行S812。
[0158]S811:返回逆序?qū)戝e誤提示并結(jié)束流程。
[0159]S812:判斷所述起始頁標(biāo)識是否等于最大使用頁,如果是,則執(zhí)行S813如果否,則執(zhí)行S814。
[0160]S813:則返回覆蓋寫錯誤提示并結(jié)束流程。
[0161]S814:判斷所述起始頁標(biāo)識是否大于最大使用頁加一的和,如果是,則執(zhí)行S815,如果否,則執(zhí)行S816。
[0162]S815:返回跳寫錯誤提示并結(jié)束流程。
[0163]S816:在機械硬盤中將與操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為所述寫入數(shù)據(jù),以及在機械硬盤將與操作指令中的操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識所對應(yīng)的最大使用頁存儲為與所述操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識所對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù),并且根據(jù)操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)將操作參數(shù)中的OOB信息寫入文件vnand.spare中。結(jié)束流程。
[0164]S817:此時操作類型為讀操作,判斷機械硬盤中與所述操作參數(shù)中的操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識中所對應(yīng)的操作標(biāo)識是否存在讀失敗標(biāo)識,如果是,則執(zhí)行S818,如果否,則執(zhí)行S819。
[0165]S818:結(jié)束流程,并且結(jié)束流程時還可以返回讀失敗提示。
[0166]S819:讀取機械硬盤中與操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù),并且則讀取文件vnand.spare中與操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的OOB信息。結(jié)束流程。
[0167]其中,在讀操作和寫操作中的與所述操作參數(shù)中的操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識,當(dāng)操作參數(shù)中的Plane類型標(biāo)識為單層標(biāo)識時,指的是與所述操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識所對應(yīng)的、頁標(biāo)識為[pageid, pageid+pagenum-1]區(qū)間的各個頁標(biāo)識。當(dāng)操作參數(shù)中的PIane類型標(biāo)識為雙層標(biāo)識時,指的是與所述操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid,pageid+pagenum/2-l]區(qū)間的各個頁標(biāo)識,以及與所述操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid, pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識。其中,pageid為所述起始頁標(biāo)識,pagenum為所述操作頁個數(shù)。并且,在讀操作和寫操作中所指的所述操作參數(shù)中的操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)與其所對應(yīng)的OOB信息的對應(yīng)關(guān)系,與本段所述的所述操作參數(shù)中的操作片選標(biāo)識、操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)與其所對應(yīng)的頁標(biāo)識的對應(yīng)關(guān)系相同,因此不再贅述。
[0168]優(yōu)選地,在上述寫數(shù)據(jù)或讀數(shù)據(jù)的過程可以采用cache的方式。
[0169]S820:此時操作類型為擦除操作,判斷plane類型為單層標(biāo)識或雙層標(biāo)識,如果為單層標(biāo)識,則執(zhí)行S821,如果為雙層標(biāo)識,則執(zhí)行S825。
[0170]S821:此時plane類型標(biāo)識為單層標(biāo)識,判斷機械硬盤中與操作指令中的操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識對應(yīng)的pageidO的頁標(biāo)識對應(yīng)的操作標(biāo)識是否為擦除失敗標(biāo)識ERASEPAGE_FAIL,如果是,則執(zhí)行S822,如果否,則執(zhí)行S823。
[0171]S822:結(jié)束流程,并且結(jié)束流程時還可以返回擦除失敗提示。
[0172]S823:將機械硬盤中、所述操作片選標(biāo)識對應(yīng)的所述操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)Oxff,并且將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一,判斷所述操作指令中的操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,執(zhí)行S824。
[0173]S824:將機械硬盤中操作片選標(biāo)識對應(yīng)的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG。
[0174]S825:此時plane類型標(biāo)識為雙層標(biāo)識,判斷機械硬盤中與操作指令中的操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識對應(yīng)的pageidO的頁標(biāo)識對應(yīng)的操作標(biāo)識和操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識+1對應(yīng)的pageid為O的頁標(biāo)識對應(yīng)的操作標(biāo)識是否存在擦除失敗標(biāo)識ERASEPAGE_FAIL,如果是,則執(zhí)行S822,如果否,則執(zhí)行S826。
[0175]S826:將機械硬盤中所述操作片選標(biāo)識對應(yīng)的、操作塊標(biāo)識,和所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的所有頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)Oxff并且將機械硬盤中存儲的、與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一,以及將操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的擦除次數(shù)加一。
[0176]S827:判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中操作片選標(biāo)識對應(yīng)的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG,以及判斷所述操作指令中的操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的擦除次數(shù)是否達到最大擦除次數(shù),如果達到,則將機械硬盤中操作片選標(biāo)識對應(yīng)的操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識BLK_BADFLAG。
[0177]請參閱圖9,本發(fā)明還提供了測試NFTL的系統(tǒng)的具體實施例,所述系統(tǒng)包括控制單元901和機械硬盤902。
[0178]所述系統(tǒng)中還可以安裝調(diào)試工具,例如VC等,以實現(xiàn)方便的跟蹤調(diào)試測試中發(fā)現(xiàn)的軟件缺陷,這樣可以方便的跟蹤調(diào)試測試中發(fā)現(xiàn)的軟件缺陷??刂茊卧梢詾锳RM、MCU、FPGA等具有控制功能的模塊。
[0179]所述控制單元用于根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)、各個塊的塊標(biāo)識以及塊的最大擦除次數(shù),并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始次數(shù),以及監(jiān)測是否接收到NFTL的操作指令;其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識。[0180]如果所述控制單元接收到NFTL的操作指令,所述控制單元判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并停止工作;如果否,則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一。
[0181]其中,所述控制單元還用于當(dāng)機械硬盤存儲的任一塊標(biāo)識對應(yīng)的擦除次數(shù)達到最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。
[0182]優(yōu)選地,所述控制單元還用于根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識、以及各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識為讀失敗標(biāo)識或讀成功標(biāo)識,并且在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識;其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù)。
[0183]所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前,判斷所述操作指令中的操作類型是否為讀操作,如果為讀操作,則判斷機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的讀操作標(biāo)識中是否存在讀失敗標(biāo)識,如果是,則停止工作。
[0184]優(yōu)選地,所述控制單元還用于根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識、以及各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識為寫失敗標(biāo)識或?qū)懗晒?biāo)識,并且在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識;其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù)。
[0185]所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前,判斷所述操作指令中的操作類型是否為寫操作,如果為寫操作,則判斷機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的寫操作標(biāo)識中是否存在寫失敗標(biāo)識,如果是,則停止工作。
[0186]優(yōu)選地,所述控制單元還用于根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識為擦除失敗標(biāo)識或擦除成功標(biāo)識,并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識。
[0187]所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前,判斷所述操作指令中的操作類型是否為擦除操作,如果為擦除操作,則判斷機械硬盤中與操作指令中的操作塊標(biāo)識對應(yīng)的擦除操作標(biāo)識是否為擦除失敗標(biāo)識,如果是,則停止工作。
[0188]優(yōu)選地,所述控制單元還用于根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù);其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù)。
[0189]所述控制單元還用于,在接收到NFTL的操作指令后,判斷所述操作指令中的操作類型是否為寫操作。
[0190]如果是寫操作,則所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前,判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為第O頁,如果不為第O頁,則返回寫操作不為第O頁的錯誤提示,并且停止工作;如果不為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為最大使用頁加一的和,如果否,則返回寫順序錯誤提示并停止工作;
[0191]如果是寫操作,則所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作時,在機械硬盤將操作指令中的操作塊標(biāo)識對應(yīng)的最大使用頁存儲為與所述操作塊標(biāo)識對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù)。
[0192]優(yōu)選地,所述控制單元用于判斷所述起始頁標(biāo)識是否為最大使用頁加一的和包括:
[0193]所述控制單元用于判斷所述起始頁標(biāo)識是否小于最大使用頁,如果是,則返回逆序?qū)戝e誤并停止工作、判斷所述起始頁標(biāo)識是否等于最大使用頁,如果是,則返回覆蓋寫錯誤并停止工作、以及判斷所述起始頁標(biāo)識是否大于最大使用頁加一的和,如果是,則返回跳寫錯誤并停止工作。
[0194]對于本發(fā)明提供的系統(tǒng)實施例而言,與方法實施例相同,所以描述得比較簡單,相關(guān)之處參見方法實施例的相關(guān)說明即可。
[0195]以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
【權(quán)利要求】
1.一種測試NFTL的方法,其特征在于,所述方法用于測試NFTL的系統(tǒng)中,所述系統(tǒng)包括控制單元和機械硬盤,所述控制單元根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)、各個塊的塊標(biāo)識以及塊的最大擦除次數(shù),并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始次數(shù); 所述方法包括: 控制單元監(jiān)測是否接收到NFTL的操作指令,其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識; 如果接收到NFTL的操作指令,判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并結(jié)束流程;如果否,則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一; 其中,當(dāng)機械硬盤存儲的任一塊標(biāo)識對應(yīng)的擦除次數(shù)達到最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識、以及各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識為讀失敗標(biāo)識或讀成功標(biāo)識,并且在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的讀操作標(biāo)識;所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù); 則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括: 判斷所述操作指令中的操作類型是否為讀操作,如果為讀操作,則判斷機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的讀操作標(biāo)識中是否存在讀失敗標(biāo)識,如果是,則結(jié)束流程。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識、以及各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識為寫失敗標(biāo)識或?qū)懗晒?biāo)識,并且在機械硬盤中存儲各個頁的頁標(biāo)識對應(yīng)的寫操作標(biāo)識;所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù); 則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括: 判斷所述操作指令中的操作類型是否為寫操作,如果為寫操作,則判斷機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的寫操作標(biāo)識中是否存在寫失敗標(biāo)識,如果是,則結(jié)束流程。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識為擦除失敗標(biāo)識或擦除成功標(biāo)識,并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的擦除操作標(biāo)識; 則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括: 判斷所述操作指令中的操作類型是否為擦除操作,如果為擦除操作,則判斷機械硬盤中與操作指令中的操作塊標(biāo)識對應(yīng)的擦除操作標(biāo)識是否為擦除失敗標(biāo)識,如果是,則結(jié)束流程。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述控制單元根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù);所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù); 在接收到NFTL的操作指令后還包括:判斷所述操作指令中的操作類型是否為寫操作, 如果是寫操作,則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前還包括:判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為第O頁,如果不為第O頁,則返回寫操作不為第O頁的錯誤提示,并且結(jié)束流程;如果不為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為最大使用頁加一的和,如果否,則返回寫順序錯誤提示并結(jié)束流程; 如果是寫操作,則在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作時,還包括在機械硬盤將操作指令中的操作塊標(biāo)識對應(yīng)的最大使用頁存儲為與所述操作塊標(biāo)識對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù)。
6.根據(jù)權(quán)利要求1至5任意一項所述的方法,其特征在于,所述操作參數(shù)還包括層類型標(biāo)識,所述判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識之前還包括:判斷所述層類型標(biāo)識是否為雙層標(biāo)識,如果是,則判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識時還包括:判斷所述操作塊標(biāo)識加一的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并結(jié)束流程。
7.根據(jù)權(quán)利要求 1至5任意一項所述的方法,其特征在于,設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個頁標(biāo)識對應(yīng)的數(shù)據(jù)為初始數(shù)據(jù); 則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作包括: 當(dāng)所述操作指令中的操作類型為寫操作時,在機械硬盤中將與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù)存儲為寫入數(shù)據(jù),其中,所述操作參數(shù)還包括寫入數(shù)據(jù)、起始頁標(biāo)識和操作頁個數(shù); 當(dāng)所述操作指令中的操作類型為讀操作時,讀取機械硬盤中與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識所對應(yīng)的數(shù)據(jù),其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù); 當(dāng)所述操作指令中的操作類型是擦除操作時,將操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述操作參數(shù)還包括層標(biāo)識; 當(dāng)所述操作指令中的操作類型為寫操作或讀操作時,若所述操作指令中的層標(biāo)識為單層標(biāo)識,則所述與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識具體為--與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid, pageid+pagenum-l]區(qū)間的各個頁標(biāo)識;若所述操作指令中的層標(biāo)識為雙層標(biāo)識,則所述與操作塊標(biāo)識、起始頁標(biāo)識和操作頁個數(shù)對應(yīng)的各個頁標(biāo)識具體為:與所述操作塊標(biāo)識對應(yīng)的頁標(biāo)識為[pageid, pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識,以及與所述操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的標(biāo)識為[pageid,pageid+pagenum/2-1]區(qū)間的各個頁標(biāo)識;其中,pageid為起始頁標(biāo)識,pagenum為操作頁個數(shù); 當(dāng)所述操作指令中的操作類型為擦除操作時,若所述操作指令中的層標(biāo)識為雙層標(biāo)識,則將操作塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)時還包括:將操作塊標(biāo)識+1的塊標(biāo)識對應(yīng)的所有頁標(biāo)識在機械硬盤中所對應(yīng)的數(shù)據(jù)存儲為初始數(shù)據(jù)。
9.一種測試NFTL的系統(tǒng),其特征在于,所述系統(tǒng)包括控制單元和機械硬盤; 所述控制單元根據(jù)測試NFTL的目標(biāo)NAND閃存的型號設(shè)置塊的個數(shù)、各個塊的塊標(biāo)識以及塊的最大擦除次數(shù),并且在機械硬盤中存儲各個塊的塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識為初始標(biāo)識、存儲各個塊的塊標(biāo)識對應(yīng)的擦除次數(shù)為初始次數(shù),以及監(jiān)測是否接收到NFTL的操作指令;其中,所述操作指令中具有操作類型和操作參數(shù),所述操作參數(shù)中至少具有操作塊標(biāo)識; 如果所述控制單元接收到NFTL的操作指令,所述控制單元判斷所述操作指令中的操作塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識是否為壞塊標(biāo)識,如果是,則返回操作壞塊提示并停止工作;如果否,則根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作,并且判斷所述操作指令中的操作類型是否為擦除指令,如果為擦除指令,則將機械硬盤中與所述操作指令中的操作塊標(biāo)識對應(yīng)的擦除次數(shù)加一; 其中,所述控制單元還用于當(dāng)機械硬盤存儲的任一塊標(biāo)識對應(yīng)的擦除次數(shù)達到最大擦除次數(shù)時,將機械硬盤中該塊標(biāo)識對應(yīng)的狀態(tài)標(biāo)識存儲為壞塊標(biāo)識。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述控制單元還用于根據(jù)NFTL的目標(biāo)NAND閃存的型號設(shè)置各個塊標(biāo)識對應(yīng)的頁標(biāo)識,并且在機械硬盤中存儲各個塊標(biāo)識對應(yīng)的最大使用頁為初始頁數(shù);其中,所述操作參數(shù)還包括起始頁標(biāo)識和操作頁個數(shù); 所述控制單元還用于,在接收到NFTL的操作指令后,判斷所述操作指令中的操作類型是否為寫操作; 如果是寫操作,則所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作之前,判斷所述操作塊標(biāo)識對應(yīng)的最大使用頁是否為初始頁數(shù),如果為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為第O頁,如果不為第O頁,則返回寫操作不為第O頁的錯誤提示,并且停止工作;如果不為初始頁數(shù),則判斷所述起始頁標(biāo)識是否為最大使用頁加一的和,如果否,則返回寫順序錯誤提示并停止工作; 如果是寫操作,則所述控制單元還用于在所述根據(jù)所述操作指令中的操作類型和操作參數(shù)對機械硬盤執(zhí)行相應(yīng)的操作時,在機械硬盤將操作指令中的操作塊標(biāo)識對應(yīng)的最大使用頁存儲為與所述操作塊標(biāo)識對應(yīng)的所有的頁標(biāo)識中未寫入數(shù)據(jù)的頁標(biāo)識的個數(shù)。
【文檔編號】G11C29/08GK104021816SQ201310067136
【公開日】2014年9月3日 申請日期:2013年3月1日 優(yōu)先權(quán)日:2013年3月1日
【發(fā)明者】渠長紅, 胡勝發(fā) 申請人:安凱(廣州)微電子技術(shù)有限公司