一:位址空間的分配
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 清理工作 簡單的啟動檔案 如下 ...