王續(xù)朝
(北京自動(dòng)測(cè)試技術(shù)研究所,北京 100088)
隨著當(dāng)前移動(dòng)存儲(chǔ)技術(shù)的快速發(fā)展和移動(dòng)存儲(chǔ)市場(chǎng)的高速擴(kuò)大,F(xiàn)lash型存儲(chǔ)器的用量迅速增長(zhǎng)。Flash芯片由于其便攜、可靠、成本低等優(yōu)點(diǎn),在移動(dòng)產(chǎn)品中非常適用。市場(chǎng)的需求催生了一大批Flash芯片研發(fā)、生產(chǎn)、應(yīng)用企業(yè)。為保證芯片長(zhǎng)期可靠的工作,這些企業(yè)需要在產(chǎn)品出廠前對(duì)Flash存儲(chǔ)器進(jìn)行高速和細(xì)致地測(cè)試,因此,高效Flash存儲(chǔ)器測(cè)試算法的研究就顯得十分必要。
本文以三星公司的K9F2G08R0A芯片為例,介紹Nand-flash存儲(chǔ)器芯片的讀寫(xiě)流程和時(shí)序。
K9F2G08R0A的容量為256M×8 Bit,存儲(chǔ)空間按128K個(gè)頁(yè)(行)、每頁(yè)中2K+64個(gè)字節(jié)(列)的組成方式構(gòu)成,備用的64列。K9F2G08R0A還將存儲(chǔ)空間分為塊(block),每1塊由64個(gè)頁(yè)構(gòu)成。因此K9F2G08R0A中一共有2,048個(gè)塊。這種“塊-頁(yè)”結(jié)構(gòu),恰好能滿足文件系統(tǒng)中劃分簇和扇區(qū)的結(jié)構(gòu)要求。K9F2G08R0A的內(nèi)部結(jié)構(gòu)如圖1所示。
圖1 K9F2G08R0A的內(nèi)部結(jié)構(gòu)
K9F2G08R0A的讀和寫(xiě)都以頁(yè)為單位,擦除則以塊為單位進(jìn)行操作。
K9F2G08R0A的地址通過(guò)8位端口傳送,有效地節(jié)省了引腳的數(shù)量,并能夠保持不同密度器件引腳的一致性,系統(tǒng)可以在電路不作改動(dòng)的情況下升級(jí)為高容量存儲(chǔ)器件。
K9F2G08R0A通過(guò)CLE和ALE信號(hào)線實(shí)現(xiàn)I/O口上指令和地址的復(fù)用。指令、地址和數(shù)據(jù)都通過(guò)拉低WE和CE從I/O口寫(xiě)入器件中。有一些指令只需要一個(gè)總線周期完成,例如,復(fù)位指令、讀指令和狀態(tài)讀指令等;另外一些指令,例如頁(yè)寫(xiě)入和塊擦除,則需要2個(gè)周期,其中一個(gè)周期用來(lái)啟動(dòng),而另一個(gè)周期用來(lái)執(zhí)行。
1.2.1 頁(yè)讀操作
在初始上電時(shí),器件進(jìn)入缺省的“讀方式1模式”。在這一模式下,頁(yè)讀操作通過(guò)將00h指令寫(xiě)入指令寄存器,接著寫(xiě)入5個(gè)地址(2個(gè)列地址,3個(gè)行地址)來(lái)啟動(dòng)。一旦頁(yè)讀指令被器件鎖存,下面的頁(yè)讀操作就不需要再重復(fù)寫(xiě)入指令了。
寫(xiě)入指令和地址后,處理器可以通過(guò)對(duì)信號(hào)線R/B的分析來(lái)判斷該操作是否完成。如果信號(hào)為低電平,表示器件正“忙”;為高電平,說(shuō)明器件內(nèi)部操作完成,要讀取的數(shù)據(jù)被送入了數(shù)據(jù)寄存器。外部控制器可以在以50ns為周期的連續(xù)RE脈沖信號(hào)的控制下,從I/O口依次讀出數(shù)據(jù)。連續(xù)頁(yè)讀操作中,輸出的數(shù)據(jù)是從指定的列地址開(kāi)始,直到該頁(yè)的最后一個(gè)列地址的數(shù)據(jù)為止。如圖2讀指令流程圖所示。
圖2 讀指令流程圖
1.2.2 頁(yè)寫(xiě)操作
K9F2G08R0A的寫(xiě)入操作也以頁(yè)為單位。寫(xiě)入必須在擦除之后,否則寫(xiě)入將出錯(cuò)。
頁(yè)寫(xiě)入周期總共包括3個(gè)步驟:寫(xiě)入串行數(shù)據(jù)輸入指令(80h),然后寫(xiě)入5個(gè)字節(jié)的地址信息,最后串行寫(xiě)入數(shù)據(jù)。串行寫(xiě)入的數(shù)據(jù)最多為2K+64字節(jié),它們首先被寫(xiě)入器件內(nèi)的頁(yè)寄存器,接著器件進(jìn)入一個(gè)內(nèi)部寫(xiě)入過(guò)程,將數(shù)據(jù)從頁(yè)寄存器寫(xiě)入存儲(chǔ)宏單元。
串行數(shù)據(jù)寫(xiě)入完成后,需要寫(xiě)入“頁(yè)寫(xiě)入確認(rèn)”指令10h,這條指令將初始化器件的內(nèi)部寫(xiě)入操作。如果單獨(dú)寫(xiě)入10h而沒(méi)有前面的步驟,則10h不起作用。10h寫(xiě)入之后,K9F2G08R0A的內(nèi)部寫(xiě)控制器將自動(dòng)執(zhí)行內(nèi)部寫(xiě)入和校驗(yàn)中必要的算法和時(shí)序,這時(shí)系統(tǒng)控制器就可以去做別的事了。
內(nèi)部寫(xiě)入操作開(kāi)始后,器件自動(dòng)進(jìn)入“讀狀態(tài)寄存器”模式。在這一模式下,當(dāng)RE和CE為低電平時(shí),系統(tǒng)可以讀取狀態(tài)寄存器??梢酝ㄟ^(guò)檢測(cè)R/B的輸出,或讀狀態(tài)寄存器的狀態(tài)位(I/O 6)來(lái)判斷內(nèi)部寫(xiě)入是否結(jié)束。在器件進(jìn)行內(nèi)部寫(xiě)入操作時(shí),只有讀狀態(tài)寄存器指令和復(fù)位指令會(huì)被響應(yīng)。當(dāng)頁(yè)寫(xiě)入操作完成,應(yīng)該檢測(cè)寫(xiě)狀態(tài)位(I/O 0)的電平。
內(nèi)部寫(xiě)校驗(yàn)只對(duì)沒(méi)有成功地寫(xiě)為0的情況進(jìn)行檢測(cè)。指令寄存器始終保持著讀狀態(tài)寄存器模式,直到其他有效的指令寫(xiě)入指令寄存器為止。如圖3 寫(xiě)指令流程圖所示。
圖3 寫(xiě)指令流程圖
1.2.3 塊擦除
擦除操作是以塊為單位進(jìn)行的。擦除的啟動(dòng)指令為60h,塊地址的輸入通過(guò)兩個(gè)時(shí)鐘周期完成。塊地址載入之后執(zhí)行擦除確認(rèn)指令D0h,它用來(lái)初始化內(nèi)部擦除操作。擦除確認(rèn)命令還用來(lái)防止外部干擾產(chǎn)生擦除操作的意外情況。器件檢測(cè)到擦除確認(rèn)命令輸入后,在WE的上升沿啟動(dòng)內(nèi)部寫(xiě)控制器開(kāi)始執(zhí)行擦除和擦除校驗(yàn)。內(nèi)部擦除操作完成后,檢測(cè)寫(xiě)狀態(tài)位(I/O 0),從而了解擦除操作是否有錯(cuò)誤發(fā)生。如圖4擦除指令流程圖所示。
圖4 擦除令流程圖
1.2.4 讀狀態(tài)寄存器
K9F2G08R0A包含一個(gè)狀態(tài)寄存器,該寄存器反應(yīng)了寫(xiě)入或擦除操作是否完成,或?qū)懭牒筒脸僮魇欠駸o(wú)錯(cuò)。寫(xiě)入70h指令,啟動(dòng)讀狀態(tài)寄存器周期。狀態(tài)寄存器的內(nèi)容將在CE或RE的下降沿處送出至I/O端口。
器件一旦接收到讀狀態(tài)寄存器的指令,它就將保持狀態(tài)寄存器在讀狀態(tài),直到有其他的指令輸入。因此,如果在任意讀操作中采用了狀態(tài)寄存器瀆操作,則在連續(xù)頁(yè)讀的過(guò)程中,必須重發(fā)00h或50h指令。
1.2.5 讀器件ID
K9F2G08R0A器件具有一個(gè)產(chǎn)品鑒定識(shí)別碼(ID),系統(tǒng)控制器可以讀出這個(gè)ID,從而起到識(shí)別器件的作用。讀ID的步驟是:寫(xiě)入90h指令,然后寫(xiě)入一個(gè)地址00h。在兩個(gè)讀周期下,廠商代碼和器件代碼將被連續(xù)輸出至I/O口。
同樣,一旦進(jìn)入這種命令模式,器件將保持這種命令狀態(tài),直到接收到其他的指令為止。
1.2.6 復(fù)位
器件提供一個(gè)復(fù)位(RESET)指令,通過(guò)向指令寄存器寫(xiě)入FFh來(lái)完成對(duì)器件的復(fù)位。當(dāng)器件處于任意讀模式、寫(xiě)入或擦除模式的忙狀態(tài)時(shí),發(fā)送復(fù)位指令可以使器件中止當(dāng)前的操作,正在被修改的存儲(chǔ)器宏單元的內(nèi)容不再有效,指令寄存器被清零并等待下一條指令的到來(lái)。當(dāng)WP為高時(shí),狀態(tài)寄存器被清為C0h。
INC:執(zhí)行當(dāng)前行圖形,然后轉(zhuǎn)到下一行
LDC,n:加載循環(huán)計(jì)數(shù)器,該行為循環(huán)起始行。同時(shí)執(zhí)行當(dāng)前行圖形,之后轉(zhuǎn)到下一行圖形。循環(huán)次數(shù)為n。
LOOP:循環(huán)語(yǔ)句。執(zhí)行當(dāng)前行圖形后,開(kāi)始循環(huán)LDC到LOOP語(yǔ)句之間的圖形n次。循環(huán)滿后轉(zhuǎn)到下一行圖形。
RPT,n:重復(fù)執(zhí)行當(dāng)前行圖形n次,然后跳轉(zhuǎn)到下一行圖形。RPT,1執(zhí)行當(dāng)前圖形2次,即重復(fù)一次。
HALT :停止命令。
A:<16 位數(shù) > B:<16 位數(shù) > :裝 載 Load, 可同時(shí)裝載
A++ B++ : A 、B 寄存器加 1
A-- B-- : A、B 寄存器減 1
A B :無(wú)操作
A:X :A 寄存器裝載 X 地址
指令 算法圖形 WP CE1 CE2 WE RE CLE ALE R/B1 R/B2 IO
INC,
WRITED,X=A,A:0;Y=A;D=Z; 1 1 1 1 1 0 0 X X XXXXXXXX //Page Write(BOCK1)
LDC,63, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 1 0 X Z 10000000 //80h_(SerialData Input)
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 Z Z 00000000 //Col Addr1
INC, WRITED,X=A;Y=A;D=A; 1 0 1 0 1 0 1 Z Z 00000000 //Col Addr2
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 Z X ZZZZZZZZ //Raw Addr3
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 X Z 00000000 //Raw Addr4
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 Z X 00000000 //Raw Addr5
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 0 0 Z Z XZZXZXZX
RPT,2111, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 0 Z X 01010101 //Write 55
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 1 0 X Z 00010000 //10h_(Program Command)
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 1 0 X Z XXXXXXXX
RPT,500, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 1 0 L Z XXXXXXXX //tPROG
RPT,7000, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 1 0 X Z ZZZZZZZZ //tPROG
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 1 0 Z Z 01110000 //70h_(Read State Command)
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 1 0 0 0 Z X XXXXXXXL //I/O0=0
INC, WRITED,X=A,A++;Y=A;D=Z; 1 1 1 1 1 0 0 Z Z XXXXXXXX
LOOP, WRITED,X=A;Y=A;D=Z; 1 1 1 1 1 0 0 Z Z XXXXXXXX
HALT, WRITED,X=A;Y=A;D=Z; 1 1 1 1 1 0 0 Z Z XXXXXXXX //---------------
指令 算法圖形 WP CE1 CE2 WE RE CLE ALE R/B1 R/B2 IO
INC, WRITED,X=A,A:0;Y=A;D=Z; 1 1 1 1 1 0 0 X X XXXXXXXX //Page Read
LDC,63, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 1 0 Z X 00000000 //00H_(Read Addr)
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 X X 00000000 //Col Addr1
INC, WRITED,X=A;Y=A;D=A; 1 0 1 0 1 0 1 X X 00000000 //Col Addr2
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 X X ZZZZZZZZ //Raw Addr3
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 X X 00000000 //Raw Addr4
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 0 1 X X 00000000 //Raw Addr5
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 0 1 1 0 Z X 00110000 //30H_(Read Command)
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 0 0 X X ZXXXXXXX
RPT,50, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 0 0 L Z ZXXXXXXX //tR
RPT,200, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 0 0 Z X XXXXXXXX //tR
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 0 0 Z X XXXXXXXX
RPT,2111, WRITED,X=A;Y=A;D=Z; 1 0 1 1 0 0 0 Z X LHLHLHLH //Read 55
INC, WRITED,X=A;Y=A;D=Z; 1 0 1 1 1 0 0 Z X ZXXXXXXX
INC, WRITED,X=A,A++;Y=A;D=Z; 1 1 1 1 1 0 0 X X ZZZZZZZZ
LOOP, WRITED,X=A;Y=A;D=Z; 1 1 1 1 1 0 0 X X ZZZZZZZZ
HALT, WRITED,X=A;Y=A;D=Z; Z Z Z Z Z Z Z X X XXXXXXXX //---------------
根據(jù)上述思想,我們?cè)趪?guó)產(chǎn)BC3196H的測(cè)試系統(tǒng)平臺(tái)上,對(duì)K9F2G08R0A進(jìn)行了測(cè)試并通過(guò)對(duì)數(shù)字系統(tǒng)算法圖形功能進(jìn)行改善,算法圖形發(fā)生器由多個(gè)算術(shù)邏輯單元、多路選擇器以及操作寄存器組成,可以實(shí)現(xiàn)復(fù)雜的邏輯操作和算術(shù)運(yùn)算,在原有的X地址、Y地址復(fù)用的基礎(chǔ)上,增加為X地址、Y地址、D數(shù)據(jù)的復(fù)用,可以更快、更簡(jiǎn)便的對(duì)地址復(fù)用型Flash存儲(chǔ)器進(jìn)行測(cè)試,減少測(cè)試程序開(kāi)發(fā)難度。
本文主要討論了Nand-Flash存儲(chǔ)器芯片的工作原理,較好地解決了Flash存儲(chǔ)器測(cè)試的困難。通過(guò)對(duì)復(fù)用型Flash算法圖形功能的改善,可以實(shí)現(xiàn)復(fù)雜的邏輯操作和算術(shù)運(yùn)算,更快捷的對(duì)存儲(chǔ)器進(jìn)行測(cè)試,提高了Flash存儲(chǔ)器芯片的測(cè)試開(kāi)發(fā)周期,提高了測(cè)試效率。在大容量的存儲(chǔ)器測(cè)試的時(shí)候,測(cè)試時(shí)間還有待提高,希望在以后能夠研究出更快速更簡(jiǎn)潔的算法圖形發(fā)生器及算法,進(jìn)一步提高整個(gè)Flash存儲(chǔ)器芯片的測(cè)試效率。
[1]黃海軍,宜懷.嵌入式系統(tǒng)中Nand-Flash的原理及應(yīng)用[J].電子開(kāi)發(fā)網(wǎng),2010.
[2]李海宏,劉文怡,張彥軍.通用Flash存儲(chǔ)器檢測(cè)裝置的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2008(2).
[3]樊寅逸,何海光.AT45DB081B在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J].電子元器件應(yīng)用,2007 (3).
[4]岳麗華,韋鵬,鐘誠(chéng).一種自適應(yīng)的復(fù)合多路flash存儲(chǔ)結(jié)構(gòu)[J].中國(guó)科學(xué)技術(shù)大學(xué)學(xué)報(bào),2008(7).
[5]王藝燃,于宗光.一種應(yīng)用于DSP嵌入式存儲(chǔ)器的靈敏放大器設(shè)計(jì)[J].微電子學(xué),2010 (2).
[6]雷加,晏筱薇.Flash存儲(chǔ)器的內(nèi)建自測(cè)試設(shè)計(jì)[J].微計(jì)算機(jī)信息,2008 (5)
[7]陳桂生,李志剛.嵌入式Flash文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010 (5).
[8]任勇峰,郭亞力.Flash存儲(chǔ)器的高速寫(xiě)入方法[J].電腦開(kāi)發(fā)與應(yīng)用,2001(5).
[9]廖專崇,黃俊義.存儲(chǔ)技術(shù)的現(xiàn)狀與未來(lái)[J].電子產(chǎn)品世界,2004(01).