摘要: NAND Flash應(yīng)用的困難在于管理和需要特殊的系統(tǒng)接口。本文介紹了一種利用MCU存儲器管理接口結(jié)合I/O口來實(shí)現(xiàn)NAND Flash存儲結(jié)構(gòu)的搭建和管理的方法,并介紹底層的驅(qū)動程序。本文網(wǎng)絡(luò)版地址:http:// www.eepw.com.cn/article/192739.htm
關(guān)鍵詞:嵌入式系統(tǒng);立體封裝;存儲器;系統(tǒng)接口
DOI: 10.3969/j.issn.1005-5517.2013.12.014
元件介紹
基于sparc 架構(gòu)的MCU
S698-MIL 是珠海歐比特控制工程股份有限公司為了滿足嵌入式應(yīng)用而開發(fā)的32 位RISC 高性能嵌入式微處理器,它遵循SPARC V8 構(gòu)架。
S698-MIL 內(nèi)部配置了32 位整數(shù)處理單元(IU),32/64 位浮點(diǎn)處理單元(FPU)。
S698-MIL 的應(yīng)用軟件開發(fā)環(huán)境具有很強(qiáng)的靈活性,除了可以使用歐比特公司提供的專用多任務(wù)嵌入式實(shí)時操作系統(tǒng)ORION 外,開發(fā)者還可以選擇如RTEMS、VxWorks等現(xiàn)今流行的嵌入式操作系統(tǒng)進(jìn)行開發(fā)。
S698-MIL 可應(yīng)用于包括稅控收款機(jī)、銀行POS 機(jī)、電力系統(tǒng)等高端工業(yè)控制領(lǐng)域和消費(fèi)電子領(lǐng)域以及高性能高可靠的航空、航天及武器領(lǐng)域。
NAND Flash結(jié)構(gòu)的存儲芯片
目前的Flash memory 主要包括以下兩大類:針對程序和數(shù)據(jù)存儲的NOR fash ;針對大容量存儲的NAND flash 。其中,NOR 的特點(diǎn)為芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣應(yīng)用程序可以直接在flash 閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM 中,隨機(jī)讀取快、功耗低、穩(wěn)定性高;而 NAND 的特點(diǎn)為容量大、寫速度快、芯片面積小。
VDNF64G08是一個快速、高存儲密度的隨機(jī)訪問存儲器。它由8個8G位的NAND Flash芯片堆疊而成,結(jié)構(gòu)見圖2。整個模塊采用堆疊技術(shù),它們之間的互相連接線非常短,寄生電容小。這種芯片非常適用于高速、高性能、高容量的嵌入式系統(tǒng)中。
VDNF64G08對一個2048(+64)字節(jié)的頁進(jìn)行典型的編程操作只要200μs的時間,對一個128K(+4K)大小的塊進(jìn)行擦除需要1.5ms的時間,對頁中一個字節(jié)的讀周期為25ns。它的I/O管腳既作地址和數(shù)據(jù)的輸入輸出口,也作為命令的輸入口。VDNF64G08的片上寫控制器能自動完成所有的編程、擦除功能包括產(chǎn)生所需的脈沖重復(fù)和內(nèi)部數(shù)據(jù)校驗(yàn)。VDNF64G08能擦除和編程百萬次以上,并通過ECC 或?qū)崟r制定算法保證擦除和編程的可靠性。


硬件設(shè)計
由于S698沒有專用的NAND Flash的專用接口,所有NANDFlash與S698-mil的通信使用GPIO實(shí)現(xiàn),NAND Flash的IO口與S698-mil的GPIO0低8位GPIO0[7 :0]連接,用于數(shù)據(jù),地址,命令的傳輸。NAND Flash的片選信號使用S698-mil的低3位地址線ADD[2 :0],通過3-8譯碼實(shí)現(xiàn),其中3-8譯碼器使用S698-mil的IOCS0控制工作,防止對VDNF64G08的誤操作。VDNF64G08的讀寫信號直接與S698-mil的讀寫信號相連,如果線路較長可以考慮串聯(lián)一個49.9R的電阻。命令鎖存CLE,地址鎖存ALE分別使用S698-mil的地址線ADD[3],ADD[4]。狀態(tài)信號RB上拉10kΩ電阻到電源,不再與S698-mil相連,VDNF64G08的狀態(tài)信息通過IO口讀寄存器實(shí)現(xiàn),以節(jié)約S698-mil的端口資源。寫保護(hù)端口上拉10kΩ到電源,否則不可擦除及編程。相關(guān)連接見圖2。

軟件設(shè)計
根據(jù)前面的介紹,通過圖3的硬件連接方式,可以實(shí)現(xiàn)對芯片的讀寫,擦除等控制操作,已可以滿足各種場合的應(yīng)用,S698-mil處理器是通過GPIO來操作控制VDNF64G08的,所以需要對底層操作需要比較了解,下面簡單介紹一些常用操作的實(shí)現(xiàn)。
S698-mil芯片GPIO0對應(yīng)的寄存器地址為0x2000 0000 – 0x27f ffff,因?yàn)閂DNF64G08芯片位寬是8bit的,所以需要把MCU的GPIO位寬也定義成8bit,根據(jù)前面的硬件連接可以知道地址低3位對應(yīng)到VDNF64G08芯片的片選信號,add[4]對應(yīng)到CLE,add[5]對應(yīng)到ALE,為了方便編程,這里做以下宏定義 :
#defne NF_ADDREG(CE)(*(volatile unsigned char *) (0x20000010+ CE))
#defne NF_CMDREG(CE)(*(volatile unsigned char *) (0x20000008+ CE))
#defne NF_DATAREG(CE)(*(volatile unsigned char *) (0x20000000+ CE))
讀芯片ID
根據(jù)芯片指令表,可以知道讀ID芯片只需要寫入命令0x90,然后在寫入地址0x0即可,詳細(xì)操作可以根據(jù)以下時序圖進(jìn)行:
int readID(unsigned char CE,unsigned IDlength)
{
unsigned char ID[],i;
NF_CMDREG(CE) = 0x90; NF_ADDREG(CE) = 0x0; delayed(1);
for(i = 0;i < IDlength;i++){
ID[i] = NF_DATAREG(CE);}
i = i - 1;
p r i n t f ( \" C H I P C E d % ID:0x%x\",ID[0]);
while(i){
printf(\"-%x\",ID[IDlength - i]);
i --;
}
printf(\"\n\r\");
}
芯片壞塊查詢
由于NAND Flash的工藝不能保證NAND 的Memory Array在其生命周期中保持性能的可靠,因此,在NAND 的生產(chǎn)中及使用過程中會產(chǎn)生壞塊。為了檢測數(shù)據(jù)的可靠性,在應(yīng)用NAND Flash的系統(tǒng)中一般都會采用一定的壞區(qū)管理策略,而管理壞區(qū)的前提是能比較可靠的進(jìn)行壞區(qū)檢測。檢測流程如圖4所示。
芯片擦除操作
NAND Flash的擦除操作是以塊為基礎(chǔ)進(jìn)行的。只有已擦除的塊才能編程,因?yàn)镹AND Flash芯片的工藝特性決定了,芯片的CELL只能由1寫成0,而不能由0寫成1。芯片的擦除操作有2個命令周期和3個地址周期構(gòu)成,其中列地址不需要輸入,并且行地址的頁地址也不會影響塊擦除效果,即塊擦除地址只有塊地址有效,操作時序及流程圖如圖5所示。
芯片頁讀操作
頁讀操作通過將00h指令寫入指令寄存器,接著寫入5個地址(2個列地址,3個行地址),最后寫入30h指令來啟動。一旦頁讀指令被器件鎖存,下面的頁讀操作就不需要再重復(fù)寫入指令了。
寫入指令和地址后,處理器可以通過對信號線R/ 的分析來判斷該操作是否完成。如果信號為低電平,表示器件正“忙”;為高電平,說明器件內(nèi)部操作完成,要讀取的數(shù)據(jù)被送入了數(shù)據(jù)寄存器。外部控制器可以在以50ns為周期的連續(xù) 脈沖信號的控制下,從I/O口依次讀出數(shù)據(jù)。
連續(xù)頁讀操作中,輸出的數(shù)據(jù)是從指定的列地址開始,直到該頁的最后一個列地址的數(shù)據(jù)為止。操作時序及流程圖如圖6所示。
芯片頁編程操作
VDNF64G08芯片的寫入操作也以頁為單位。寫入之前必須先擦除,否則寫入將出錯。
頁寫入周期總共包括3個步驟:寫入串行數(shù)據(jù)輸入指令(80h),然后寫入5個字節(jié)的地址信息,最后串行寫入數(shù)據(jù)。
串行寫入的數(shù)據(jù)最多為4096字節(jié),它們首先被寫入器件內(nèi)的頁寄存器,接著器件進(jìn)入一個內(nèi)部寫入過程,將數(shù)據(jù)從頁寄存器寫入存儲宏單元。
串行數(shù)據(jù)寫入完成后,需要寫入“頁寫入確認(rèn)”指令10h,這條指令將初始化器件的內(nèi)部寫入操作。如果單獨(dú)寫入10h而沒有前面的步驟,則10h不起作用。10h寫入之后,內(nèi)部寫控制器將自動執(zhí)行內(nèi)部寫入和校驗(yàn)中必要的算法和時序,這是系統(tǒng)控制器就可以去做別的事了。
內(nèi)部寫入操作開始后,器件自動進(jìn)入“讀狀態(tài)寄存器”模式,在這一模式下,當(dāng)RE/CE為低電平時,系統(tǒng)就可以讀取狀態(tài)寄存器。系統(tǒng)可以通過檢測R/B 的輸出,或讀狀態(tài)寄存器的狀態(tài)位(I/O7)來判斷內(nèi)部寫入是否結(jié)束。在器件進(jìn)行內(nèi)部寫入操作時,只有讀狀態(tài)寄存器指令和復(fù)位指令會被響應(yīng)。當(dāng)頁寫入操作完成,應(yīng)該檢測寫狀態(tài)位(I/O1)的電平。
內(nèi)部寫校驗(yàn)只對1沒有成功地寫為0的情況進(jìn)行檢測。指令寄存器始終保持著讀狀態(tài)寄存器模式,直到其它有效的指令寫入指令寄存器為止。操作時序及流程圖如圖7所示。
結(jié)束語




VDNF64G08是一個快速、高存儲密度的隨機(jī)訪問存儲器。整個模塊采用堆疊技術(shù),它們之間的互相連接線非常短,寄生電容小。在研發(fā)初期理論論證和生產(chǎn)之后的實(shí)驗(yàn)數(shù)據(jù)表明,這種芯片非常適用于高速、高性能、高容量的嵌入式系統(tǒng)中,并得到用戶的好評。
參考文獻(xiàn):
[1] 珠海歐比特控制工程股份有限公司.VDNF64G08-F使用說明書[Z].2013
[2] H M Peitel,P J Deitel.C How to program,second Edition.蔣才鵬等譯.C程序設(shè)計教程[M].北京:機(jī)械工業(yè)出版社.2000
[3] 珠海歐比特控制工程股份有限公司.VDNF64D08-K使用說明書[Z].2013
[4] 珠海歐比特控制工程股份有限公司.S698-T芯片用戶手冊[Z].2011
[5] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2003
[6] SPARC International Inc . The SPARC Architecture Manual[K].Version 8