Linux驅動之Nand Flash原理及硬體操作

2021-08-02 14:27:39 字數 3323 閱讀 7021

nand flash 是乙個儲存晶元

問2:從nand flash晶元手冊可知,要操作nand flash需要先發出命令,怎麼傳入命令。

當ale為高電平時傳輸的是位址

當cle為高電平時傳輸的是命令

當ale和cle為低電平時傳輸的是資料

問3:資料線既接到nand flash,也接到nor flash,還接到sdram等等,怎麼避免干擾?

答:這些裝置,要訪問之前必須選中

沒有選中的晶元不會工作,相當於沒有接一樣

答:通過狀態引腳rnb來判斷:它為高電平表示就緒,它為低電平正忙。

怎麼操作nand flash呢?

答:根據nand flash的晶元手冊,一般的過程是:

發出命令

發出位址

讀寫資料

以上操作可以從時序圖上得到

我們先看下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資料命令如下

跟上面的輸出是一樣的 

讓LINUX核心支援大容量NAND Flash

由於嵌入式控制系統使用了1gb容量的nand flash,因此採用了較新版本的u boot 1.3.4。而相對於早期uboot版本只能支援到512位元組的頁面大小,u boot 1.3.4可支援大頁面nand flash。u boot 1.3.4中對nand flash的支援有兩套 drivers ...

linux驅動之 led驅動

練手,第乙個字元驅動.用模組載入方法 華清遠見 嵌入式linux裝置驅動開發詳解 的 拿來改的.編譯過程發現很多錯誤.最後發現 這本書帶的驅動 都是基於linux2.4的.目前我用的linux2.6,部分需要做修改.我的板子是 友善之臂的 2410.vmware ubuntu nfs交叉編譯 首先 ...

linux驅動之塊裝置驅動

塊裝置驅動的系統架構 塊裝置註冊過程 1,註冊裝置塊驅動程式 register blkdev 2,初始化請求佇列 blk init queue 3,指明扇區的大小 blk queue logical block size dev queue,sect size 4,申請乙個gendisk結構,初始化...