1. 程式人生 > >Linux驅動之Nand Flash原理及硬體操作

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

Nand Flash 是一個儲存晶片
那麼:這樣的操作很理“ 讀地址A的資料,把資料B寫到地址A”

問1:原理圖上的Nand Flash和SC2440之間只有資料線,怎麼傳輸地址?
 答:在Data0-Data7上既傳輸資料,又傳輸地址,當ALE為高電平時傳輸的是地址

問2:從Nand Flash晶片手冊可知,要操作Nand Flash需要先發出命令,怎麼傳入命令。
答:在Data0-Data7既傳輸資料,又傳輸地址,也傳輸命令
        當ALE為高電平時傳輸的是地址
       當CLE為高電平時傳輸的是命令
       當ALE和CLE為低電平時傳輸的是資料

問3:資料線既接到Nand Flash,也接到NOR Flash,還接到SDRAM等等,怎麼避免干擾?
答:這些裝置,要訪問之前必須選中
       沒有選中的晶片不會工作,相當於沒有接一樣

問4:假設燒寫Nand Flash,把命令、地址、資料發給它之後,Nand Flash肯定不可能瞬間完成燒寫的,怎麼判斷燒寫完成?
答:通過狀態引腳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原理硬體操作

Nand Flash 是一個儲存晶片 那麼:這樣的操作很理“ 讀地址A的資料,把資料B寫到地址A” 問1:原理圖上的Nand Flash和SC2440之間只有資料線,怎麼傳輸地址? 答:在Data0-Data7上既傳輸資料,又傳輸地址,當ALE為高電平時傳輸的是地址

linux 驅動——時間、延時延緩操作

一、jiffies 核心通過定時器中斷來跟蹤事件流。時鐘中斷由系統定時硬體以週期性的間隔產生,間隔值由核心根據HZ設定。 一般為HZ的範圍為50~1200。 jiffies_64為64位變數,在時鐘中斷沒發生一次時,值增加一,用來計數從系統引導到當前時

nandflash原理硬體操作

我們先看下nandflash的佈線 有data0 到data7 八根資料線 nandflash是個儲存晶片,那我提出請求:讀地址a的資料,把資料b寫到a地址上去 那麼我們看原理圖只看到data0-data7,沒有看到地址引腳,那怎麼把地址傳給我們的開發板 複用,這幾個引

linuxNAND FLASH驅動程式

NAND FLASH是一個儲存晶片 那麼: 這樣的操作很合理"讀地址A的資料,把資料B寫到地址A" 問1. 原理圖上NAND FLASH和S3C2440之間只有資料線, 怎麼傳輸地址? 答1.在DATA0~DATA7上既傳輸資料,又傳輸地址 當ALE為

linux驅動中斷處理過程匯編部分

ont .cn stub sta 拷貝 ror c函數 當前 main函數 linux系統下驅動中,中斷異常的處理過程,與裸機開發中斷處理過程非常類似。通過簡單的回顧裸機開發中斷處理部分,來參考學習linux系統下中斷處理流程。 一、ARM裸機開發中斷處理過程

linux驅動poll操作

node snippet 內存 ins 按鍵 服務 null head 隊列 POLL操作 1、POLL運行過程: poll是一個系統調用,其內核入口函數為sys_poll,sys_poll差點兒不做不論什麽處理直接調用do_sys_poll,do_sy

linux驅動設備號與創建設備節點

class size 為什麽 mod this 入口 font sys first 設備號: 1、自己主動分配 major = register_chrdev(0,"first_drv",&first_sdv_fops);//註冊 註冊設備時給設備號寫0,則內核

Linux學習路-集群LVS(2)【25】---20180217

ipvs 靜態 動態算法 一、ipvs scheduleripvs scheduler:根據其調度時是否考慮各RS當前的負載狀態有兩種方法:靜態方法和動態方法1、靜態方法僅根據算法本身進行調度1、RR:roundrobin,輪詢2、WRR:Weighted RR,加權輪詢3、SH:Source H

Linux驅動PCI

決定 熱插拔 需要 相關 bio 讀寫 優先級 pro ice <背景> PCI設備有許多地址配置的寄存器,初始化時這寄存器來配置設備的總線地址,配置好後CPU就可以訪問該設備的各項資源了。(提煉:配置總線地址) <配置寄存器> (1)256

SCMGit的工作原理常規操作

AD 兩個 rem git png workspace 語言 原理 狀態 在現在的軟件構造過程中,SCM的使用必不可少,現在比較常用的就應該屬於git及github。接下來我們就要介紹一下有關git 的工作原理。 首先,git的區域可分為workspace(工作目錄也就是本

Linux驅動同步、互斥、阻塞的應用

desc argc 重映射 create 操作 fir 休眠 col type 同步、互斥、阻塞的概念: 同步:在並發程序設計中,各進程對公共變量的訪問必須加以制約,這種制約稱為同步。 互斥機制:訪問共享資源的代碼區叫做臨界區,這裏的共享資源可能被多個線程需要,但這些共享資

Linux驅動定時器在按鍵去抖中的應用

arc div 測試 完整 esc arm 是否 reg blog 機械按鍵在按下的過程中會出現抖動的情況,如下圖,這樣就會導致本來按下一次按鍵的過程會出現多次中斷,導致判斷出錯。在按鍵驅動程序中我們可以這麽做: 在按鍵驅動程序中我們可以這麽做來取消按鍵抖動的影響:當出現

Linux驅動輸入子系統簡析

ans 沒有 procfs 通過 sel spa 函數 minor ifdef 輸入子系統由驅動層、輸入子系統核心、事件處理層三部分組成。一個輸入事件,如鼠標移動、鍵盤按下等通過Driver->Inputcore->Event handler->users

Linux驅動平臺設備驅動模型簡析(驅動分離分層概念的建立)

技術 描述 rst 操作 mem iou 系統 簡單 reg Linux設備模型的目的:為內核建立一個統一的設備模型,從而有一個對系統結構的一般性抽象描述。換句話說,Linux設備模型提取了設備操作的共同屬性,進行抽象,並將這部分共同的屬性在內核中實現,而為需要新添加設備

Linux驅動觸摸屏程序編寫

kcon ech 驅動 sin gpl 制作 變量 touch nom 本篇博客分以下幾部分講解 1、介紹電阻式觸摸屏的原理 2、介紹觸摸屏驅動的框架(輸入子系統) 3、介紹程序用到的結構體 4、介紹程序用到的函數 5、編寫程序 6、測試程序 1、介紹電阻式觸摸屏的原理

Vue 進階系列(三)Render函式原理實現

Vue進階系列彙總如下,歡迎閱讀,歡迎加高階前端進階群一起學習(文末)。 Vue 進階系列(一)之響應式原理及實現 Vue 進階系列(二)之外掛原理及實現 Render函式原理 根據第一篇文章介紹的響應式原理,如下圖所示。 在初始化階段,本質上發生在auto run函式中,然後通過r

十三、Linux驅動觸控式螢幕驅動

1. 基本概念     常用的觸控式螢幕型別有兩種:阻性觸控式螢幕和容性觸控式螢幕。阻性觸控式螢幕是一種感測器,它將矩形區域中觸控點(X, Y)的物理位置轉換為代表X座標和Y座標的電壓。觸控式螢幕包含上下疊合的兩個透明層阻性材料,中間由一種彈性材料隔開。當觸控式螢幕

十二、Linux驅動LCD驅動

1. 基本概念     LCD是Liquid Crystal Display的簡稱,也就是經常所說的液晶顯示器。LCD能夠支援彩色影象的顯示和視訊的播放,是一種非常重要的輸出裝置。如果我們的系統要用GUI(圖形介面介面),比如minigui,MicroWindows

十一、Linux驅動platform匯流排裝置驅動

1. 基本概念     從Linux2.6開始Linux加入了一套驅動管理和註冊機制—platform平臺匯流排驅動模型。platform平臺匯流排是一條虛擬匯流排,platform_device為相應的裝置,platform_driver為相應的驅動。與傳統的bu

機器學習線性迴歸原理sklearn實現

  1、線性迴歸問題        以房價預測為例,佔地面積為變數x1,房屋年齡為變數x2,房屋價格為預測變數y。        為什麼叫線性迴歸問題,因為目標函式是一個線性迴歸函式。什麼是目標函式?        (1)、目標函式:目標函式是我們需要的最終結果,及