1. 程式人生 > >嵌入式Linux——nor flash (1):硬體介紹

嵌入式Linux——nor flash (1):硬體介紹

宣告:本文章是學完韋東山老師的教學視訊後看過一些文章後所寫,在看文章時我會將一些可能重要的知識點複製下來,所以可能會抄到您文章中的一些內容,如果您有什麼意見,請同我講出我會修改或刪除。而如果這篇文章對您有幫助,那是我的榮幸。同時我看到網上有一些很好的寫nor驅動的文章,但是我發現這些文章中對於nor的硬體描述以及nor與開發板的聯絡上並不是說的十分清楚,所以我想借這篇文章說一些關於硬體的事。

    下面我們言歸正傳說晶片,我用的這款nor晶片為MX29LV160D,而下面是一些他的基礎特徵:

•Byte/Word mode switchable(支援byte/Word兩種模式

-2,097,152 x8 / 1,048,576 x16 (2M*8bit /1M*16bit

):文字使用的是1M*16bit,後面會在原理圖上說明。

支援電壓

- Vcc2.7 to 3.6 volt for read, erase, and program operations

•Support Common Flash Interface (CFI) (支援CFI

•Ready/Busy# (RY/BY#) Output 

-Provides a hardware method of detecting program and erase operation completion (提供硬體檢測編碼或擦除)

•Hardware Reset (RESET#) Input

-Provides a hardware method to reset the internal state machine to read mode(提供硬體重啟)

Thememory array is divided into 32 equal 64 Kilo byte blocks分成了32塊64Kbit的塊

Thesoftware algorithm used for this device also adheres to the JEDEC standard forsingle power supply devices.軟體演算法支援jedec標準

而下面我們介紹硬體的引腳圖

,並對引腳進行說明:

符號

引腳名

A0~A19

地址引腳

Q0~Q14

資料引腳

Q15/A-1

Q15Word模式:兩位元組模式)/LSB 地址(Byte模式:單位元組模式)

CE#

(片選輸入使能)

WE#

寫輸入使能

BYTE#

Word/Byte 選擇輸入

RESET#

硬體重啟引腳/扇區保護不鎖定

OE#

輸出使能

RY/BY#

就緒/輸出

VCC

電源正極(2.7V~3.6V)

GND

電源地

WP#/ACC

硬體防寫/加速引腳

NC

不連線

注意:如果使用者不需要WP#/ACC(硬體防寫/加速引腳)功能,請將這個引腳接到電源正極或者讓他懸空。當WP#/ACC(硬體防寫/加速引腳)懸空時,其內部有一個上拉到Vih的電阻。

而該nor晶片與S3C2440的接線圖為:

看完這個接線圖可能會有讀者會問:為什麼S3C2440的地址1引腳與nor晶片的地址0相連,地址1和地址2相連。。。。以此下去S3C2440的地址20和nor晶片的地址19相連?

要回答這個問題我們就要從S3C2440的資料傳輸結構講起,S3C2440是以byte(8bit)為單位來傳輸資料的。而我們可以看到上圖中nor晶片是以16bit(2byte)的形式傳遞資料的,這樣就造成S3C2440所傳遞的地址0和地址1的值對應於nor中地址0的值,而S3C2440所傳遞的地址2和地址3的值對應於nor中地址1的值,這樣就造成S3C2440的地址<<1 = nor地址中的值。所以就造成S3C2440中地址0不去接,而直接用地址1接nor的地址0. 

或者我引用我在網上看到的一個很好的解釋:為什麼Nor Flash的地址線A0是接在2440LADDR1?

因為NorFlash的資料共有16,也就是每個地址儲存了2B資料,而我們的2440每個地址是儲存的1B資料,

比如:

2440訪問0X00地址時,就會讀取到Nor0地址的2B資料,然後2440的記憶體控制器會根據0x00來找到低8位位元組,並返回給CPU,

2440訪問0x01地址時,由於2440LADDR0線未接,所以還是訪問Nor0地址上的2B資料,然後記憶體控制器會根據0x01來找到高8位位元組,並返回給CPU

不過上面的介紹您是否看到懂,但是在S3C2440手冊中對於16位ROM裝置的接線他是有介紹的:

手冊規定16位ROM就應該這樣接。如果您實在理解不了,您只要記住就好了。

而對於問題:為什麼我們的地址線是從A0到A19一共有20條?

    那是因為我們的晶片的大小為1M*16,而1M=2^20,所以通過20條地址線加16條資料線我們就可以訪問到晶片的任何位置的資料了。

2440中是通過硬體開關來設定OM0為Nand啟動還是Nor啟動,如下圖所示:

通過上面兩幅電路圖我們知道OM1是一直接地的,所以:

對於nand啟動:OM0接地,nand flash的開始4KB會自動地被載入到2440內建的SRAM的“steppingstone”,就可以直接讀寫

對於nor啟動:OM0接高,2440訪問的記憶體就是nor flash,可以直接讀,但是不能直接寫

像上面說的那樣nor是一種ROM可以像記憶體一樣直接通過地址讀資料,卻不能隨便的寫,而要想對nor進行讀寫就要通過特殊的命令了。下面是命令表

本晶片為MX29LV160DT:所以裝置ID為: 22C4

同時由於本晶片支援CFI,所以我們可以通過查詢CFI獲得裝置的操作特徵,架構,以及供應商特有的資訊如:ID資訊,記憶體大小,byte/word設定,操作電壓和這個裝置的時間資訊。而CFI對應的命令為:

我們後面的驅動程式會講到通過查詢CFI獲得的晶片資訊來確定晶片的驅動。當然這都是後話了。我們講完CFI我們就應該講一下我們讀寫晶片時所涉及到的時序問題了:

下面我們先講寫命令時序圖

為了寫一個命令到裝置中,系統要將WE#和CE#設為低電平,而OE#設為高電平。在一個命令週期中,當CE#和WE#的最後一個下降沿時所有的地址值被鎖存,而當CE#和WE#的第一個上升沿時所有的資料被鎖存。

接下來我們講:讀資料

在儲存裝置上電或者重啟後他會自動進入讀序列狀態。如果微控制器想要讀儲存在序列中的資料,他必須將CE#(裝置片選引腳)和OE#(輸出控制引腳)設為低電平,同時輸入想要讀的資料的地址。經過一段時間的讀週期後,想要被讀的值就顯示到輸出引腳,來供微處理器讀取。如果CE#或者OE#被設為高,輸出的將是tri態,同時在輸出引腳將沒有資料展現。

當儲存裝置完成嵌入式操作後(自動擦除或者程式設計),他將自動切換到讀序列狀態,這時,裝置的任何地址的資料都可以被讀取。而如果裝置在擦除操作時收到了擦除懸掛的命令後,擦除操作將要暫停,但暫停時間不會超過Tready1,暫停的這段時間之後,裝置將會自動回到讀序列狀態。這個時候,可以讀儲存在裝置中的任意地址的資料,除了被擦除的扇區中。在擦除懸掛這段期間,如果使用者想要讀取儲存在被擦除扇區中的資料,裝置將輸出狀態值到輸出端。相似的,在擦除懸掛期間如果發出編碼命令後,編碼完成後,系統同樣可以讀裝置任何地方的值,除了被擦除的地方。

在以下兩種情況下可以傳送重啟命令以讀取資料:

1. 在編碼或者擦除操作時,編碼或者擦除錯誤而造成Q5為高時。

2. 裝置在自動選擇模式或者CFI模式時。

而現在我們通過2440開發板的uboot來體驗一下nor的操作,好讓我們對nor有更清楚的認識(使用前開發板設為nor啟動進入uboot)。

而在操作前先介紹一下要用到的uboot中的命令:

md(memory display)[.b(byte) .w(word) .long(4byte)]  [地址]  (次數)   

mw(memory write) [.b(byte) .w(word) .long(4byte)]  [地址]   [資料]     

,其中"[]"中的內容為必填項,而“()”中的內容為選填項

1. 讀資料  
md.b 0  1  //讀0地址一位元組, 讀一次
  

2. 讀ID 

NOR手冊上:  
往地址555H寫AAH  
往地址2AAH寫55H  
往地址555H寫90H  
讀0地址得到廠家ID: C2H  
讀1地址得到裝置ID: 22DAH或225BH  
退出讀ID狀態: 給任意地址寫F0H  
  
UBOOT的操作  (2440的A1接到NOR的A0,所以2440發出(555h<<1), NOR才能收到555h這個地址  ):
往地址AAAH寫AAH                      mw.w aaa aa  
往地址554寫55H                       mw.w 554 55  
往地址AAAH寫90H                      mw.w aaa 90  
讀0地址得到廠家ID: C2H               md.w 0 1  
讀2地址得到裝置ID: 22DAH或225BH      md.w 2 1  
退出讀ID狀態:                        mw.w 0 f0  
  
3. NOR有兩種規範, jedec, cfi(common flash interface)  
   讀取CFI資訊  

  
NOR手冊:     
進入CFI模式    往55H寫入98H  
讀資料:            讀10H得到0051  
                       讀11H得到0052  
                       讀12H得到0059  
                       讀27H得到容量  
  
UBOOT的操作
進入CFI模式    往AAH寫入98H            mw.w aa 98  
讀資料:            讀20H得到0051           md.w 20 1  
                       讀22H得到0052           md.w 22 1  
                       讀24H得到0059           md.w 24 1  
                       讀4EH得到容量           md.w 4e 1  
                       退出CFI模式             mw.w 0 f0  
  

4. 寫資料: 在地址0x100000寫入0x1234  

直接寫:

md.w 100000 1     // 得到ffff  
mw.w 100000 1234  
md.w 100000 1     // 還是ffff  
  
NOR手冊:  
往地址555H寫AAH   
往地址2AAH寫55H   
往地址555H寫A0H   
往地址PA寫PD  
  
UBOOT的操作  
往地址AAAH寫AAH               mw.w aaa aa  
往地址554H寫55H               mw.w 554 55  
往地址AAAH寫A0H               mw.w aaa a0  
往地址0x100000寫1234h         mw.w 100000 1234  

上面就是我所介紹的nor硬體的全部,而關於下節我會介紹nor中的驅動層次。

相關推薦

嵌入式Linux——nor flash 1硬體介紹

宣告:本文章是學完韋東山老師的教學視訊後看過一些文章後所寫,在看文章時我會將一些可能重要的知識點複製下來,所以可能會抄到您文章中的一些內容,如果您有什麼意見,請同我講出我會修改或刪除。而如果這篇文章對您有幫助,那是我的榮幸。同時我看到網上有一些很好的寫nor驅動的文章,但是我

嵌入式Linux——nand flash 驅動開發硬體介紹

本文章講nand flash的驅動開發,而在介紹驅動程式之前我想先介紹一下我所用的硬體。這樣對程式的開發更為方便。本文所使用的nand flash晶片為K9F2G08U0C,下面是他的一些必要的特性:

linux學習筆記1linux基礎知識

1.linux是什麼? Linux這個詞本身只表示Linux核心,但實際上人們已經習慣了用Linux來形容整個基於Linux核心,並且使用GNU 工程各種工具和資料庫的作業系統。 2. 什麼是shell 保護系統核心並對外提供操作介面的軟體 在linux中預設的

Linux實用指令1執行級別&找回密碼&幫助指令&檔案目錄類

指令執行級別: 0 :關機 1 :單使用者【找回丟失密碼】 2:多使用者狀態沒有網路服務 3:多使用者狀態有網路服務 4:系統未使用保留給使用者 5:圖形介面 6:系統重啟 常用執行級別是3和5 ,要修改預設的執行級別可改檔案 /etc/inittab的id:5:initdefault:這一行中的數字 命令

嵌入式Linux——IIC驅動2i2c驅動框架分析

簡介:         本文主要介紹i2c匯流排框架,即對i2c的各個層次(i2c匯流排,i2c核心,i2c裝置)進行分析。同時我也會結合程式對框架進行說明。所以本文將分為兩部分,第一部分對i2c的框架進行介紹,而第二部分就是結合程式碼分析。 核心:linux-2.6.2

嵌入式Linux學習筆記1

一、基本概念 1、檔案系統:對計算機資料的分類儲存。 2、檔案和目錄:對資料的一種分類。 3、/:(1)作根目錄名(處於開頭);(2)作分割符(不在開頭)。 4、路徑: (1)絕對路徑:從”/”目錄出發的路徑;如:/home/linux/截圖軟體。

Linux網路程式設計1如何使用"unp.h"

俗話說萬事開頭難,學習新知識也是如此,當我們下定決心要實現UNP中的例子時,發現卻無法將程式部署上去,這種感覺是不是很令人沮喪?本文就是用來給我自己這種linux菜鳥掃盲用的。 首先,UNP的原始碼連結為 點選開啟連結,下載完成後使用tar -zxvf命令進行解壓。 $

Asp.Net MVC4入門指南1 入門介紹

前言 本教程將為您講解使用微軟的Visual Studio Express 2012或Visual Web Developer 2010 Express Service Pack 1 來建立一個ASP.NET MVC4 Web應用程式所需要的基礎知識。建議您使用Visual Studio 2012,你將不再

負載均衡演算法1簡單介紹

負載均衡(Load Balance)是分散式系統架構設計中必須考慮的因素之一,它通常是指,將請求/資料【均勻】分攤到多個操作單元上執行,負載均衡的關鍵在於【均勻】。常見網際網路分散式架構如上,分為客戶端層、反向代理nginx層、站點層、服務層、資料層。 什麼是負載均衡 負

Matplotlib資料視覺化1入門介紹

  1 matplot入門指南¶ matplotlib是Python科學計算中使用最多的一個視覺化庫,功能豐富,提供了非常多的視覺化方案,基本能夠滿足各種場景下的資料視覺化需求。但功能豐富從另一方面來說也意味著概念、方法、引數繁多,讓許多新手望而卻步。 據我瞭解,大部分人在對m

嵌入式Linux——網絡卡驅動1網絡卡驅動框架介紹

宣告:文字是看完韋東山老師的視訊和看了一些文章後,所寫的總結。我會盡力將自己所瞭解的知識寫出來,但由於自己感覺並沒有學的很好,所以文中可能有錯的地方敬請指出,謝謝。         在介紹本文之前,我想先對前面的知識做一下總結,我們知道Linux系統的裝置分為字元裝置(ch

每天一個linux命令1scp 命令

filename use des 本地文件 lin oca www tro 服務器 scp命令主要用於兩個服務器之間文件的傳輸。 1、從服務器下載文件 scp [email protected]:/path/filename /tmp/local_destin

Linux學習並不難》用戶管理1Linux用戶賬戶分類

Linux 用戶 9.1 《Linux學習並不難》用戶管理(1):Linux用戶賬戶分類用戶賬戶在Linux系統中是分角色的,由於角色不同,每個用戶的權限和所能執行的工作任務也不同。在實際的管理中,用戶的角色是通過UID(用戶ID號)來標識的,每個用戶的UID都是不同的。 在Linux系統中有三大類

Linux學習並不難》文件系統管理1xfs文件系統介紹

Linux xfs 文件系統 18.1 《Linux學習並不難》文件系統管理(1):xfs文件系統介紹xfs是一種高性能的64位日誌文件系統,由Silicon Graphics在1993年為IRIX操作系統開發。2000年5月,以GNU通用公共許可證發布這套文件系統的源代碼,之後被移植到Linu

Linux學習並不難》Linux常用操作命令1 cat命令顯示文本文件內容

Linux cat 8.1 《Linux學習並不難》Linux常用操作命令(1): cat命令顯示文本文件內容使用cat命令可以顯示文本文件的內容,也可以把幾個文件內容附加到另一個文件中。如果沒有指定文件,或者文件為“-”,那麽就從標準輸入讀取。命令語法:cat [選項] [文件]命令中各選項的含義

標號2python(就業階段)——Linux系統命令1——《高階Linux命令及命令選項的使用》

一、高階Linux命令及命令選項的使用 <1>重定向命令:> Linux允許將命令執行結果重定向到一個檔案,本應顯示在終端上的內容儲存到指定檔案中。 1、ls >> test.txt 輸出重定向則會追加到檔案的尾部。 2、ls > test.t

Linux套接字與虛擬檔案系統1初始化和建立

引言    在Unix的世界裡,萬物皆檔案,通過虛擬檔案系統VFS,程式可以用標準的Unix系統呼叫對不同的檔案系統,甚至不同介質上的檔案系統進行讀寫操作。對於網路套接字socket也是如此,除了專屬的Berkeley Sockets API,還支援一些標準的檔案IO系統呼叫如read(v)、w

linux核心中的GPIO系統之1軟體框架

一、前言作為一個工作多年的系統工程師,免不了做兩件事情:培訓新員工和給新員工分配任務。對於那些剛剛從學校出來的學生,一般在開始的時候總是分配一些非常簡單的任務,例如GPIO driver、LED driver。往往CPU datasheet的關於GPIO或者IO ports的

linux下C語言程式設計日誌1基於TCP協議的伺服器/客戶端程式

  基於TCP協議的伺服器/客戶端程式  首先我們看一下使用TCP協議進行網路通訊的程式基本模型:伺服器首先進行初始化操作:呼叫函式socket建立一個套接字,函式bind將這個套接字與伺服器的公認地址繫結在一起,函式listen將這個套接字換成傾聽套接字,然後呼叫函式acc

Java在linux系統的部署1 系統環境的安裝——redhat5.4的安裝圖解

最近要在linux環境上部署公司的java程式進行測試,為了方便以後的學習,從今天開始準備把linux系統安裝、oracle11g的安裝,java程式的部署這些關鍵的步驟都記錄下來。 1、 虛擬機器:VartualBox4.3.12 Linux版本:rhel-server-