Mini2440裸機開發之Nand Flash
一、Nand Flash介紹
目前的NOR Flash 儲存器價格較高,相對而言SDRAM 和Nand Flash 儲存器更經濟,這樣促使了一些使用者 在Nand Flash 中執行引導程式碼,在SDRAM 中執行主程式碼。
NAND Flash是一種非易失儲存介質(掉電後資料不會丟失),常見的U盤、TF卡/SD卡,以及大部分SSD(固態硬碟)都是由它組成的。
常見的flash廠商有:Micron(鎂光)、Toshiba(東芝)、Samsung(三星)、MXIC(旺巨集)、dosilicon(東芯),(Winbond)華邦、ESMT等。
1.1 Nand Flash原理圖
Mini2440開發板就是將採用了的256MB的NandFlash(型號K9F2G08U0C)。
1.2K9F2G08U0C晶片介紹
下圖的資訊來是官方手冊:
-
可以看出此款Nand Flash容量為256M,外加8M的冗餘oob儲存區;
-
page大小為2K,block大小為128K;
-
讀一個page時順序讀取至少25*2048ns(資料可以每位元組25ns的迴圈時間讀出),隨機讀取不超過40us;
-
寫一個page一般為250us;
-
擦除一個block一般為2ms
-
封裝上分為TSOP分裝和FBGA封裝(TSOP是指引腳在側面,FBGA是引腳封在晶片底部,更能保障資料安全,有些客戶為了保障資料安全性,防止被飛線進行資料破解,會要求用FBGA封裝的flash)
引腳資訊如下:
Pin Name | Pin Function |
I/O0 ~ I/O7 |
DATA INPUTS/OUTPUTS 資料輸入輸出(命令、地址、資料公用資料匯流排) |
CLE |
COMMAND LATCH ENABLE The CLE input controls the activating path for commands sent to the command register. When active high, commands are latched into the command register through the I/O ports on the rising edge of the $\overline{WE}$ signal. 命令使能,高電位有效 |
ALE |
ADDRESS LATCH ENABLE 地址使能,高電位有效 |
$\overline{CE}$ |
CHIP ENABLE 片選訊號,低電位有效 |
$\overline{RE}$ |
READ ENABLE 寫使能,低電位有效 |
$\overline{WE}$ |
WRITE ENABLE 讀使能,低電位有效 |
$\overline{WP}$ |
WRITE PROTECT 防寫,讀使能,低電位有效 |
$R/\overline{B}$ |
READY/BUSY OUTPUT 就緒/忙輸出訊號(低電平表示操作還在進行中,高電平表示操作完成) |
VCC |
POWER |
VSS | GROUND |
NC |
NO CONNECTION |
1.3 內部儲存結構
我們常見的Nand Flash,內部只有一個chip,每個chip只有一個plane。但也有些複雜的,容量更大的Nand Flash,內部有多個chip,每個chip有多個plane,這類的Nand Flash,其實就是多了一個主控將多塊flash疊加在一起,如下圖:
- Block塊:一個Nand Flash由很多個塊(Block)組成,塊的大小一般有64K,128KB,256KB,512KB,Block是Nand Flash的擦除操作的基本/最小單位。Nand Flash中,一個塊中含有1個或多個位是壞的,就稱為其為壞塊Bad Block。
-
Page頁:每個塊裡面又包含了很多頁(page)。每個頁的大小,對於現在常見的Nand Flash多數是2KB,當然也有的Nand Flash的頁大小為4KB、8KB等。頁Page,是讀寫操作的基本單位
-
oob ( Spare Area):每一個page頁,對應還附加了一塊區域,一般為64byte,叫做空閒區域(spare area)/oob區域(Out Of Band),由於nandflash在操作過程中容易產生位反轉,這是nandflash的物理特性決定的,所以必須要有對應的檢測和糾錯機制,這種機制被叫做Error Checking and Correcting,所以設計了多餘的oob區域,用於放置資料的校驗值。oob的讀寫操作,一般是隨著頁的操作一起完成的,即讀寫頁的時候,對應地就讀寫了oob。 關於oob具體用途,總結起來有:
- 標記是否是壞快;
- 儲存ECC資料;
- 儲存一些和檔案系統相關的資料。如jffs2就會用到這些空間儲存一些特定資訊;
以K9F2G08U0C為例:
頁--Page: (2K + 64)Byte , 每頁有2048個位元組,需要2^11==2048,即11位地址;
塊--Block: (128K + 4K)Byte, 每塊有64頁,需要2^6=64,即6位地址;
256M/128K = 2048Block, 晶片一共有2048塊,需要2^11 = 2048,即11位地址
現在以第25塊的30頁中的24byte為例:
實體地址 = 塊大小×塊號 + 頁大小×頁號 + 頁內地址
= 128K x 25 + 2K x 30 + 24B
= 3338264(10)
= 32F018 (16)
0x32F018 = 0011 0010 1111 0000 0001 1000;
由此可得到實際傳送的資料
- A7 - A0 = 0001 1000
- A10 - A8 = 0000 0000 (A11沒用到)
- A19 - A12 = 0010 1111
- A27 - A20 = 0000 0011
- A28 = 0000 0000
二、S3C2440 Nand Flash控制器
我們知道Nand Flash沒有獨立地址線,CPU無法直接訪問Nand Flash上的指令,所以Nand Flash不能片上執行。那麼為何程式還能支援Nand Flash啟動的呢? 為了支援Nand Flash啟動,S3C2440A配備了一個稱為“ Steppingstone”的內部SRAM緩衝區,容量為4K。 開機時,Nand Flash中的前4K資料將被載入到Steppingstone中,而引導程式碼將被載入到SRAM中將被執行,如下圖所示:
我們知道s3c2440支援2種boot方式,Nand Flash或者Nor Flash,那麼需要配置OM引腳來設定引導方式,OM[1:0] = 00:使能Nand Flash 儲存器引導啟動。
記憶體控制器的地址對映表如下:
2.1 引腳配置
當上電啟動時,Nand Flash 控制器將通過下面的引腳配置來獲取連線的 Nand Flash 的資訊。
(1) NCON:Nand Flash 儲存器選擇(普通/先進)
- 0:普通 Nand Flash(256 字或 512 位元組頁大小,3 或 4 個地址週期)
- 1:先進 Nand Flash(1K 字或 2K 位元組頁大小,4 或 5 個地址週期)
(2)GPG13:Nand Flash 儲存器page size選擇
- 0:頁=256 字(NCON=0)或頁=1K 字(NCON=1)
- 1:頁=512 位元組(NCON=0)或頁=2K 位元組(NCON=1)
(3)GPG14:Nand Flash 儲存器地址週期選擇
- 0:3 個地址週期(NCON=0)或 4 個地址週期(NCON=1)
- 1:4 個地址週期(NCON=0)或 5 個地址週期(NCON=1)
(4)GPG15:Nand Flash 儲存器匯流排寬度選擇
- 0:8 位寬度
- 1:16 位寬度
如下表所示更直觀:
三 Nand Flash控制器時序配置
Nand Flash訪問時需要遵循一定的時序才能完成命令、地址、資料的傳送。以8位寬資料匯流排為例,那麼沒有地址線它是怎麼和cpu通訊的呢?
1) Nand Flash是DATA0~DATA7上既傳輸資料,又傳輸地址,又傳輸命令; ①當ALE為高電平時傳輸的是地址; ②當CLE為高電平時傳輸的是命令; ③當ALE,CLE都為低電平表示傳輸的是資料 ;
2) 先發送片選CS和WE/RE訊號;
3) 再發送CLE;
4) 再發送ALE;
5) 最後傳送資料;
下面分別介紹命令、地址、資料的傳送過程。
3.1 命令/地址鎖存序號(寫命令/地址)
1)首先看時鐘,Nand Flash控制器的時鐘源採用的是HCLK, 也就是AHB高速匯流排模式,假設HCLK=100Mhz, 則T=1/HCLK=10ns;
2)從上圖可知命令、地址鎖存的時序是一樣的,複用一個時序圖,當到達①的位置時,CLE/ALE=0;
3)當到達位置②時,CLE/ALE=1,表示命令/地址訊號拉高,命令/地址開始使能,然後往資料匯流排DATA上放入命令或地址;
4)經過TACLS時間,到達位置③時,拉低nWE引腳,這時資料匯流排DATA上的命令/地址開始被鎖存,鎖存需要一定的時間,所以經過TWRPH0時間後,資料匯流排DATA上的命令/地址鎖存完成;
5)到達位置④,此時釋放nWE訊號,nWE=1,這時還需要經過TWRPH1時間後,釋放CLE/ALE,此時一個完整的命令/地址鎖存過程完成。
上面分析了命令/地址的鎖存時序過程,下面詳細解釋下上面幾個時間引數的含義:
- TACLS:CLE/ALE使能訊號傳送多久後才可以傳送nWE訊號;
- TWRPH0:nWE訊號傳送多久後資料(commamd/addr)才會被鎖存成功 ;
- TWRPH1:nWE訊號釋放多久後才能釋放CLE/ALE。
那麼這些時間引數要怎麼配置呢?
這個需要根據我們實際使用的具體Nanf Flash型號和效能來配置我們的Nand Flash控制器。我們以K9F2G08U0C這款Nand Flash為例進行講解,手冊上命令和地址鎖存週期如下:
和Nand Flash控制器的命令/地址鎖存時序圖對比發現:
TACLS = max(tCLS,tALS) - tWP;
TWRPH0 = tWP;
TWRPH0 = max(tCLH,tALH);
我們知道2440 nand控制器把命令、地址鎖存時序複用成了一個時序圖,其實命令和地址鎖存時序引數基本一致,只不過發命令只需要一個週期就OK了,發地址需要5個時鐘週期,為什麼?
你想,命令多簡單,無非就是讀寫擦,像我們這款nand資料位寬8bit,一個週期綽綽有餘。但地址就不一樣了,比如此款nandflash容量256M = 2^28,那麼需要28根資料線來傳輸才能一個週期傳輸完,但這款nandflash的資料匯流排位寬只有8bit, 只有8根資料線,所以需要把地址拆分成多次傳送,先發送col地址,再發送row地址,此款nandflash是用了5個週期傳送地址。
3.2資料鎖存時序(寫資料)
從前面的命令地址鎖存時序圖中我們得知,CLE訊號拉高,ALE訊號拉低時,表示傳送的命令;當CLE訊號拉低,ALE訊號拉高時,表示傳送的地址;那麼當CLE、ALE都拉低時,表示傳送的資料,如下圖,nCE, CLE, ALE都拉低了,表示傳輸的是資料。
1) 當到達①時,nWE還是高電平,寫使能沒有開啟;
2) 當到達②,③時,那麼經過了tWP時間(TDS時間),資料開始被鎖存;
3) 到達④,經過tDH時間,資料鎖存完成;
4) 到達⑤,也就是資料開始鎖存後再過了tWH時間後釋放nWE訊號;
5) 重複②③④⑤過程。
根據上面這三個圖(手冊上的命令、地址、資料鎖存時序圖),下面詳細解釋各個時間引數的含義:
3.3 順序訪問週期(讀資料)
1)①處,表示要過tRR後才能傳送讀使能訊號nRE進行訪問(上一次的訪問結束後,需要等待ready狀態穩定後才可以進行下一次訪問);
2)當到達②,需要經過rREA時間後nRE訊號才有效(待nRE穩定);
3)當到達③,DATA總線上的讀取被讀取;
4)當到達④,nRE釋放tREH時間後才允許下一次讀使能
我們看到連續順序訪問時,單次訪問的時間為tRC,那麼這些時間引數的值也可以從K9F2G08U0C datasheet中找到:為25ns
參考文章: