s3c2440啟動過程詳解

2021-07-05 01:10:35 字數 1536 閱讀 2783

一:位址空間的分配

3:nandflash不用來執行**,只用來儲存**,norflash,sdram可以直接執行**)

4:s3c2440總共有8個記憶體banks

6個記憶體bank可以當作rom或者sram來使用

留下的2個bank除了當作rom 或者sram,還可以用sdram(各種記憶體的讀寫方式不一樣)

7個bank的起始位址是固定的

還有乙個靈活的bank的記憶體位址,並且bank大小也可以改變

5:s3c2440支援兩種啟動模式:nand和非nand(這裡是nor flash)。

具體採用的方式取決於om0、om1兩個引腳

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啟動。

當從nand啟動時

cpu會自動從nand flash中讀取前4kb的資料放置在片內sram裡(s3c2440是soc),同時把這段片內sram對映到ngcs0片選的空間(即0x00000000)。cpu是從0x00000000開始執行,也就是nand flash裡的前4kb內容。因為nand flash連位址線都沒有,不能直接把nand對映到0x00000000,只好使用片內sram做乙個載體。通過這個載體把nandflash中大**複製到ram(一般是sdram)中去執行

當從非nand flash啟動時

nor flash被對映到0x00000000位址(就是ngcs0,這裡就不需要片內sram來輔助了,所以片內sram的起始位址還是0x40000000). 然後cpu從0x00000000開始執行(也就是在no***lsh中執行)。

總結:arm的啟動都是從0位址開始,所不同的是位址的對映不一樣。在arm上電的時候,要想讓arm知道以某種方式(位址對映方式)執行,不可能通過你寫的某段程式控制,因為這時候你的程式還沒啟動,這時候arm會通過引腳的電平來判斷。

1.當引腳om0跟om1有乙個是高電平時,這時位址0會對映到外部ngcs0片選的空間,也就是norflash,程式就會從norflash中啟動,arm直接取norflash中的指令執行。

2.當om0跟om1都為低電平,則0位址內部bootbuf(一段4k的sram)開始。系統上電,arm會自動把nandflash中的前4k內容考到bootbuf(也就是0位址),然後從0位址執行。

這時nandflash中的前4k就是啟動**(他的功能就是初始化硬體然後在把nandflash中的**複製到ram中,再把相應的指標指向該執行的地方) 

1:s3c2440是32位的,所以可以定址4gb空間,記憶體(sdram)和埠(特殊暫存器),還有rom都對映到同乙個4g空間裡.

S3C2440框架與啟動過程

下面是s3c2440的簡單框圖。我們可以把程式燒寫到nandflash,然後設定為從nandflash啟動,也可以把程式燒寫到nroflash,然後設定為從norflash啟動。norflash啟動時片內ram位址為0x4000,0000.2.nandflash啟動,片內4k 的ram基位址為零,2...

S3C2440的RAM和啟動過程!

2440自帶的ram是 16k instruction cache 16k data cache 4k boot internal sram。但是我們能用到的只有4k boot internal sram 2440不自帶rom。2440的啟動方式有兩種,norflash和nandflash,怎麼選擇...

S3C2440啟動檔案

啟動檔案包括軟體和硬體兩方面。1 設定棧sp。設定棧我們要初始化硬體,因為要訪問記憶體。如果板子上是sram可以直接使用,不需要初始化 如果是sdram,我們需要初始化硬體 1 關閉看門狗 2 初始化時鐘 3 初始化sdram 2 設定返回位址 3 呼叫main 3 清理工作 簡單的啟動檔案 如下 ...