1. 程式人生 > 其它 >Mini2440裸機開發之Nand Flash

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
The I/O pins are used to input command, address and data, and to output data during read operations. The I/O pins float to
high-z when the chip is deselected or when the outputs are disabled.

資料輸入輸出(命令、地址、資料公用資料匯流排)

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
The ALE input controls the activating path for address to the internal address registers. Addresses are latched on the rising
edge of $\overline{WE}$ with ALE high.

地址使能,高電位有效

$\overline{CE}$

CHIP ENABLE
The $\overline{CE}$ input is the device selection control. When the device is in the Busy state, $\overline{CE}$high is ignored, and the device does
not return to standby mode in program or erase operation.

片選訊號,低電位有效

$\overline{RE}$

READ ENABLE
The $\overline{RE}$input is the serial data-out control, and when active drives the data onto the I/O bus. Data is valid tREA after the falling
edge of RE which also increments the internal column address counter by one.

寫使能,低電位有效

$\overline{WE}$

WRITE ENABLE
The $\overline{WE}$ input controls writes to the I/O port. Commands, address and data are latched on the rising edge of the $\overline{WE}$ pulse.

讀使能,低電位有效

$\overline{WP}$

WRITE PROTECT
The $\overline{WP}$pin provides inadvertent program/erase protection during power transitions. The internal high voltage generator is
reset when the$\overline{WP}$ pin is active low.

防寫,讀使能,低電位有效

$R/\overline{B}$

READY/BUSY OUTPUT
The$R/\overline{B}$ output indicates the status of the device operation. When low, it indicates that a program, erase or random read
operation is in process and returns to high state upon completion. It is an open drain output and does not float to high-z condition
when the chip is deselected or when outputs are disabled.

就緒/忙輸出訊號(低電平表示操作還在進行中,高電平表示操作完成)

VCC

POWER
VCC is the power supply for device.

VSS GROUND
NC

NO CONNECTION
Lead is not internally connected.

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

參考文章:

[1]s3c2440裸機-nandflash程式設計(一. nandflash原理及結構簡介)

[2]s3c2440裸機-nandflash程式設計(二. nand控制器和nand訪問時序)