Norflash和Nandflash啓動區別

原文地址: Norflash和Nandflash啓動區別


S3C2440啓動時讀取的第一條指令是在0x00000000地址上的,分爲Nand Flash與Nor Flash兩種啓動方式。

S3C2440總共有8個內存banks:
  6個內存bank可以當作ROM或者SRAM來使用;
  留下的2個bank除了當作ROM 或者SRAM,還可以用SDRAM(各種內存的讀寫方式不一樣);
  7個bank的起始地址是固定的,還有一個靈活的bank的內存地址,並且bank大小也可以改變。


一.Nand Flash:是I/O設備,數據線、地址線和控制線複用,需要軟件控制讀取。CPU不能隨機訪問,訪問的時候是按頁(512B)讀取,不能運行程序,不能直接從Nand Flash啓動。

二.Nor Flash:有自己的地址線和控制線,CPU可以隨機訪問,可以運行程序。


1.在Nor Flash啓動的時候

片選0(SROM nGCS0)中存放的是2M的Nor Flash,片選6中存放的是內存,內存的起始地址是片選6的起始地址(0x3000_0000)。 代碼直接在Nor Flash上執行,無需複製到內存中。這是由於NOR Flash的接口與RAM完全相同,可隨機訪問任意地址數據。Nor flash速度快,數據不易失,可作爲存儲並執行起到代碼和應用程序的存儲器,Nor flash可像內存一樣讀操作,但擦初和寫操作效率很低,遠不及內存,一般先在代碼的開始部分使用匯編指令初始化外接的的內存部件(外存SDRAM),最後跳到外存中繼續執行。對於小程序一般把它燒到NAND flash中,藉助CPU內部RAM(SRAM)直接運行。
Nor flash被映射到0x00000000地址(就是nGCS0,這裏就不需要片內SRAM來輔助了,所以片內SRAM的起始地址還是0x40000000). 然後CPU從0x00000000開始執行(也就是在Nor falsh中執行)。


2.在Nand Flash啓動的時候

內部的4K字節的BootSram被映射到片選0(SROM nGCS0)。Nand Flash控制器自動把nand flash存儲器的前4K載到Steppingstone(內部SRAM緩衝器,大小隻有4K),並把0x00000000設置爲內部SRAM的起始地址,CPU從內部SRAM的0x00000000開始啓動,這個過程不需要程序干涉。(cpu會自動從Nand  flash中讀取前4KB的數據放置在片內SRAM裏(s3c2440是soc),同時把這段片內SRAM映射到nGCS0片選的空間(即0x00000000)。cpu是從0x00000000開始執行,也就是Nand flash裏的前4KB內容。因爲Nand Flash連地址線都沒有,不能直接把Nand 映射到0x00000000,只好使用片內SRAM做一個載體。通過這個載體把Nand flash中大代碼複製到RAM(一般是SDRAM)中去執行)。 
程序員要完成的工作是把最核心的代碼放在nand flash的前4K中。4K代碼要完成S3C2440的核心配置以及將啓動代碼(U-boot)的剩餘部分拷貝到SDRAM中。
這4K的啓動代碼需要將Nand Flash中的內容複製到SDRAM中執行。Nand Flash的前4K空間放啓動代碼,SDRAM速度較快,用來執行主程序的代碼。ARM一般從ROM或Flash啓動完成初始化,然後將應用程序拷貝到RAM,然後跳到RAM執行。

=========================================================我是分割線==================================================================

這裏我原先提出一個問題,就是norflash初始化。

 我原以爲norflash和nandflash類似,需要進行初始化,纔可以使用。於是就非常迷惑,norflash既當ram,又可以直接從0x0000 0000 地址運行。這初始化代碼究竟在放在哪裏? 難道是映射在0x4000 0000 的內部ram?

 答案是錯誤的。

這裏總結如下:

1. norflash 有自己的地址線和控制線,CPU可以隨機訪問,可以運行程序。這就決定了,它是可以直接如內部ram一樣,運行程序。但是,它的總線寬度又是怎麼決定的呢?

2. 一般映射norflash在bank0, 查看2440的芯片資料,會發現bank0是不可編程的,只讀的。而且bank的總線控制器BWSCON 說明如下:

DW0 [2:1] Indicate data bus width for bank 0 (read only).
01 = 16-bit, 10 = 32-bit
The states are selected by OM[1:0] pins

這下,就全明白了。

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