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


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

軟件設計
根據前面的介紹,通過圖3的硬件連接方式,可以實現對芯片的讀寫,擦除等控制操作,已可以滿足各種場合的應用,S698-mil處理器是通過GPIO來操作控制VDNF64G08的,所以需要對底層操作需要比較了解,下面簡單介紹一些常用操作的實現。
S698-mil芯片GPIO0對應的寄存器地址為0x2000 0000 – 0x27f ffff,因為VDNF64G08芯片位寬是8bit的,所以需要把MCU的GPIO位寬也定義成8bit,根據前面的硬件連接可以知道地址低3位對應到VDNF64G08芯片的片選信號,add[4]對應到CLE,add[5]對應到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
根據芯片指令表,可以知道讀ID芯片只需要寫入命令0x90,然后在寫入地址0x0即可,詳細操作可以根據以下時序圖進行:
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 的生產中及使用過程中會產生壞塊。為了檢測數據的可靠性,在應用NAND Flash的系統中一般都會采用一定的壞區管理策略,而管理壞區的前提是能比較可靠的進行壞區檢測。檢測流程如圖4所示。
芯片擦除操作
NAND Flash的擦除操作是以塊為基礎進行的。只有已擦除的塊才能編程,因為NAND Flash芯片的工藝特性決定了,芯片的CELL只能由1寫成0,而不能由0寫成1。芯片的擦除操作有2個命令周期和3個地址周期構成,其中列地址不需要輸入,并且行地址的頁地址也不會影響塊擦除效果,即塊擦除地址只有塊地址有效,操作時序及流程圖如圖5所示。
芯片頁讀操作
頁讀操作通過將00h指令寫入指令寄存器,接著寫入5個地址(2個列地址,3個行地址),最后寫入30h指令來啟動。一旦頁讀指令被器件鎖存,下面的頁讀操作就不需要再重復寫入指令了。
寫入指令和地址后,處理器可以通過對信號線R/ 的分析來判斷該操作是否完成。如果信號為低電平,表示器件正“忙”;為高電平,說明器件內部操作完成,要讀取的數據被送入了數據寄存器。外部控制器可以在以50ns為周期的連續 脈沖信號的控制下,從I/O口依次讀出數據。
連續頁讀操作中,輸出的數據是從指定的列地址開始,直到該頁的最后一個列地址的數據為止。操作時序及流程圖如圖6所示。
芯片頁編程操作
VDNF64G08芯片的寫入操作也以頁為單位。寫入之前必須先擦除,否則寫入將出錯。
頁寫入周期總共包括3個步驟:寫入串行數據輸入指令(80h),然后寫入5個字節的地址信息,最后串行寫入數據。
串行寫入的數據最多為4096字節,它們首先被寫入器件內的頁寄存器,接著器件進入一個內部寫入過程,將數據從頁寄存器寫入存儲宏單元。
串行數據寫入完成后,需要寫入“頁寫入確認”指令10h,這條指令將初始化器件的內部寫入操作。如果單獨寫入10h而沒有前面的步驟,則10h不起作用。10h寫入之后,內部寫控制器將自動執行內部寫入和校驗中必要的算法和時序,這是系統控制器就可以去做別的事了。
內部寫入操作開始后,器件自動進入“讀狀態寄存器”模式,在這一模式下,當RE/CE為低電平時,系統就可以讀取狀態寄存器。系統可以通過檢測R/B 的輸出,或讀狀態寄存器的狀態位(I/O7)來判斷內部寫入是否結束。在器件進行內部寫入操作時,只有讀狀態寄存器指令和復位指令會被響應。當頁寫入操作完成,應該檢測寫狀態位(I/O1)的電平。
內部寫校驗只對1沒有成功地寫為0的情況進行檢測。指令寄存器始終保持著讀狀態寄存器模式,直到其它有效的指令寫入指令寄存器為止。操作時序及流程圖如圖7所示。
結束語




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