新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > S3C2440地址空間的分配及啟動過程

S3C2440地址空間的分配及啟動過程

作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏

一、S3C2440地址空間的分配

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

本文引用地址:http://butianyuan.cn/article/201611/317594.htm

l大小端(通過軟件選擇)

l地址空間:每個bank有128M的字節(jié)(總共1G字節(jié)/8個banks)

l可編程的訪問位寬,bank0(16/32位),其他bank(8/16/32位)

l共8個存儲器banks

l6個是ROM,SRAM等類型存儲器bank

l2個是可以作為ROM、SRAM、SDRAM等存儲器bank

l7個固定的存儲器bank起始地址

l最后一個bank的起始地址可調(diào)整

l最后兩個bank大小可編程

l所有存儲器bank的訪問周期可編程

l總線訪問周期可通過插入外部wait來延長

l支持SDRAM的自刷新和掉電模式

2.尋址空間

s3c2440是32位的,所以理論上可以尋址4GB空間,內(nèi)存(SDRAM)和端口(特殊寄存器),還有ROM都映射到同一個4G空間里。但是,芯片引腳上只給出了27根地址(ADDR[26:0]),單靠芯片上的27根引腳,它只能控制128M的空間,剩下的在哪里?

在cpu芯片手冊上,查它的內(nèi)部寄存器的地址,我們可以找到一部分答案。比如這次總結(jié)筆記要講的存儲器控制寄存器,13個寄存器,每個寄存器的地址,都大于0X4000 0000的地址。而0x4000 0000(1G)是1G空間的分界線,也就是說,1G~3G之間的空間,實(shí)際上都是被芯片自己占用了。實(shí)際上,給用戶的使用的空間,只有1G。

我們剛才說了,我們使用了128M,用了27根地址線。而1G空間,需要30根地址線。剩下的3根用在什么地方?查了資料,突然明白了。這三根被三星公司偷偷地用在了3-8譯碼器的輸入端去了。而這個3-8譯碼器的輸出端,就是對應(yīng)這nGCS0~7,對應(yīng)著8個bank。很明顯了,三星的2440留給用戶使用的這1G空間,27根線用于芯片引腳來控制具體的bank了,剩下的三根,用于選擇當(dāng)前處于哪個bank。

二、S3C2440系統(tǒng)啟動

手冊里說,2440啟動方式?jīng)Q定于bank0,以及OM[1:0]。

Arm的啟動都是從0地址開始,所不同的是地址的映射不一樣。在arm開電的時候,要想讓arm知道以某種方式(地址映射方式)運(yùn)行,不可能通過你寫的某段程序控制,因?yàn)檫@時候你的程序還沒啟動,這時候arm會通過引腳的電平來判斷。

S3C2440支持兩種啟動方式:NandFlash和非NandFlash(例NorFlash)啟動。

從NorFlash啟動時,與nGCS0相連的NorFlash就被映射到nGCS0片選的Bank0空間,其地址被映射為0x0000 0000;

從NandFlash啟動時,S3C2440芯片內(nèi)部自帶的一塊容量為4K的被稱為“Steppingstone”(起步石)的BootRAM被映射到nGCS0片選的Bank0空間,其地址被映射為0x0000 0000。當(dāng)系統(tǒng)上電或復(fù)位時,程序會從0x0地址處開始執(zhí)行,因此我們編寫的啟動代碼要確保存儲在0地址處。在實(shí)際的開發(fā)中,一般可以把bootloader燒入到Norflash,程序運(yùn)行可以通過串口交互,進(jìn)行一定的操作,比如下載,調(diào)試。這樣就很可以很方便的調(diào)試你的一些代碼。Norflash中的Bootloader還可以燒錄內(nèi)核到Norflash等等功能。

NorFlash啟動時,沒有額外需要考慮的問題,因?yàn)檫@種情況下程序在系統(tǒng)啟動前就存儲在NorFlash中,我們只要保證將啟動代碼保存在NorFlash開始的位置即可,系統(tǒng)上電或復(fù)位時,0地址處的啟動代碼就會被執(zhí)行。

NandFlash啟動時,系統(tǒng)啟動前所有的程序存儲在NandFlash中,系統(tǒng)的啟動過程稍微有點(diǎn)復(fù)雜:系統(tǒng)上電或復(fù)位時,0地址處為S3C2440內(nèi)部自帶的BootSRAM,啟動前里面沒有任何存儲內(nèi)容,啟動后S3C2440先通過硬件機(jī)制將NandFlash前4k的內(nèi)容拷貝到BootSRAM中,然后再運(yùn)行里面的程序(從0地址處開始)。這種情況下我們需要保證將啟動代碼保存在NandFlash開始的位置,并且啟動代碼的大小要小于4K。

如果系統(tǒng)的所有程序在編譯鏈接后的大小小于4K,那在系統(tǒng)的啟動代碼中無需考慮將程序從NandFlash搬運(yùn)到SDRAM這個問題,因?yàn)樗械某绦蛟趩訒r即全部由NandFlash拷貝至BootSRAM,程序在BootSRAM中運(yùn)行即可;如果系統(tǒng)的所有程序在編譯鏈接后的大小大于4K,那在系統(tǒng)的啟動代碼中就需要包含一段將系統(tǒng)的全部程序從NandFlash搬運(yùn)到SDRAM的代碼,因?yàn)橄到y(tǒng)啟動時只將NandFlash的前4K拷貝到了BootSRAM中,還有部分程序在NandFlash中,而程序在NandFlash中是無法運(yùn)行的,需要將所有程序拷貝至SDRAM并在其中運(yùn)行,所以系統(tǒng)的啟動代碼中要包含這段有關(guān)程序拷貝的代碼,并在所有程序拷貝完成后使程序跳轉(zhuǎn)到SDRAM中運(yùn)行。也就是說NandFlash啟動時需要考慮到涉及的兩次搬移,第一次搬運(yùn)是S3C2440硬件機(jī)制自動實(shí)現(xiàn)的,無需干預(yù),第二次搬運(yùn)需要程序員來實(shí)現(xiàn),搬運(yùn)程序量大小是系統(tǒng)的所有程序。



關(guān)鍵詞: S3C2440地址空間啟動過

評論


技術(shù)專區(qū)

關(guān)閉