摘 要:在AMBA AHB總線上實現NAND FLASH控制器有多種方案。為使其具有更好的兼容性,既能支持主流型號NAND FLASH的各種命令,同時又兼顧到讀寫效率,該設計根據NAND FLASH本身的操作特點,提出一種軟硬件劃分的設計方案,以軟硬件結合的方式設計出NAND FLASH控制器。該設計通過系統(tǒng)級仿真,功能符合NAND FLASH操作規(guī)范。
關鍵詞:NAND FLASH;AHB;控制器;軟硬件劃分
中圖分類號:TN79 文獻標識碼:B 文章編號:1004-373X(2008)02-001-03
NAND FLASH Controller Design with Software/Hardware Partition Based on AMBA General Bus
XIAO Peng,LIU Xinning,DU Honghua
(National Engineering Research Center for ASIC System,Southeast University,Nanjing,210096,China)
Abstract:There are many kinds of methods to implement the NAND FLASH controller on the AMBA AHB general bus.In order to make it has a better compatibility which can support all kinds of commands of the primary NAND FLASH in the market,at the same time it has a high access efficiency,according to the characteristic of NAND FLASH operation,here gives a kind of software/hardware partition solution of implementing the controller by both hardware and software way.This design has past the system simulation and all functions accord with the NAND FLASH specification.
Keywords:NAND FLASH;AHB;controller;software/hardware partition
隨著嵌入式系統(tǒng)的發(fā)展, NAND FLASH正被越來越多地應用到嵌入式系統(tǒng)中。而NAND FLASH與處理器的連接需要接口支持,其可以是純硬件的接口,即SoC中本身設計有NAND FLASH硬件控制器,只要根據具體信號線直接連接;也可以是純軟件接口,即SoC中本身沒有專門的NAND FLASH硬件控制器,這時可以將信號線連接到GPIO口或是外部存貯器接口上,通過軟件實現NAND FLASH的各種操作。
純硬件接口所能支持的NAND FLASH命令有其局限性,因為各種型號NAND FLASH命令不盡相同,接口所能支持的命令又受其狀態(tài)機的限制。純軟件接口可以很好地解決這個問題,但很耗費時鐘周期,讀寫速度將大大下降。為了使SoC能更好地兼容各種型號NAND FLASH并提高讀寫效率,本設計采用軟硬件結合的方法實現基于AMBA AHB總線的8位NAND FLASH控制器,以滿足上述要求。
1 NAND FLASH基本操作
NAND FLASH接口信號由1個8位的I/O數據線和6個主要的控制信號構成,其中8位I/O信號線用來傳送NAND FLASH的命令字、地址、數據信息,其他6位控制信號包括CE,WE,RE,CLE,ALE,R/B。NAND FLASH最基本和最常用的操作命令是整頁讀、整頁寫、讀狀態(tài)字和塊擦除。除了讀狀態(tài)字操作,系統(tǒng)總要通過I/O口先向設備發(fā)出相關的命令字,再發(fā)出相應的地址信息。NAND設備內部有命令字寄存器和地址寄存器,用來鎖存相應的命令字和地址信息。下面著重介紹基本的整頁讀操作和整頁寫操作流程,擦除操作流程與此類似。
1.1 讀操作
當發(fā)出整頁讀命令和地址后,數據從FLASH存貯體傳送到他內部的數據寄存器中,此項工作完成后(通過R/B信號線判斷是否完成),就可以通過I/O口讀出數據寄存器中的數據。時序圖如圖1所示,以下是該過程實現的步驟:
命令發(fā)送 此時CE信號有效,CLE=1,ALE=0,讀命令00h通過I/O口傳送,在WE信號的上升沿,命令字將被鎖存到NAND FLASH的命令寄存器。
地址發(fā)送 此時CE信號有效,CLE=0,ALE=1,地址信息將通過I/O口寫到地址寄存器。地址信息包括行地址和列地址信息(具體參見各NAND FLASH器件手冊),是以Byte的數據格式分幾個連續(xù)的周期寫入,在每個WE信號的上升沿,地址信息將被鎖存到NAND FLASH地址寄存器。
數據傳送 此時CE信號有效,CLE=0,ALE=0,數據從存貯體中傳送到數據寄存器中,NAND FLASH處于Busy狀態(tài),即R/B信號為低電平,當數據傳送完畢,此信號線為高電平,表示設備處于Ready狀態(tài),數據可以從數據寄存器中讀出。
數據讀出 此時R/B[TX-]信號為高電平,CE信號有效,CLE=0,ALE=0,數據將根據RE信號的節(jié)拍通過I/O口讀出。
1.2 寫操作
當發(fā)出寫命令和地址后,數據通過I/O口寫入內部的數據寄存器中,再寫入存貯體,也是通過R/B[TX-]信號線判斷是否寫入完成。此過程實現步驟與讀操作類似,先是通過I/O口發(fā)送寫命令字80 h,然后地址發(fā)送,再將數據通過I/O口寫入NAND FLASH的數據寄存器,下面發(fā)出編程命令字10 h,存儲器進入Busy狀態(tài),通過R/B[TX-]信號表示,并將數據從寄存器寫入存貯體,最后發(fā)出狀態(tài)讀命令字70 h,以檢查此過程是否成功完成。其時序圖與讀操作相似,下面只給出寫操作流程圖,如圖2所示。
除了以上操作,各種不同NAND FLASH還支持各種不同的命令,如ID讀取、半頁讀、兩頁寫、兩頁擦除、復制操作等,視具體NAND FLASH而定。
2 軟硬件劃分方案
系統(tǒng)對NAND FLASH的操作,主要包括3部分,即命令發(fā)送部分、地址發(fā)送部分和數據傳輸部分。因此普通的NAND FLASH的硬件接口設計包括命令發(fā)送邏輯、地址發(fā)送邏輯、讀數據和寫數據邏輯。這種設計的優(yōu)勢是各種功能都是硬件實現,節(jié)省CPU的指令周期,速度快。但是各NAND FLASH支持的命令不盡相同,這種設計由于其狀態(tài)機對命令字的限制,只能支持特定的幾種NAND FLASH。
為了使控制器能支持更多型號NAND FLASH,本設計提出一種軟硬件劃分方案,即用軟件實現命令發(fā)送和地址發(fā)送,數據傳輸時序則由硬件完成。這種方案實現將由軟件代碼和硬件的讀寫狀態(tài)機共同工作。[GK7!]這樣,由于命令字是通過軟件發(fā)出的,將不會受到像硬件那樣被固定的限制;同時由硬件完成數據傳輸部分保證了其讀寫效率。
軟件部分的實現可以利用SRAM接口的2根地址線控制ALE和CLE,RE和WE信號利用SRAM的讀寫信號進行控制,從而實現系統(tǒng)對命令字和地址的寫入;另外還要用到GPIO口2根信號線分別控制CE和R/B以配合上述過程的實現。硬件部分主要包括一個讀寫時序狀態(tài)機完成數據的傳輸工作。
當然,這種設計因為命令和地址發(fā)送都是通過指令完成,會占用一定的CPU時間。但從綜合評價的角度看,在NAND FLASH的讀寫操作中數據傳輸部分的時間占絕大多數比例,而這部分是用硬件實現的;因而相對而言,軟件部分只占用很少的時間,卻換來對幾乎任何一種NAND FLASH芯片的支持,而且節(jié)約硬件面積,因此這種劃分方案是可行的。
3 NAND FLASH控制器的軟件部分設計
3.1 系統(tǒng)連接方案:
控制器軟件部分的任務將是發(fā)送命令和地址,負責系統(tǒng)對NAND FLASH除讀寫時序操作外的所有操作。以對三星K9F4G08U0M NAND FLASH的操作為例,軟件負責的操作有讀寫操作中的發(fā)送命令和地址、讀ID操作、復位操作、塊擦除操作、讀狀態(tài)字操作、讀EDC狀態(tài)操作等,因此軟件需要能控制NAND FLASH的8位的I/O總線和6個主要的控制信號。這可以通過SRAM接口信號和GPIO口的信號實現。
如圖3所示,將地址線A0和A1分別接到ALE和CLE上,利用系統(tǒng)對SRAM的尋址控制ALE和CLE。SRAM的寫使能信號SMWE接WE,SRAM的讀使能信號SMOE接RE, 數據線接I/O口,這樣就完成了用SRAM接口信號控制NAND FLASH部分信號。另外系統(tǒng)對片選信號CE的控制和對R/B信號的判斷,則利用GPIO模塊的GPA0和GPE0這2根信號線,他們分別接到NAND FLASH的CE和R/B信號線上。
3.2 軟件編程
如圖3所示,軟件對NAND FLASH命令字和地址的寫入是借助于SRAM接口和GPIO口而進行。處理器輸出地址0x00000002,譯碼后A0=0,A1=1,這樣可使ALE=0,CLE=1,這時處理器在數據總線上輸出想要的命令字,用SRAM的讀寫控制信號將數據通過I/O送入NAND FLASH;同樣對0x00000001的尋址可使ALE=1,CLE=0,在這個地址上寫入任意數量的8位地址信息,也將通過I/O送入NAND FLASH。另外還可在SRAM控制器中對SMWE,SOME信號的脈沖寬度進行時序配置,使之符合NAND FLASH的WE,RE時序要求。由于塊擦除操作不包括數據傳輸的過程,因此他在本設計中完全由軟件完成。下面以K9F4G08U0M NAND FLASH為例給出示意代碼,說明在圖3的連接下,軟件如何完成命令字和地址的發(fā)送,其他操作的軟件編程與此類似。
typedef unsigned char U8;
typedef volatile U8*RP8;
Block-Erase(U8 A0-A7,U8 A8-A11,U8 A12-A19,U8 A20-A27, U8 A28-A29)
{
U8NAND-Data = 0;
SET-CE(0);[JY]//通過GPA0口使CE置有效位
*(RP8)(0x00000002) = 0x60;[JY]//寫入擦除命令
*(RP8)(0x00000001) = A0-A7;[JY]//按順序寫入地址
*(RP8)(0x00000001) = A8-A11;
*(RP8)(0x00000001) = A12-A19;
*(RP8)(0x00000001) = A20-A27;
*(RP8)(0x00000001) = A28-A29;
*(RP8)(0x00000002) = 0xd0;
while(!NAND-R-B());[JY]//等待R/B信號拉高,通過GPE0口判斷
*(RP8)(0x24000002) = 0x70;[JY]//寫入讀狀態(tài)字命令
delay(50000);
NAND-Data = *(RP8)NAND-STATE-REG;[JY]//從狀態(tài)寄存器中讀出狀態(tài)字
NAND-Finish();
if(NAND-Data != 0xc0)
return ;
}
4 NAND FLASH控制器的硬件部分設計
4.1 硬件結構
該控制器硬件部分只負責對存貯器數據的讀寫及其ECC糾錯。其數據必須經過AHB總線接口才能與AHB總線傳輸。其硬件設計框圖如圖4所示。他包括1個數據FIFO,在總線和控制器間緩存數據。ECC模塊負責寫數據和讀數據的校驗。讀寫時序狀態(tài)機控制讀寫操作。寄存器組包括配置寄存器,出錯地址寄存器及狀態(tài)字寄存器,他們在總線上有統(tǒng)一編址,前者用來配置讀寫時序,后者用來寄存ECC糾錯后出現錯誤的地址。
4.2 讀寫流程
寫數據 先由軟件對存貯器寫入命令和地址,再由軟件對讀寫做時序配置,即通過AHB總線接口將配置信息寫入寄存器組。這樣,所要寫入的數據將通過FIFO進入位寬轉換邏輯,即由總線上來的32位數據轉換成8位數據,通過讀寫時序狀態(tài)機寫入NAND FLASH。同時,8位寫入數據也傳入ECC校驗模塊,產生校驗碼,他將隨同寫入數據一起寫入NAND FLASH。
讀數據 同樣先由軟件對存貯器寫入命令和地址,再由軟件對讀寫做時序配置,即通過AHB總線接口將配置信息寫入寄存器組。當R/B信號置高位后,啟動狀態(tài)機,從NAND FLASH讀出數據到控制器。這時讀出的數據是8位的,他將通過位寬轉換邏輯轉換成32位數據送入FIFO,最后送入AHB總線接口模塊,由他輸出給總線。與此同時,從狀態(tài)機中讀出的8位數據也將輸出給ECC模塊,該模塊將數據進行校驗產生1次檢驗碼,并與寫數據時產生的存入NAND FLASH的檢驗碼做比較。如果比較時發(fā)現錯誤,將產生一個中斷信號給系統(tǒng)中斷控制器,由軟件執(zhí)行異常中斷服務程序;同時計算出錯的地址,送入寄存器組,這樣軟件可以讀出這個出錯地址。
5 結 語
在SoC中實現NAND FLASH控制器,兼容性很重要。SoC并不是專用芯片,而是為某一類應用而設計的,兼容性強才會有好的市場。本文提出一種效率兼顧的軟硬件設計方法實現NAND FLASH控制器,并通過系統(tǒng)級仿真,能很好地滿足兼容性的要求。
參 考 文 獻
[1]Ke Zhan,Daniel Zhao.Interfacing ADSP-BF53x Blackfin Processors to NAND FLASH Memory.Analog Device,Inc,2006,EE-302.
[2]Aseem Vasudev Prabhugaonkar.Interfacing NAND FLASH Memory with ADSP-2126x SHARC Processors.Analog Devices,Inc,2005,EE-279.
[3]Samsung Electronics Corporation.K9F4G08U0M 512M×8 Bits / 1G×8 Bits NAND FLASH Memory Data Sheet[S].2004.
[4]Kreidl H.嵌入式FLASH微控制器簡介(上)(Embedded FLASH MCU)[J].世界電子元器件,2002(9):32-33.
[5]Kreidl H.嵌入式FLASH微控制器簡介(下)(Embedded FLASH MCU)[J].世界電子元器件,2002(10):40-41.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。