傅啟國(guó)
(南京西爾特電子有限公司,南京211111)
BENAND Flash的編程實(shí)現(xiàn)及優(yōu)化
傅啟國(guó)
(南京西爾特電子有限公司,南京211111)
介紹了BENAND Flash的基本結(jié)構(gòu)和信號(hào),詳細(xì)討論了其擦除及讀寫數(shù)據(jù)的時(shí)序,設(shè)計(jì)了一套對(duì)其編程的系統(tǒng)。針對(duì)其內(nèi)嵌ECC等特點(diǎn)分析了BENAND Flash在工廠編程里的具體步驟,并在編程和校驗(yàn)環(huán)節(jié)進(jìn)行優(yōu)化,有力地提升了工廠編程行業(yè)內(nèi)BENAND Flash的編程效率。
BENAND Flash;內(nèi)嵌ECC;編程;校驗(yàn)
BENAND Flash是東芝公司新發(fā)明的一種NAND Flash,它基于SLC NAND閃存,內(nèi)嵌ECC(Error Correction Code,糾錯(cuò)碼),并且具有與通用的SLC NAND閃存兼容的封裝和引腳定義,這一點(diǎn)保證其在現(xiàn)有產(chǎn)品中可以輕松地與SLC NAND實(shí)現(xiàn)替換。BENAND在減輕主機(jī)處理器處理ECC負(fù)擔(dān)的同時(shí),最大程度地避免了協(xié)議更改,并且允許主機(jī)處理器支持最先進(jìn)工藝的NAND閃存,以上優(yōu)點(diǎn)使得BENAND Flash逐漸被廣泛使用。
目前東芝推出的BENAND Flash,其容量主要有1 Gb、2 Gb、4 Gb和8 Gb四種,封裝形式有TSOP48、FBGA63和FBGA67三種。以1 Gb容量的BENAND Flash為例,它由1024個(gè)區(qū)塊組成,每個(gè)區(qū)塊包含64個(gè)頁(yè),每一頁(yè)都包含一個(gè)2 048字節(jié)的數(shù)據(jù)區(qū)和64字節(jié)的備用區(qū),總共包含2 112字節(jié),所以1 Gb容量的BENAND Flash實(shí)際共包含(2 048+64)×64×1024字節(jié),其結(jié)構(gòu)示意圖如圖1所示。
圖1 1Gb容量BENAND Flash結(jié)構(gòu)圖
BENAND Flash以頁(yè)為基本單元進(jìn)行存儲(chǔ),以塊為基本單元進(jìn)行擦除,以頁(yè)為基本單元進(jìn)行寫入和讀出,具有很快的寫入和擦除速度。除了電源、地和8個(gè)I/O口,主要由7個(gè)控制信號(hào)構(gòu)成:
①芯片使能(CE#):如果沒有檢測(cè)到該信號(hào), BENAND Flash就保持待機(jī)模式,不對(duì)任何控制信號(hào)作出響應(yīng)。
②寫使能(WE#):WE#負(fù)責(zé)將地址、命令或數(shù)據(jù)寫入到BENAND Flash中。
③讀使能(RE#):RE#允許數(shù)據(jù)輸出。
④指令鎖存使能(CLE):當(dāng)CLE為高時(shí),在WE#信號(hào)的上升沿,命令被鎖存到BENAND Flash的指令寄存器中。
⑤地址鎖存使能(ALE):當(dāng)ALE為高時(shí),在WE#信號(hào)的上升沿,地址被鎖存到BENAND Flash的地址寄存器中。
⑥就緒/忙(RY/BY#):如果BENAND Flash處于忙狀態(tài),該信號(hào)為低,否則為高。
⑦寫保護(hù)(WP#):如果WP#為低,則BENAND Flash處于保護(hù)狀態(tài),無法被擦除或?qū)懭霐?shù)據(jù)。
2.1 BENAND Flash編程系統(tǒng)
本文以CPU和FPGA為主要控制芯片,以PC機(jī)為上位機(jī),設(shè)計(jì)了一個(gè)可以對(duì)不同封裝、不同容量的BENAND Flash進(jìn)行編程的系統(tǒng),系統(tǒng)的硬件結(jié)構(gòu)框圖如圖2所示。
圖2 系統(tǒng)硬件結(jié)構(gòu)框圖
PC機(jī)負(fù)責(zé)發(fā)送命令、顯示及傳輸數(shù)據(jù);CPU負(fù)責(zé)接收命令并進(jìn)一步對(duì)FPGA發(fā)出具體操作指令,并發(fā)送及接收具體數(shù)據(jù);FPGA負(fù)責(zé)寫入數(shù)據(jù)和讀取數(shù)據(jù)等邏輯實(shí)現(xiàn),并連接不同封裝芯片的引腳到其內(nèi)部控制信號(hào)。
2.2 BENAND Flash擦除操作
與普通的NAND Flash相似,BENAND Flash也存在原始?jí)膲K,其出廠允許的壞塊數(shù)為總數(shù)的2%以內(nèi),所以1 Gb容量的BENAND Flash允許的最大壞塊數(shù)為20個(gè)。
由于壞塊本身不允許被擦除,在擦除之前,必須要先檢測(cè)出原始?jí)膲K。從第一個(gè)Block開始,從頭到尾全部掃描一遍。掃描方法是,直接讀取當(dāng)前Block的任意一頁(yè)的任意一個(gè)字節(jié),如果為0x00則為壞塊,如果為0x FF則為好塊,其流程如圖3所示。
判斷任意一頁(yè)的任意一個(gè)字節(jié)的方法也是BENAND Flash所特有的,一般的NAND Flash需要判斷特定頁(yè)的特定位置,如第一頁(yè)備用區(qū)的第一個(gè)字節(jié)。
擦除時(shí)序包括:發(fā)出0x60命令輸出地址,發(fā)出0x D0命令啟動(dòng)擦除,等待完成和狀態(tài)反饋,最后的狀態(tài)反饋通過發(fā)出0x70命令來讀I/O的最低位的狀態(tài)來實(shí)現(xiàn),如果為0,則表示擦除成功,否則表示擦除失敗,其時(shí)序如圖4所示。
一般Block擦除的典型時(shí)間tBERASE為2.5 ms,所以一般2~3 s即可對(duì)1 Gb容量的BENAND Flash擦除完畢。
圖3 壞塊掃描流程圖
2.3 BENAND Flash寫操作與讀操作
寫操作時(shí)序包括:發(fā)出0x80命令輸出地址,把整頁(yè)待燒錄數(shù)據(jù)打入BENAND Flash內(nèi)部的Data Cache,發(fā)出0x10命令執(zhí)行寫入操作,等待完成和狀態(tài)反饋,與擦除操作一樣,最后的狀態(tài)反饋通過讀I/O的最低位的狀態(tài)來實(shí)現(xiàn),如果為0則表示寫入成功,否則表示寫入失敗,其時(shí)序如圖5所示。
由圖5可以看出,寫操作的tPROG時(shí)間在整個(gè)寫時(shí)序中時(shí)間最長(zhǎng),一般需要300μs以上,對(duì)1 Gb容量的BENAND Flash來說,共包含65 536頁(yè),所以全片寫數(shù)據(jù)至少要在20 s以上。
讀取一頁(yè)數(shù)據(jù)的讀操作時(shí)序與寫操作類似,只是在具體命令上不同,0x80~0x10命令換成了0x00~0x30命令,不再贅述。
與普通的NAND Flash相似,一般BENAND Flash的工廠編程步驟分為三步:擦除、編程和校驗(yàn)。雖然BENAND Flash自帶ECC,但在批量燒錄中也無法保證所有芯片發(fā)生的比特反轉(zhuǎn)在BENAND Flash內(nèi)嵌ECC的可糾錯(cuò)范圍之內(nèi),難免會(huì)有少量芯片出現(xiàn)較多位反轉(zhuǎn)的情況。所以在工廠編程中,除了要按特定的壞塊管理方案將數(shù)據(jù)燒錄進(jìn)芯片,還要將芯片里的數(shù)據(jù)讀出來進(jìn)行校驗(yàn),以確認(rèn)所燒錄的數(shù)據(jù)完全正確。
擦除本身時(shí)間很短,對(duì)于追求生產(chǎn)效率的工廠來說,盡可能地縮短編程及校驗(yàn)時(shí)間就顯得尤為重要。
在編程這一步,實(shí)際上就是對(duì)BENAND Flash順序地進(jìn)行頁(yè)寫入操作,實(shí)現(xiàn)把每一頁(yè)的數(shù)據(jù)都寫入到BENAND Flash對(duì)應(yīng)的頁(yè)中。從上述寫操作的時(shí)序可以看出,頁(yè)編程時(shí)間tPROG是比較長(zhǎng)的,從芯片手冊(cè)上可以得知,最長(zhǎng)需要700μs,可以充分利用這一段較長(zhǎng)的等待時(shí)間。即在FPGA中設(shè)計(jì)FIFO,在RY/BY#為低時(shí),將待燒錄數(shù)據(jù)先寫入FIFO,從而節(jié)省了部分?jǐn)?shù)據(jù)傳輸?shù)臅r(shí)間。另外,考慮到BENAND Flash的燒錄源文件與普通NANDFlash類似,燒錄源文件一般不可能是滿數(shù)據(jù),而是會(huì)存在大量0x FF的空數(shù)據(jù)。所以,在真正燒錄數(shù)據(jù)之前,可以在PC機(jī)端直接對(duì)燒錄源文件進(jìn)行掃描分析,如果發(fā)現(xiàn)對(duì)應(yīng)BENAND Flash的整頁(yè)數(shù)據(jù)都是0x FF,則將該頁(yè)的位置記錄下來,在真正燒錄到該頁(yè)時(shí),直接跳過該頁(yè)的燒錄,也可以節(jié)省一定的時(shí)間,當(dāng)然,能節(jié)約的具體時(shí)間取決于燒錄源文件的具體數(shù)據(jù)情況。
圖4 擦除時(shí)序圖
圖5 寫操作時(shí)序圖
在校驗(yàn)這一步,傳統(tǒng)的NAND Flash芯片校驗(yàn)只能按照頁(yè)讀出數(shù)據(jù)時(shí)序的讀出數(shù)據(jù)和源文件比較,BENAND Flash可以采用此方法,但速度較慢。由于BENAND Flash自帶ECC糾錯(cuò)能力,并且也提供了相應(yīng)的命令來讀取每一頁(yè)是否發(fā)些了比特反轉(zhuǎn)及發(fā)生了幾位比特反轉(zhuǎn)的具體信息,所以為了提高效率,可以不必把每一頁(yè)的所有數(shù)據(jù)都讀取出來與源文件比較,而是把每頁(yè)劃分為4個(gè)Sector,每個(gè)Sector包含512字節(jié)主數(shù)據(jù)區(qū)和16字節(jié)備用區(qū),用BENAND Flash提供的0x7A命令直接讀取ECC的狀態(tài)來判斷是否發(fā)生了超過自身糾錯(cuò)能力的位反轉(zhuǎn),讀時(shí)序如圖6所示。
圖6 讀ECC狀態(tài)時(shí)序圖
由圖6可以看出,只需先發(fā)送0x7A命令,隨后就可讀出每個(gè)Sector的ECC狀態(tài),再對(duì)照ECC狀態(tài)表即可知道該Sector的比特反轉(zhuǎn)及糾錯(cuò)情況,具體的ECC狀態(tài)表如表1所列。
表1 ECC狀態(tài)表
如果某Sector的狀態(tài)輸出值在0~8之間,則表示沒有位反轉(zhuǎn)或發(fā)生了可糾錯(cuò)的比特反轉(zhuǎn)數(shù),校驗(yàn)通過;如果狀態(tài)輸出值為0x F,則意味著該Sector發(fā)生了超過芯片糾錯(cuò)能力的比特反轉(zhuǎn)數(shù),芯片校驗(yàn)不能通過,應(yīng)當(dāng)重新燒錄或棄片。該種方法與傳統(tǒng)的只能靠逐個(gè)字節(jié)讀出芯片整頁(yè)數(shù)據(jù)比較的方法完全不同,把原先需要讀出2 112個(gè)字節(jié)的時(shí)間,縮短為只需讀取4個(gè)ECC Status的時(shí)間,校驗(yàn)效率提升極其明顯。
東芝公司的BENAND Flash由于兼容性好、內(nèi)嵌ECC、可靠性高等優(yōu)點(diǎn)逐漸被廣泛使用,本文對(duì)其擦除、寫數(shù)據(jù)、讀數(shù)據(jù)等時(shí)序進(jìn)行了較為詳細(xì)的討論,并針對(duì)其特點(diǎn)對(duì)工廠編程的整個(gè)過程進(jìn)行分析,提出在編程中采用FIFO設(shè)計(jì)、預(yù)先對(duì)源文件掃描的方法節(jié)省燒寫時(shí)間。采用直接讀取ECC Status進(jìn)行校驗(yàn)的方法提高了校驗(yàn)效率,對(duì)工廠編程行業(yè)內(nèi)BENAND Flash的編程效率提升有較高的參考價(jià)值。
[1]李澤明,楊燕嬌,張會(huì)新.一種Nand Flash ECC校驗(yàn)設(shè)計(jì)及FPGA實(shí)現(xiàn)[J].電視技術(shù),2013,37(17):7375.
[2]馬豐璽,楊斌,衛(wèi)洪春.非易失存儲(chǔ)器NAND Flash及其在嵌入式系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(1): 203205.
[3]魏國(guó).一種NAND Flash控制器驗(yàn)證平臺(tái)的設(shè)計(jì)[J].電子科技,2013(7):142143.
傅啟國(guó)(工程師),研究方向?yàn)殡娏ψ詣?dòng)化與嵌入式開發(fā)。
Programming Realization and Optimization of BENAND Flash
Fu Qiguo
(Nanjing Xeltek Electronic Co.,Ltd.,Nanjing 211111,China)
In the paper,basic structure and signal of BENAND Flash is introduced.Erase,write and read timing are discussed in detail, and a BENAND Flash programming system is designed.According to the characteristics of built-in ECC,the steps of programming and verification of BENAND Flash are analyzed,which effectively increases the programming efficiency in BENAND Flash factory programming industry.
BENAND Flash;built-in ECC;programming;verification
TP29
:A
薛士然
2016-07-28)