從NOR FLASH 啓動和 從NAND Flash啓動過程

文章源自:http://tanatseng.blog.163.com/blog/static/1749916292010102233532911/

1.       首先應該先了解Flash ROM的種類

NOR FLASH地址線和數據線分開,來了地址和控制信號,數據就出來。

NAND Flash地址線和數據線在一起,需要用程序來控制,才能出數據。

通俗的說,只給地址不行,要先命令,再給地址,才能讀到NAND的數據,在一個總線完成的。結論是:ARM無法從NAND直接啓動。除非裝載完程序,才能使用NAND Flash

2.       Nand Flash的命令、地址、數據都通過I/O口發送,管腳複用,這樣做的好處是,可以明顯減少

NAND FLASH的管腳數目,將來如果設計者想將NAND FLASH更換爲更高密度、更大容量的,也不必改動電路板。在S3C2440中NANDFLASH的控制依靠NAND FLASH控制器。不能夠執行程序,本人總結其原因如下 :

a.       NAND FLASH本身是連接到了控制器上而不是系統總線上。CPU啓動後是要取指令執行的,如果是

SROM、NOR FLASH 等之類的,CPU 發個地址就可以取得指令並執行,NAND FLASH不行,因爲NAND FLASH 是管腳複用,它有自己的一套時序,這樣CPU無法取得可以執行的代碼,也就不能初始化系統了。
" w8 l, U3 R8 C' k9 f1 p# \b. NAND FLASH是順序存取設備,不能夠被隨機訪問,程序就不能夠分支或跳轉,這樣你如何去設計程序。

3.   在2440中爲什麼可以配置成從Nand Flash中啓動程序?
如果S3C2440被配置成從Nand Flash啓動, S3C2440的Nand Flash控制器有一個特殊的功能,在S3C2440上電後,Nand Flash控制器會自動的把Nand Flash上的前4K數據搬移到4K內部SRAM中,(此內部RAM被稱爲Steppingstone)並把0x00000000設置內部RAM的起始地址,CPU從內部RAM的0x00000000位置開始啓動。這個過程不需要程序干涉。程序員需要完成的工作,是把最核心的啓動程序放在Nand Flash的前4K中,也就是說,你需要編寫一個長度小於4K的引導程序,作用是將主程序拷貝到SDRAM中運行(NF地址不是線性的,程序不能直接運行,必須拷貝到線性RAM中???)。

4.   Samsung S3C2440支持Nor Flash和Nand Flash啓動,在TQ2440上可以通過跳線設置啓動方式。

主要由OM[1:0]這兩位來決定從何處啓動。具體含義如下:

OM[1:0]所決定的啓動方式

OM[1:0]=00時,處理器從NAND Flash啓動

OM[1:0]=01時,處理器從16位寬度的ROM啓動

OM[1:0]=10時,處理器從32位寬度的ROM啓動。

OM[1:0]=11時,處理器從Test Mode啓動。

Arm的啓動都是從0地址開始,所不同的是地址的映射不一樣。在arm開電的時候,要想讓arm知道以某種方式(地址映射方式)運行,不可能通過你寫的某段程序控制,因爲這時候你的程序還沒啓動,這時候arm會通過引腳的電平來判斷。
a.當引腳OM0跟OM1有一個是高電平時,這時地址0會映射到外部nGCS0片選的空間(Bank0),也就是Norflash,程序就會從Norflash中啓動,arm直接取Norflash中的指令運行。
b.當OM0跟OM1都爲低電平,則0地址內部bootbuf(一段4k的SRAM)開始。系統上電,arm會自動把NANDflash中的前4K內容考到bootbuf(也就是0地址),然後從0地址運行。這時NANDFlash中的前4K就是啓動代碼(他的功能就是初始化硬件然後在把NANDFlash中的代碼複製到RAM中,再把相應的指針指向該運行的地方)

5.啓動代碼應該做什麼?
9 O  d' G' b& T( C  M; [    由於Nand Flash控制器從Nand Flash中搬移到內部RAM的代碼是有限的,所以在啓動代碼的前4K裏,我們必須完成S3C2440的核心配置以及把啓動代碼(U-BOOT)剩餘部分搬到RAM中運行,至於將2440當做單片機玩裸跑程序的時候,就不要做這樣的事情,當代碼小於4K的時候,只要下到nand flash中就會被搬運到內部RAM中執行了。

bootloader在某種意義上來說即是一個啓動代碼,種類有很多(vivi uboot 等),但是功能上無非就是完成一些初始化。bootloader是芯片復位後進入操作系統之前執行的一段代碼,完成由硬件啓動到操作系統啓動的過渡,爲運行操作系統提供基本的運行環境,如初始化CPU、堆棧、初始化存儲器系統等,其功能類似於PC機的BIOS.

NOR FLASH AND NAND Flash - tanatseng - Tanatseng Blog

6.存儲控制器的作用  
在2440中分了8個bank,每個bank的基地址由nCGSx來選擇,每個bank都接外設之後,就可以通過存儲控制器來進行地址上的選擇了。每個bank與外設的連接方式不一樣,主要看外設是每次進行多少位的數據傳輸,如果是8位,這樣CPU的地址線A0就可以直接接外設的A0,如果是16位,那麼CPU的A1就該接到外設的A0,一次類推往後移位,具體原因見錯位原因。nor flash接在bank0,數據線爲16位。

OM0   0(GND) ------NAN   1(VDD) -------NOR

OM1   0(GND)  一直接地  那麼16bit

OM[3:2] = 00    決定了Main Clock Source 及 USB Clock Source 是來自crystal(晶振)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章