新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > s3c2440 存儲系統和I/O空間認識

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

        作者: 時間:2016-11-29 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/201611/340836.htm

          1,板上的存儲資源

          兩個32M的SDRAM.

          一個2M的NOR FLASH

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

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

          2,板上的資源

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

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

          為什么這塊板子上有那么多存儲設備呢?原因很簡單.每種存儲設備的用途都不一樣,而且為了兼顧廣大用戶的需要,也必須有不同的存儲設備.首先說SDRAM.(寫到這突然想起忘了說SRAM了.SRAM是靜態隨機存儲器,它具有掉電不丟失數據且不必頻繁刷新的特點,存儲速度快,相當于PC的內存,看來這塊相當于內存的東西很重要,可是剛剛怎么沒說有這塊東西呢?原因很簡單.因為本來就沒有.其實,如果需要隨機存儲器,SDRAM就是隨機存儲器啊,只是它需要不斷的刷新以保持里面的數據(電平).說到這,SDRAM的作用同學們也應該了解了.也就說我們這塊板子就是有64M的內存,足夠用了.

          其次說說NOR FLASH.NOR FLASH是具有SRAM接口特性的ROM.可是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 啟動

          開發板上有一個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)

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

          OM[1:0]=01或者是10 時:0x4000_0000-0x4000_0fff.這4K字節的就是前面說的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塊,由圖可知,第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么.呵呵.



        關鍵詞: s3c2440 I/O

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绍兴县| 西平县| 茂名市| 西青区| 西和县| 义马市| 平泉县| 化州市| 东兰县| 旬邑县| 阿拉善右旗| 东乌珠穆沁旗| 石阡县| 东乌| 家居| 抚宁县| 台中市| 托里县| 华阴市| 襄樊市| 灯塔市| 石屏县| 三原县| 桓台县| 乌兰浩特市| 河西区| 遵化市| 通山县| 临夏市| 铜山县| 鹤庆县| 汽车| 浮梁县| 凤翔县| 杨浦区| 利川市| 威远县| 高台县| 留坝县| 赤水市| 临桂县|