1. 程式人生 > >nandflash原理及硬體操作

nandflash原理及硬體操作

我們先看下nandflash的佈線


有data0 到data7 八根資料線

nandflash是個儲存晶片,那我提出請求:讀地址a的資料,把資料b寫到a地址上去

那麼我們看原理圖只看到data0-data7,沒有看到地址引腳,那怎麼把地址傳給我們的開發板

複用,這幾個引腳即傳資料也傳地址

怎麼分別是資料還是地址呢,有個ALE訊號,當ALE是高電平時,傳輸的是地址

但是它不僅只傳輸地址和資料,還傳輸命令,在nand flash晶片手冊可知,要操作nandflash要先發出命令,只有八條資料線,怎麼傳輸命令呢???

當CLE為高電平的時候傳輸的就是命令,當ALE和CLE都為低電平的時候傳輸的是資料。

這個data0 有的開發板不僅僅只接nandflash,還有的接norflash等等非常多的地方

資料線 地址線等即接到nandflash,也接到norflash,還接到sdram,DM9000等等。怎麼避免干擾,比如說我訪問nandflash的時候,norflash就不要給我提供資料

你就要相當與沒接一樣,怎麼避免干擾呢???

就是通過這些裝置要訪問之前,必須選中,什麼叫選中呢,他們都有片選訊號,就要我們的片選引腳變為低電平選中,就是cs引腳,沒有選中的晶片不會工作,相當於沒接一樣

假設燒寫nandflash,把資料、命令、地址發給他之後,nandflash肯定是不可能瞬間完成的,怎麼判斷燒寫完成,通過狀態引腳RnB來判斷,它為高電平表示完成就緒。為低電平表示正忙

we和re就是讀寫訊號..

怎麼操作nandflash

根據nandflash的晶片手冊,一般過程是:發出命令,發出地址,讀寫資料。

nandflash的命令表格如下


我們往下看,拿個例子來看,讀ID這個例子的時序圖


每個nandflash都會內嵌ID,比如廠家ID啊等等。

時序圖 橫軸是時間,時序圖怎麼看呢 ,從左往右看。縱向方向就是一列一列 來看

然後可以看到發出命令 90,怎麼知道的 ,在資料線上發出90這個值,怎麼知道它是命令的,就是CLE是高電平。然後給它一個寫脈衝。這個寫訊號的上升沿nandflash就會把資料存進來,它就知道了我是一個命令。

然後接著發出一個0地址,然後就可以讀資料了

對於我們晶片來說裡面集成了一個nandflash控制器,內部接線。它幫我們簡化了這些操作,

nandflash 晶片(rus5pv210)

選中晶片

發命令的操作CLE變為高電平把命令值寫到NFCMD暫存器裡就可以了

在data0-data7輸出命令值

提供一個寫脈衝

選中晶片

發地址ALE輸出高電平

在data0-data7輸出地址值把地址寫入NFADDR暫存器裡就可以了

提供一個寫脈衝

選中晶片

發資料ALE,CLE輸出低電平

在data0-data7輸出資料的值把地址寫入NFDATA暫存器裡就可以了

提供一個寫脈衝

選中晶片

讀資料發出一個讀脈衝

讀data0-data7的資料

我們可以用uboot體驗nandflash的操作

1.讀ID,時序圖在上面

選中

發出0x90命令

發出地址0x00

讀第一個資料會得到0xEC

讀第二個資料得到device code

選中的話晶片手冊的nand flash章節 可以知道


選為0為選中

發出命令就是把命令寫到下面這個暫存器裡面去


同理 地址和資料也是一樣暫存器如下



但是在uboot裡面怎麼操作呢

uboot裡面有命令可以讀記憶體的

md.w 0xB0E0_0004 1 這命令表示讀 0xb0e00004 讀一次

mw.w 是寫命令


md 記憶體顯示 b是以位元組為單位,w是以2字為單位,l是以四位元組為單位


讀ID命令流程如圖


讀出dc

我們驗證一下  nandflash裡面讀ID下面就有這張圖 


結束讀ID的命令 就是NFCMD 暫存器等於0xff 就是命令的reset

2.讀資料

我們可以根據uboot的nand dump 0命令讀取0地址的資料


我們來一下nandflash讀操作的時序圖


為什麼中間有五個地址

看容量

讀00資料命令如下


跟上面的輸出是一樣的