嵌入式學習之Nand Flash

2022-05-02 11:45:12 字數 2057 閱讀 3067

**

nand flash是flash儲存器的一種,其內部採用非線性巨集單元模式,為固態大容量記憶體的實現提供了廉價有效的解決方案。nand flash儲存器具有容量較大,改寫速度快等優點,適用於大量資料的儲存,因而在業界得到了越來越廣泛的應用,如嵌入式產品中包括數位相機、***隨身聽 記憶卡、體積小巧的u盤等。nand型快閃儲存器以塊為單位進行擦除操作。快閃儲存器的寫入操作必須在空白區域進行,如果目標區域已經有資料,必須先擦除後寫入,因此 擦除操作是快閃儲存器的基本操作。

s3c2410的nand flash控制器有乙個特殊的功能,在s3c2410上電後,nandflash控制器會自動的把nand flash上的前4k資料搬移到4k內部sram中,並把0x00000000設定內部sram的起始位址,cpu從內部sram的0x00000000 位置開始啟動。這個過程不需要程式干涉。

程式設計師需要完成的工作,是把最核心的啟動程式放在nand flash的前4k中。

啟動程式的安排

由於nand flash控制器從nandflash中搬移到內部sram的**是有限的,所以在啟動**的前4k裡,我們必須完成s3c2410的核心配置以及把啟動**(u-boot)剩餘部分搬到sdram中執行。

u-boot原始碼不支援從nand flash啟動,可是s3c2410支援從nand flash啟動,開發板(sbc-2410x)加電後s3c2410將nand flash的前4k(儲存有u-boot的部分功能--拷貝功能--把nand flash中的內容拷貝到sdram)拷貝到sram(s3c2410晶元內的sram)。這就需要修改u-boot原始碼,增加u-boot的功能: 使u-boot在得到執行權後能夠將其自身拷貝到開發板上sdram中,以便處理器能夠執行u-boot。

* nor flash位址線和資料線分開,來了位址和控制訊號,資料就出來。

*nand flash位址線和資料線在一起,需要用程式來控制,才能出資料。通俗的說,就是光給位址不行,要先命令,再給位址,才能讀到nand的資料。而且都是在乙個匯流排完成的。

nand flash的命令、位址、資料都通過i/o口傳送,管腳復用,這樣做做的好處是,可以明顯減少nand flash的管腳數目,將來如果設計者想將nand flash更換為更高密度、更大容量的,也不必改動電路板。

nand flash不能夠執行程式,本人總結其原因如下 :

1. nand flash本身是連線到了控制器上而不是系統匯流排上。cpu啟動後是要取指令執行的,如果是srom、nor flash 等之類的,cpu 發個位址就可以取得指令並執行,nand flash不行,因為nand flash 是管腳復用,它有自己的一套時序,這樣cpu無法取得可以執行的**,也就不能初始化系統了。

2. nand flash是順序訪問裝置,不能夠被隨機訪問,程式就不能夠分支或跳轉,這樣你如何去設計程式。

nand flash啟動**和流程的分析

(1)配置dma控制器的4個暫存器,通道使能後,等待flash發出的搬運請求;

(2)配置nand flash控制器的3個暫存器,選擇適合的位址、時序引數與所用的flash晶元吻合;

(3)分別在r8~r11中放入程式需要的備用值;

(4)將需要在sdram中執行的4條指令搬入sdram 0x30000000處;

(5)執行nop指令,nop指令用於填充一頁nandflash中的剩餘空間;

(6)執行在頁末的指令,將pc指標指向sdram的0x30000000處;

(7) 執行sdram 中的指令,首先啟動nandflash 的資料傳輸,將程式搬往sdram 的0x30001000 處。其次執行乙個迴圈語句,等待第一頁的程式搬完,之後將pc 指標指向0x30001000 處,啟動程式從0x30001000 處正式開始執行。

嵌入式學習

1 c 語言 第二版譚浩強。2 資料結構 c語言版。3 實用 c 程式設計 4 學習51 微控制器,加深對中斷的理解。5 學習 arm微控制器。1 細讀 arm微控制器基礎與實戰 周立功編寫。2 細讀相關晶元的原版英文文件。如 arm920te.pdf s3c2410 1.2.pdf。6 學習uco...

嵌入式學習

一 學什麼?嵌入式linux 所涵蓋的知識面很廣,需要按步驟 不間斷的努力深入學習,才能有所成就。學習嵌入式 linux 需要學習如下 5大知識 按照學習步驟 1.嵌入式處理器 arm 與邏輯程式開發 2.linux系統管理 3.linux應用程式開發 4.linux驅動程式開發 5.linux核心...

嵌入式學習

嵌入式系統開發學習如何起步 如何深入?學習步驟如下 1 linux 基礎 安裝linux作業系統 linux檔案系統 linux常用命令 linux啟動過程詳解 熟悉linux服務能夠獨立安裝linux作業系統 能夠熟練使用linux系統的基本命令 認識linux系統的常用服務安裝linux作業系統...