s3c2440 存儲系統和I/O空間 認識

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

1,板上的存儲資源

兩個32MSDRAM.

一個2MNOR 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.可是NOR FLASH2M未免太少了,沒錯,是很少,可是我們有NAND FLASH,它也是ROM,所以加起來我們可以說這塊板子有130M(66M)的硬盤.這也足夠用了,可以少好幾個Linux.

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

4,NOR FLASH 啓動與NAND FLASH 啓動

       開發板上有一個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啓動時,2MNOR FLASH就映射到地址0x0000_0000,程序就是從這裏運行了.那難道程序就能從NOR FLASH上運行嗎?當然不行,那爲什麼可以在這裏啓動呢,其實這個NOR FLASH已經安裝了BIOS的了(若有讀者不知什麼是BIOS,那就暫且認爲它的功能就是從FLASH上覆制代碼到SDRAM就可以了)

4,S3C2410 S3C2440NAND 存儲系統

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

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

 

 

       0x4000_0000只有還有3G空間是這樣分配:

OM[1:0]=01或者是10 :0x4000_0000-0x4000_0fff.4字節的就是前面說的stepingstone的啦.0x4000_0fff_0x4800_0000是沒用到的.0x4800_0000-0x6000_0000的空間是特殊功能寄存器的.你發現,所有的寄存器都是在這個範圍內的.0x6000_0000—0Xffff_ffff的還是未用到的.

OM[1:0]=00.這個時候如上圖所示.剛剛說的steppingstone映射到ox000_0000那裏,也即是途中的BOOT INTERNAL SRAM.其他的一樣.

其實.S3C2440把低1G的空間分成了8,由圖可知,06這七塊的起始地址是不變的.而第七段的地址是可變的(它的地址有第六塊需要用到多少來決定,反正就是第六第七是連在一起的).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.呵呵.

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

 

 

 

 

S3C2440 MEMORY CONTROLLER詳解

 

       BANK0總線寬度由OM[1:0]引腳決定,當OM[1:0]=01時,booting ROM data width16位,當[1:0]=10時,booting ROM data width32位,當OM[1:0]=00時,從NAND FLASH啓動。在友善之臂S3C2440開發板上,OM1引腳直接接地。
       依據這張表,可以查找到SDRAMBANK選擇引腳連接方式,比如,我們使用的SDRAM2HYNIXHY57V561620(L)T,它的規格是4*4M*16bit(使用兩片是爲了配置成32位的總線寬度),BANK大小是4M*16=64MB,總線寬度是32位,器件大小是4*BANK大小=256Mb(M bit的意思吧),寄存器配置就是(4M*16*4B*2 ( M bit ),根據上面的表格,SDRAM上的BANK地址引腳(BA[1:0])與S3C2440A[25:24]相連。

       上表是寄存器控制地址總線連接方式,我們使用2SDRAM配置成32位的總線寬度,所以SDRAM上的A[12:0]接到S3C2440A[14:2]引腳。

       具體的S3C2440與兩片SDRAM接線方式如下圖所示:

       SDRAM的工作時序作爲ARM工程師瞭解即可,具體的讀寫控制由寄存器控制器完成,作爲FPGA工程師則需要詳細瞭解SDRAM工作原理與時序,在此不再贅述。作爲ARM工程師,最重要的是準確配置與SDRAM相關的寄存器。

 

軟件可編程的大小端模式;

       地址空間:每個BANK可尋址128MB(總共8BANK 1GB空間);

       可編程的訪問位寬:BANK01632位,其他BANK81632位;

       8個存儲器BANK,其中6個用於ROM或者SRAM2個用於ROMSRAM或者SDRAM

       BANK0~BANK6的起始地址固定;

       BANK7的起始地址和大小可編程;

       所有存儲器BANK的訪問週期可編程;

       外部wait信號可延長總線週期;

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章