<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          一、S3C2440地址空間的分配

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

          本文引用地址:http://www.ex-cimer.com/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之間的空間,實際上都是被芯片自己占用了。實際上,給用戶的使用的空間,只有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知道以某種方式(地址映射方式)運行,不可能通過你寫的某段程序控制,因為這時候你的程序還沒啟動,這時候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地址處。在實際的開發(fā)中,一般可以把bootloader燒入到Norflash,程序運行可以通過串口交互,進行一定的操作,比如下載,調(diào)試。這樣就很可以很方便的調(diào)試你的一些代碼。Norflash中的Bootloader還可以燒錄內(nèi)核到Norflash等等功能。

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

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

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



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

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();