天天看點

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

1.檢視晶片型号

我在上次講系統時鐘的時候,提過一下,在S5PV210下面的那一片就是Nand Flash,旁邊的那4片是DDR,我的型号是K9F2G08UOB

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

查找三星晶片的命名手冊,這個網上有,PDF名稱叫----三星_Nand_Flash_晶片型号命名規則.pdf,打開,查找K9F2G08UOB所代表的具體參數如下:

晶片類型:Nand Flash

Small Classification:SLC Normal 

容量:2G/8bit

Technology:Normal

Organization:x8

Vcc:2.7V~3.6V

Mode:Normal

Generation:3rd Generation

整理一下資訊:Nand Flash , 容量256M(2G/8bit) , 是用SLC存儲(Single Level Cell單層存儲) , 總線為8bit , 工作電壓為2.7V~3.6V , 第3批次。

2.存儲原理

打開K9F2G08UOB晶片手冊的P6頁

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

由晶片手冊上可知,這款NAND FLASH,頁大小2K,塊大小128K,意思就是讀寫操作,每次最小為2K,擦除操作每次最小為128K。什麼原理呢,繼續向下看。

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

由上圖可知:1page = 2K, 1 block = 128K, 1Block=64Page, 晶片有128K

現在開始計算:

1 Block = 64*2 = 128K

那麼我們FLASH的容量就2K * 128K = 256M (圖中每個頁還有Page都有保留區,是以實際上我們用不到256M),這裡就有一個問題,為啥要設計成這樣?

因為Nand Flash是用于設計成嵌入式系統的記憶體,程式進行記憶體的尋址時,為了提搞速度,是以,将線性的記憶體在邏輯上進行分塊,分頁,形成邏輯上的立體結構,這樣,尋址就會友善,先找到是哪一塊,再找到是哪一頁,最後找到是這一頁的哪個位置,這要比起從頭到尾周遊,就要快很多了。

到這裡,存儲原理基本弄清楚了,Nand Flash的擦除操作是以block塊為機關的,與此相對應的是其他很多儲存設備,是以bit位為最小讀取/寫入的機關,Flash是一次性地擦除整個塊:在發送一個擦除指令後,一次性地将一個block,常見的塊的大小是128KB/256KB,全部擦除為1,也就是裡面的内容全部都是0xFF了。這裡就有了一個新問題,為什麼擦除是寫1,而不是寫0呢?這和我們正常的邏輯怎麼是個反的?

所謂1和0的介定,在存儲器中,是通過向存儲單元中施加電壓來控制向裡面是充電荷還是釋放電荷。是以,本質上來說,資料0和1的表示,就是存儲單元上的電壓否超過一個特定的電壓值,通常叫門檻值,超過了這個門檻值,就是1,沒超過,就是0。是以說,全部擦除為1,也就意味着對整個block進行一次全部的充電。那這裡,我們又有新問題了,那為什麼不把擦除做成統一放電呢?

關于這個,我也沒找到資料,書上也沒有查到相關的,如果有人知道,麻煩也一并指點下我。我個人的了解是放電是時時刻刻存在的,放電比充電容易。就像我們的這些存儲晶片,你充了一次電以後,是不是就一直為1了?不可能,能量是會衰減的,是以,你充一次電以後,隔了一段時間,不管你願意不願意,電荷必然會慢慢釋放掉,那麼,如果你要保證你的資料的正解性,仍然為1,不會被認為是0,你還得再充一次電,這個時間大概是多少,我在網上查了一下,存儲體中電容的資料有效儲存期上限是64ms(機關毫秒,也就是1/1000s)。那麼,現在我們再來了解一下,SRAM和DRAM的差別,百度百科裡查一下SRAM的介紹----SRAM不需要重新整理電路即能儲存它内部存儲的資料。而DRAM(Dynamic Random Access Memory)每隔一段時間,要重新整理充電一次,否則内部的資料即會消失,是以SRAM具有較高的性能。但是SRAM也有它的缺點,即它的內建度較低,相同容量的DRAM記憶體可以設計為較小的體積,但是SRAM卻需要很大的體積,且功耗較大。

到這裡,大家是不是有點明白了,為什麼SRAM不需要重新整理電路,你不需要重新整理電路,那你怎麼解決電荷釋放的問題?這世上沒有天上掉餡餅的事兒,别人不給你,那就自己帶一個呗,是以SRAM是自己帶有重新整理電路的,是以,它體積大,是以它容量做不上去。是以,SRAM和DRAM的差別,就非常好了解了,一個帶充電電路,一個不帶,而DRAM的充電是由記憶體控制器隔一段時間去充電的。

是以,到這裡,我了解的Nand Flash為什麼擦除是擦為1,就是因為放電比充電容易,你控制每個存儲單元去放電,肯定比控制每一個存儲單元去充電要容易的多,硬體實作也要簡單的多吧。

3.原理圖和引腳分析 

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

看Nand Flash的晶片手冊對各個pin腳的描述(K9F2G08U0B.pdf--P5) 通過觀察CE2#和R/B2#處于NC狀态,也就是未連接配接狀态,是以,這兩個芯腳去掉,還剩下8個I/O和其餘7條線 I/O0 ~ I/O7:   I/O pin用于 輸入command,addresss和data ,以及在讀操作時 輸出資料 。當晶片沒有被選中或無法正常輸出資料時,處于高阻态(high-z即高阻态,相當于隔斷狀态,當處于高阻抗狀态時,其輸出相當于斷開狀态,沒有任何邏輯控制功能)

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

CLE(COMMAND LATCH ENABLE): 訓示目前資料為控制指令,CLE輸入控制路徑發送到指令寄存器。

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

ALE(ADDRESS LATCH ENABLE): 訓示目前資料為位址

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

CE#(CHIP ENABLE):晶片使能,俗稱片選信号,表示flash chip是否被系統選中為目前操作晶片,低電平表示選中

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

RE#(READ ENABLE): 讀使能,RE是串行資料輸入,低電平時讀取data到I/O總線,RE下降沿時讀取資料有效,同時internal column address counter(内部列位址計數器)加1

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

WE#(WRITE ENABLE): 寫使能,低電平時向I/O中寫入Command,address和data,在上升沿時操作完成。

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

WP#(WRITE PROTECT): 寫保護,在電源置換過程中處于有效的低電平狀态,保護flash裡面的資料不受改寫。當WP低電平有效時,高電平産生複位

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

R/B#(READY/BUSY OUTPUT): 讀/忙狀态輸出,表示晶片是處于Read還是Busy狀态,低電平表示Busy,傳回高電平時表示處理完成。當晶片未被選中或無法輸出資料時不會處于high-z狀态,仍可用于檢測晶片的閑忙狀态

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

Vcc/Vss/N.C(POWER/GROUND/NO CONNECTION):Vcc是供電電壓,Vss接地,N.C沒定義

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

FAQ: 為什麼要有CLE和ALE?

比如指令鎖存使能(Command Latch Enable,CLE)和位址鎖存使能(Address Latch Enable,ALE),那是因為,Nand Flash就8個I/O,而且是複用的,也就是,可以傳資料,也可以傳位址,也可以傳指令,為了區分你目前傳入的到底是啥,是以,先要用發一個CLE(或ALE)指令,告訴nand Flash的控制器一聲,我下面要傳的是指令(或位址),這樣,裡面才能根據傳入的内容,進行對應的動作。否則,nand flash内部,怎麼知道你傳入的是資料,還是位址,還是指令啊,也就無法實作正确的操作了。那麼,為什麼不多幾個I/O呢?

FAQ:Nand Flash為什麼隻設計8個I/O引腳,有什麼好外?

1) 減少外圍引腳:相對于并口(Parellel)的Nor Flash的48或52個引腳來說,的确是大大減小了引腳數目,這樣封裝後的晶片體積,就小很多。現在晶片在向體積更小,功能更強,功耗更低發展,減小晶片體積,就是很大的優勢。同時,減少晶片接口,也意味着使用此晶片的相關的外圍電路會更簡化,避免了繁瑣的硬體連線。

2) 提高系統的可擴充性,因為沒有像其他裝置一樣用實體大小對應的完全數目的addr引腳,在晶片内部換了晶片的大小等的改動,對于用全部的位址addr的引腳,那麼就會引起這些引腳數目的增加,比如容量擴大一倍,位址空間/尋址空間擴大一倍,是以,位址線數目/addr引腳數目,就要多加一個,而對于統一用8個I/O的引腳的Nand Flash,由于對外提供的都是統一的8個引腳,内部的晶片大小的變化或者其他的變化,對于外部使用者(比如編寫nand flash驅動的人)來說,不需要關心,隻是保證新的晶片,還是遵循同樣的接口,同樣的時序,同樣的指令,就可以了。這樣就提高了系統的擴充性。

4.Nand原理分析

Nand Flash是一個典型的序列槽通信的晶片,我們知道,總線的三大元素位址、指令、資料。先看一個NOR FLASH的原理圖:

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

上圖中,位址線,資料線,指令線,三者清清楚楚,再來看我們的NAND FLASH的原理圖,隻有8根Data線,大部分線都是NC,未連接配接狀态。

現在我們對照上面的Nand Flash的圖來分析一下:

1)Nand Flash原理圖上隻有8根線Data0-Data7,是典型的序列槽通信,因為隻有8根線,是以位址線、資料線肯定是複用的。

2)Nand Flash K9F2G08UOB容量為256M * 8bit,它的位址應該有28位,原理圖上隻有Data0-Data7,是以需要發出多次位址信号,下面是位址時序圖,A0-A28,一共要發送五次,每次發8bit。

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

3)Nand Flash不能像記憶體一樣直接讀寫,要先發指令,再發位址,再讀寫資料

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

很容易看出,我們要讀取資料,要用到Read指令,該指令需要2個周期,第一個周期發0x00,第二個周期發0x30。在這個過程,你發了一個指令,對方能否立刻變接收到,并做出反應呢,肯定不行,是以,這得需要一個維持時間,這樣才能保證你的資料的有效性。

Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)

4)CLE為高電平時,Data0-Data7發的是指令;

   ALE為高電平時,Data0-Data7發的是位址;

   CLE/ALE都為低電平時,Data0-Data7發的是資料,nWE,表示寫,nRE,表示讀。

繼續閱讀