天天看點

友善之臂Mini2440開發闆的存儲系統及I/O空間總結(轉)

用友善之臂的闆子已經有一段時間了.對于存儲系統和I/O空間的認識也漸漸淡忘了,原因是在做其他開發時,一直用着自帶的啟動代碼,從不關心闆子的儲存空間配置.最近在做網卡驅動,突然間就不知道網卡的位址是什麼了,于是花點時間總結一下.廢話少說.開始吧.

1,闆上的存儲資源

兩個32M的SDRAM.

一個2M的NOR FLASH

一個128M(有些是64M)的NAND FLASH

以上這些資源看原理圖便知.

2,闆上的I/O資源

       這塊闆子上(準确的說是S3C2440)的I/O空間是用存儲映射的方法映射到存儲空間上的,也就說I/O空間是要占用存儲空間的.

3,各種存儲器的差別與各自的用途

       為什麼這塊闆子上有那麼多儲存設備呢?原因很簡單.每種儲存設備的用途都不一樣,而且為了兼顧廣大使用者的需要,也必須有不同的儲存設備.首先說SDRAM.(寫到這突然想起忘了說SRAM了.SRAM是靜态随機存儲器,它具有掉電不丢失資料且不必頻繁重新整理的特點,存儲速度快,相當于PC的記憶體,看來這塊相當于記憶體的東西很重要,可是剛剛怎麼沒說有這塊東西呢?原因很簡單.因為本來就沒有.其實,如果需要随機存儲器,SDRAM就是随機存儲器啊,隻是它需要不斷的重新整理以保持裡面的資料(電平)。說到這,SDRAM的作用同學們也應該了解了.也就說我們這塊闆子就是有64M的記憶體,足夠用了。

其次說說NOR FLASH.NOR FLASH是具有SRAM接口特性的ROM。記住,是ROM,也就說,它相當于PC裡的硬碟,可是NOR FLASH才2M未免太少了,沒錯,是很少,可是我們有NAND FLASH啊,它也是ROM啊,它也是”硬碟”啊,是以加起來我們可以說這塊闆子有130M(66M)的硬碟.這也足夠用了,可以燒好幾個Linux了.

再說說NAND FLASH,NAND FLASH可以做的很大,但是速度卻比不上NOR FLASH,NOR FLASH能做快卻不能做的大,是以,速度和容量是一對沖突.為了克服這對沖突,這闆子上兩種FLASH都有了.各有用途.另外,初學者一定要知道NAND FLASH 與NOR FLASH啟動的不同吧.這是跟他們的特性有關的,接下來談談.

4,NOR FLASH 啟動與NAND FLASH 啟動

友善之臂Mini2440開發闆的存儲系統及I/O空間總結(轉)

       開發闆上有一個S2開關,當它打在NOR一端是就是NOR啟動.相反,打在另一端就是NAND FLASH啟動了.先說這兩種啟動的不同,再說說硬體上是如何啟動的,空間又是如何配置設定的。

當S2打在NAND FLASH啟動,那麼程式就是在NAND FLASH上跑起來。其實,在内部還有一個4K位元組的steppingstone的緩沖器(其實這是一個SRAM),當選擇NAND FALSH 啟動時,這個緩沖器映射在位址0x0000_0000上,而它負責将NAND FLASH上的代碼複制到SDRAM上(大家都知道,程式運作時都是在RAM上運作的,怎麼可能是在FLASH上運作呢,其實就是将FLASH上的代碼複制了而已)而負責複制這段代碼的東西就是傳說中的BIOS啦.

當S2打在NOR FLASH一端時,又有什麼差別呢?當選擇用NOR FLASH啟動時,2M的NOR FLASH就映射到位址0x0000_0000上,程式就是從這裡運作了.那難道程式就能從NOR FLASH上運作嗎?當然不行,那為什麼可以在這裡啟動呢,其實這個NOR FLASH已經安裝了BIOS的了(若有讀者不知什麼是BIOS,那就暫且認為它的功能就是從FLASH上複制代碼到SDRAM就可以了)

------------------------------------------------

圖:

------------------------------------------------

4,S3C2410 S3C2440NAND 存儲系統

       大家都知道,32位可以尋址4G空間.但是S3C2440卻的存儲空間裡把4G這樣子分的:

(途中隻顯示最低的1G)

0~0x4000_0000(隻有1G)。

還有3G空間是這樣配置設定:

OM[1:0]=01或者是10 時(NOR FLASH):

0x4000_0000-0x4000_0fff

-----這4K位元組的就是前面說的stepingstone的啦。0x4000_0fff_0x4800_0000是沒用到的。

0x4800_0000-0x6000_0000

-----這空間是特殊功能寄存器的.你發現,所有的寄存器都是在這個範圍内的。

0x6000_0000—0Xffff_ffff

-----還是未用到的。

OM[1:0]=00時(NAND FLASH):

這個時候如上圖所示。剛剛說的steppingstone映射到0x000_0000那裡,也即是圖中的BOOT INTERNAL SRAM。其他的一樣.

其實,S3C2440把低1G的空間分成了8塊,由圖可知,第0至6這七塊的起始位址是不變的。而第七段的位址是可變的(它的位址有第六塊需要用到多少來決定,反正就是第六第七是連在一起的)。前6塊可以是ROM SRAM 。最後兩塊不但可以是ROM,SRAM外,還可以是SDRAM.其實啊,簡單點的說,就是隻有最後兩塊才能是SDRAM.也就是說SDRAM必須要映射到這兩塊裡面.mini2440就是選擇映射在第七塊上,是以SDRAM的起始位址是0x3000_0000(這就是手冊上為什麼在加載測試程式時DNW的初始值要設為這個,它就是為了想程式直接加載到SDRAM上,這隻是做實驗而且,掉電後還是會丢失的.是以做産品時是不可能這樣做的).

剛剛說S3C2440把存儲空間分為8塊,它為什麼要這麼做呢?其實很簡單,即使它不這麼做,我們也會這麼做的。算一算數:每塊128M,那就是需要27根位址線來尋址.而8塊呢就跟着引出與之一一對應的8跟片選引腳.講到這聰明的讀者必能想到.其實這8根片選引腳就是裡面用3根位址線譯碼出來的.是以一共用了30根位址線,30根不正好是1G麼.呵呵.

說的差不多了.應該有很多需要完善的,但是這對于初學者來說還是有一定的幫助吧?