S3C2440位址空間的分配與啟動

2021-06-14 06:45:17 字數 2313 閱讀 4119

一、s3c2440位址空間的分配

1. s3c2440a 的儲存器控制器有以下特性:

大小端(通過軟體選擇)

可程式設計的訪問位寬,bank0(16/32 位),其他bank(8/16/32 位)

共8個儲存器banks

6個是rom,sram 等型別儲存器bank

2個是可以作為rom、sram、sdram 等儲存器bank

7個固定的儲存器bank起始位址

最後乙個bank 的起始位址可調整

最後兩個bank 大小可程式設計

所有儲存器bank的訪問週期可程式設計

匯流排訪問週期可通過插入外部wait來延長

支援sdram 的自重新整理和掉電模式

2.   定址空間

s3c2440是32位的,所以理論上可以定址4gb空間,記憶體(sdram)和埠(特殊暫存器),還有rom都對映到同乙個4g空間裡。但是,晶元引腳上只給出了27根位址(addr[26:0]), 單靠晶元上的27根引腳,它只能控制128m的空間,剩下的在**?

在cpu晶元手冊上,查它的內部暫存器的位址,我們可以找到一部分答案。比如這次總結筆記要講的儲存器控制暫存器,13個暫存器,每個暫存器的位址,都大於0x40000000的位址。而0x40000000(1g)是1g空間的分界線,也就是說,1g~3g之間的空間,實際上都是被晶元自己占用了。實際上,給使用者的使用的空間,只有1g。

我們剛才說了,我們使用了128m,用了27根位址線。而1g空間,需要30根位址線。剩下的3根用在什麼地方?查了資料,突然明白了。這三根被三星公司偷偷地用在了3-8解碼器的輸入端去了。而這個3-8解碼器的輸出端,就是對應這ngcs0~7,對應著8個bank。很明顯了,三星的2440留給使用者使用的這1g空間,27根線用於晶元引腳來控制具體的bank了,剩下的三根,用於選擇當前處於哪個bank。

二、s3c2440系統啟動

手冊裡說,2440啟動方式決定於bank0,以及om[1:0]。

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

s3c2440支援兩種啟動方式:nandflash和非nandflash(例norflash)啟動。

從norflash啟動時,與ngcs0相連的norflash就被對映到ngcs0片選的bank0空間,其位址被對映為0x0000 0000。

從nandflash啟動時,cpu會自動從nand flash中讀取前4kb的資料放置在片內sram裡(s3c2440是soc),同時把這段片內sram對映到ngcs0片選的空間(即0x00000000)。cpu是從0x00000000開始執行,也就是nand flash裡的前4kb內容。因此我們編寫的啟動**要確保儲存在0位址處。

norflash啟動時,沒有額外需要考慮的問題,因為這種情況下程式在系統啟動前就儲存在norflash中,我們只要保證將啟動**儲存在norflash開始的位置即可,系統上電或復位時,0位址處的啟動**就會被執行。

nandflash啟動時,系統啟動前所有的程式儲存在nandflash中,系統的啟動過程稍微有點複雜:系統上電或復位時,0位址處為s3c2440內部自帶的bootsram,啟動前裡面沒有任何儲存內容,啟動後s3c2440先通過硬體機制將nandflash前4k的內容拷貝到bootsram中,然後再執行裡面的程式(從0位址處開始)。這種情況下我們需要保證將啟動**儲存在nandflash開始的位置,並且啟動**的大小要小於4k。

如果系統的所有程式在編譯鏈結後的大小小於4k,那在系統的啟動**中無需考慮將程式從nandflash搬運到sdram這個問題,因為所有的程式在啟動時即全部由nandflash拷貝至bootsram,程式在bootsram中執行即可;如果系統的所有程式在編譯鏈結後的大小大於4k,那在系統的啟動**中就需要包含一段將系統的全部程式從nandflash搬運到sdram的**,因為系統啟動時只將nandflash的前4k拷貝到了bootsram中,還有部分程式在nandflash中,而程式在nandflash中是無法執行的,需要將所有程式拷貝至sdram並在其中執行,所以系統的啟動**中要包含這段有關程式拷貝的**,並在所有程式拷貝完成後使程式跳轉到sdram中執行。也就是說nandflash啟動時需要考慮到涉及的兩次搬移,第一次搬運是s3c2440硬體機制自動實現的,無需干預,第二次搬運需要程式設計師來實現,搬運程式量大小是系統的所有程式。

關於S3C2440的位址分配的分析

宣告 參考文章 參考硬體平台 友善之臂mini2440 在研究2440開發板的時候,通過對2440晶元的和各種儲存晶元的理解,略有感悟。本貼主要是關於s3c2440硬體平台設計,從事嵌入式軟體的朋友可以當做參考,同時歡迎各路硬體牛人多提建議。s3c2440a是三星推出的16 32bit的risc m...

2440 位址空間的說明

2440這是一款32位的cpu,照理說,它是可以定址4g的位址空間的。但是,晶元引腳上,只給出了27根位址線。這27根引腳,是a0 a26。因此單靠晶元上的 27 根引腳,它只能控制 128m 的空間。那總共的 4g 空間,晶元引腳才用了128m,剩下的在 實際上,在cpu晶元手冊上,查它的內部暫存...

S3C2440儲存器位址段(Bank)

s3c2440 對外引出了 27根位址線 addr0 addr26 它最多能夠定址 128mb 而s3c2440 的定址空間可以達到 1gb,這是由於 s3c2440 將1gb 的位址空間分成了8個 banks bank0 bank7 其中每乙個 bank 對應一根片選訊號線 ngcs0 ngcs7...