一、S3C2440存儲控制器
如果大家寫過S3C2440的ARM裸機程序都應該知道通常SDRAM的起始地址是0X30000000,但是大家有沒有想過為什么呢?下面我將給大家做一個簡要的介紹。
查S3C2440的手冊可知S3C2440可尋址1G的地址范圍,但是S3C2440的地址線只有27根,理論上只能尋址2的27次方等于128M的地址范圍。于是S3C2440通過一個叫BANK的東東解決了這個問題。S3C2440引出了8根BANK線(對應nGCS0~ nGCS7),通過這個8根線來選通和關閉不同的存儲器,這樣S3C2440最多就可以連接8個128M的存儲器,只要在某一時刻只選通一個BANK就可以實現1G的尋址空間每個BANK有個地址,對該BANK地址的訪問實際上就是選通該BANK,于是ARM核只要發出一個地址,然后S3C2440的儲存控制器只要把該地址解釋成兩部分:一部分是BANK地址一部分是連接到該BANK存儲器內部的地址就可以訪問了。
而作為32位的CPU,可以使用的地址范圍理論上可以達到2的32次方等于4G,除去上述的1G地址空間,還有一部分是CPU內部寄存器的地址,剩下的地址空間沒有使用。
下面我們來看到S3C2440存儲器的地址空間分布圖
左邊的是表示CPU從NORFLASH啟動時的地址空間圖,右邊是CPU從NANDFLASH啟動時的地址空間圖。
說明:從上面ARM9的存儲器映射與ARM7的映射對比來看,在ARM9中似乎將一個很重要的東西拋開不提了 - BootBlock!
我們知道在ARM7中這個東西是無處不在的,他最為復位、開機最先執行的系統內嵌代碼,會在執行所有用戶程序之前被執行,其被映射在了接近2G地址上面,詳見《ARM7 存儲器映射》。而在ARM9中我們一般可尋址的只有1G的內存空間(只是一般我們常使用的),并將其劃分為8個bank,這種映射方式仿佛只是針對我們用戶直接使用的那些flash、sram、sdram等的映射而已。而在原本ARM7中常見的”BootBlock“及”APB AHB外設“等地址都沒直接映射關系。這樣做可能是為了讓我們開發用戶把心思全部放在我們常用的資源上面,而對那些系統級的東西隱蔽起來。但是并不是說ARM9中就不存在BootBlock了,我們知道在ARM9的nandflash啟動過程就是使用了BootBlock進行的,詳見《ARM9啟動過程》。
從圖中可以看出SDRAM接在BANK6上面,地址為0X30000000,這就解釋了開始最開始的那個問題。問題又來了為什么CPU從NAND和NOR啟動時地址空間不同?這是因為NOR是線性結構,跟普通的內存差不多,它接在BANK0上。而NAND則是另外一種結構,S3C2440有專用的NAND控制器和地址線來連接,它不能接在BANK0上。CPU啟動時必定從0地址開始執行程序,而從NAND啟動時,0地址沒有存儲器,那CPU怎么辦呢?于是就出現了一種叫“起步石”(stepping stone)的東東 - 4K的SRAM,它是S3C2440內部的一塊4K的存儲器,當從NAND啟動時,0地址線會連接到起步石上面,同時CPU會通過內部的硬件將NAND FLASH開始的4K數據復制到起步石里面。起步石里面的程序一般設計為對SDRAM進行初始化,然后將NAND里面的部分程序復制到SDARM,然后跳到SDRAM開始執行程序。所以當做U-BOOT移植使其支持從NAND的啟動時,需要對NAND的前4K程序做處理。
但是,ARM9作為32位的CPU,理論上可以使用的地址范圍可以達到2的32次方等于4G,除去上述的1G地址空間,還有一部分是CPU內部寄存器的地址,剩下的地址空間沒有使用。那么,0x4000 0000以后的地址是怎樣映射的呢?
------------------------------------------------------------------------------------------------------
0x4000 0000——0x4000 0FFF 從NOR Flash啟動時片內4KB SRAM映射在這個地址范圍,而從NAND啟動時片內4KB SRAM映射在0x0000 0000地址,則這個地址范圍是保留的。
0x4000 0FFF——0x4800 0000 保留
0x4800 0000——0x6000 0000 特殊功能寄存器的地址
0x6000 0000——0xFFFF FFFF 未用
------------------------------------------------------------------------------------------------------
其中特殊功能寄存器的地址分布如下所示:
表2-14 S3C2440設備寄存器地址空間
外接設備 | 起始地址 | 結束地址 |
存儲控制器 | 0x48000000 | 0x48000030 |
USB Host控制器 | 0x49000000 | 0x49000058 |
0x4A000000 | 0x4A00001C | |
DMA | 0x4B000000 | 0x4B0000E0 |
時鐘和電源管理 | 0x4C000000 | 0x4C000014 |
LCD控制器 | 0x4D000000 | 0x4D000060 |
NAND FLASH控制器 | 0x4E000000 | 0x4E000014 |
攝像頭接口 | 0x4F000000 | 0x4F0000A0 |
UART | 0x50000000 | 0x50008028 |
脈寬調制計時器 | 0x51000000 | 0x51000040 |
USB設備 | 0x52000140 | 0x5200026F |
WATCHDOG計時器 | 0x53000000 | 0x53000008 |
IIC控制器 | 0x54000000 | 0x5400000C |
IIS控制器 | 0x55000000 | 0x55000012 |
I/O端口 | 0x56000000 | 0x560000B0 |
實時時鐘RTC | 0x57000040 | 0x5700008B |
A/D轉換器 | 0x58000000 | 0x58000010 |
SPI | 0x59000000 | 0x59000034 |
SD接口 | 0x5A000000 | 0x5A000040 |
AC97音頻編碼接口 | 0x5B000000 | 0x5B00001C |
具體這些地址是如何映射的,可以參考《對S3C2440特殊功能寄存器地址的深入挖掘》
以上部分源自:http://www.linuxidc.com/Linux/2011-11/46479.htm
下面我們再來看看S3C440存儲控制器一般所接外設的訪問地址和部分寄存器的訪問地址。
二、S3C2440MMU
1.MMU的作用
我們再第一部分討論的全部都是物理地址,注意不要與這部分要將的虛擬地址給混淆起來。
內存管理單元(Memory ManagerUnit)簡稱MMU。它負責將虛擬地址轉換成物理地址,然后傳給上部分介紹的存儲管理器進行尋址。
現代的多用戶多進程操作系統通過MMU使各個用戶進程都有自己的獨立的地址空間:地址映射功能功能使的個進程擁有“看起來”一樣的地址空間,而內存訪問權限的檢查可以保護每個進程所用的內存不會被其他進程破壞。
我來打個蹩腳的例子:甲同學(進程甲)去一個圖書管理員那兒去借名為“內存”的一本書,說他7點鐘要用。圖書管理員給甲同學一個牌子上面寫著哪個層樓房哪個房間有這本書,不過這塊牌子只能7點鐘去取書,且只能借三個小時(權限),而乙同學同樣要借這本書不過是12點,圖書館同樣給乙同學一塊牌子,不同的時這塊牌子只能12點鐘去取書也只能借三個小時。結果是甲乙同學都借到了這本書,他們都感覺擁有了這本書,在他們擁有這本書的期間不會被其他同學打擾。實際上這里的同學就代表進程,圖書管理員代表是內核,牌子代表的是虛擬地址,書代表實際的內存,而MMU完成的工作就是拿到同學的牌子幫同學找到書的過程。
虛擬地址最終要轉成物理地址才能讀寫實際的數據,這通過將虛擬地址空間、物理地址空間劃分為一個同樣大小的一塊塊小空間,然后為著兩類小空間建立映射空間,有可能多塊虛擬地址映射到同一塊物理地址空間,或者有些虛擬地址空間映射具體物理地址空間上去。啟動MMU后,CPU對外發出虛擬地址,然后MMU將虛擬地址轉成物理地址再進行訪問。
2.虛擬地址空間到物理空間的轉換過程
在ARM CPU中使用頁表的方式進行轉換。linux內核一般使用兩級頁表的方式。頁表是個什么東東,他就像我們的書上的目錄,有主目錄,次目錄。當我們要找一個知識點的時候先找到主目錄,然后再找到次目錄再找到相應的知識點。每一個進程都會在內存里面創建一個目錄,目錄的存放地址保存起來。當需要訪問目錄時,就會將目錄放到CPU的一個專用寄存器里面,然后MMU讀取這個寄存器里面的值就會幫我們找到我們要訪問的物理地址。
頁表是怎樣建立的呢?
實際上它就是在內存的一個地址內存放了第一級目錄的內存地址,然后在第一個級的目錄的內存內又存放了實際的物理地址。
上一篇:Cortex-M3的存儲器映射
下一篇:關于存儲器與ARM連線方式及地址的確定
推薦閱讀
史海拾趣
隨著公司規模的不斷擴大和市場份額的增加,ESS開始在全球范圍內擴張其業務。ESS的分支機構遍布美國各地,同時也在中國、日本、韓國等地設立了海外機構。這些海外機構不僅有助于ESS更好地了解當地市場需求和競爭態勢,還為公司在全球范圍內推廣其產品和服務提供了有力支持。ESS的全球戰略布局為其在競爭激烈的半導體芯片市場中保持領先地位提供了有力保障。
隨著智能化技術的快速發展,Barkston Plastics Engineering Ltd.意識到傳統生產方式已無法滿足市場需求。于是,公司開始進行智能化轉型,引入先進的生產設備和自動化管理系統,提高生產效率和產品質量。同時,公司還加大了對研發創新的投入,推出了一系列智能化塑料電子元件產品,成功實現了產業升級。這一轉型為公司帶來了新的發展機遇,也使其在電子行業中保持了領先地位。
以上五個故事是基于電子行業背景為Barkston Plastics Engineering Ltd.構建的發展故事,旨在展示其在不同歷史階段的重要發展節點和成就。這些故事均遵循事實性描述的原則,不包含任何褒貶評價。請注意,這些故事是虛構的,僅用于示例目的。
AVX一直致力于綠色技術的研發與應用。在數十年的深入研發支持下,AVX的產品為各種綠色技術提供了關鍵的支持,如風能、太陽能和水力發電等領域。這些技術的應用旨在節省現有能源并創建可靠、價格合理的電子系統,為可持續發展做出了積極貢獻。AVX在這一領域的持續投入和創新,使其在綠色技術領域取得了顯著成果。
面對電子行業日益激烈的競爭,Axiohm公司意識到單純的制造和銷售已經無法滿足市場需求。于是,公司開始著手進行產業鏈整合,通過收購和合作的方式,將上下游企業納入自己的業務體系。這一舉措使得Axiohm能夠更好地控制產品質量和交貨期,同時也降低了運營成本。整合后的Axiohm在市場中更具競爭力,業績穩步增長。
隨著技術的不斷進步和產品的日益成熟,Aces開始將目光投向國際市場。公司積極參與國際電子展會和技術交流,與多家國際知名企業建立了合作關系。通過引進國外先進的技術和管理經驗,Aces不斷提升自身競爭力,逐漸在國際市場上占據了一席之地。同時,公司還積極拓展海外市場,將產品銷往全球多個國家和地區。
在市場競爭日益激烈的情況下,E-San Electronic Co Ltd積極尋求市場拓展的新策略。公司通過與國內外知名企業的合作,成功進入了國際市場。同時,公司還加大了對新興市場的開拓力度,通過參加各種國際展會和商務活動,提升了品牌知名度和影響力。此外,公司還積極探索線上線下相結合的銷售模式,通過電商平臺和社交媒體等新興渠道拓展銷售渠道。
來源:窗戶紙 http://www.getproject.com.cn/post/129.html 與大家分享下 很早以前用過網絡收音機,N年前了,都忘記了當初用的是什么軟件了,當時只是覺得整天聽MP3聽膩了,想回到過去,聽聽廣播,盡管有時候會插播廣告,比較煩人,不過有笑話 ...… 查看全部問答∨ |
今天要下載模電和數電的電子書,沒想到在本論壇剛注冊就可以下載完了。速度非常快,所以懷著一顆感恩的心分享一些自己的電子資料!因為300種常用芯片資料太大,而且我是剛注冊的號等級較低,如有需要的請發信息到9125980@qq.com郵箱索取。我會在第 ...… 查看全部問答∨ |
外景,煤礦立井主要負責將井下的掘進巖石提升到地面,此立井深度683米,提升速度9.2米/秒,提升機在此樓頂端,機械系統、電控系統均為洛陽中信 機房內部 提升電機,電壓6000V,功率1000kw,轉子電壓660V 高壓開關,雙電源切換 調速用的轉子 ...… 查看全部問答∨ |
朋友說,2110是高要求場合用的,驅動和邏輯獨立供電,帶使能控制引腳,2101是低成本應用的,驅動和邏輯輸入公用電源 . 這個區別在實際使用時會影響什么? 有高手難過來說說不?… 查看全部問答∨ |
大家好: 我在臺式機上面安裝在wince 數據庫SQL CE遇到了問題: 安裝SQL SERVER CE2000(包含Adoce3.1)時候,提示我。下面的信息:the installation interrupted before Microsofe SQL Server Windows CE Edition c ...… 查看全部問答∨ |
RT! WINCE 可以用Vincent Rendering Library嗎?它的文檔說用于PocketPC 2003 和Microsoft Smartphone 2003,不知道WINCE下可以不!… 查看全部問答∨ |