嵌入式之存儲總結(從C51、STM32、S3C2440入手)(一)

/*
名稱:嵌入式之存儲總結(從C51、STM32、S3C2440入手)
說明:最近在學習S3C2440相關存儲器的時候,把C51、STM32和S3C2440有關存儲部分的內容橫向比較了一下,在此做一總結。

*/
  從大的方面來說,計算機系統有三個主要的組成部分:CPU、存儲器(主存和輔存)和輸入輸出設備。其中存儲器在整個體系的作用一般是程序和數據的存儲,其起着相當牛逼的作用。

本節內容分爲以下幾個部分:
一、C51、STM32和S3C2440的存儲體系
二、C51、STM32和S3C2440的存儲設備
三、C51、STM32和S3C2440啓動方式
四、其他

-------------------------------與正式內容隔開的華麗的分割線-------------------------------------------

一、C51、STM32和S3C2440的存儲體系

1、C51的存儲體系
先上一張C51的存儲結構圖。
51單片的存儲器結構
  從總體的方向看,C51內部含有RAM(256B)和ROM(4K),還可以外接64K的外部ROM和64K的片外RAM。

  其中對於內部RAM(IDATA區)來說,其內部256字節的RAM又可分爲3個部分,如下圖所示:

C51內部RAM

  其中的低128字節的地址空間爲普通的RAM區,高128字節的地址空間爲後來C52單片機升級擴展所用①。這裏的SFRs(特殊功能寄存器,用來對片內各個功能模塊進行管理、控制、監視的控制寄存器和狀態寄存器,其中常見的P0-P4也在這個地址區域)也是佔據80-FF高字節的地址空間。
  這時,可能有些基礎的同學要發話了:“普通的高128字節和特殊功能區的高128字節訪問不會衝突嗎?”
  答:高128字節RAM與特殊功能寄存器區貌似共用相同的地址範圍,都使
用80H~FFH,地址空間,雖然貌似重疊,但物理上是獨立的,使用時通過不同的尋址方式加以區分。 高128字節RAM只能間接尋址,特殊功能寄存器區可以直接尋址。(功能類似於後面要敘述的統一變址和獨立分開編址)

  對於外部擴展的64KRAM(XDATA區),它的地址是:0x0000–0xFFFF,這裏的0x0000和內部RAM的0x00是不同的,是完全獨立的兩個空間。他們的訪問方法也是不同的。MCS-51使用MOVX指令,來讀寫XDATA區。而且,訪問XDATA區,是需要DPTR寄存器(數據指針寄存器,位於特殊寄存器中)來輔助的。因爲只有DPTR才能裝得下十六位的XDATA地址。

  對於內部存儲的ROM來說,它有4K的存儲空間,主要用來存放程序、常數。其中0x0000-0x0FFF爲其地址空間。

  對於外部擴展的ROM來說,其有最大64K的存儲空間。其地址空間爲0x1000-0xFFFF。這裏要注意的是內部和外部擴展的ROM,不太準確的說,它兩是統一編址的。通過16位地址訪問。它們之間的切換使用可以通過EA引腳。②

  好,總結一下:C51的體系結構採用的是哈弗結構,即它的程序空間和數據空間是分開編址的,即各自有各自的地址空間,互不重疊。通過不同的指令分開訪問。它具有:
(a)、內部集成了4K的程序存儲器ROM;
(b)、內部具有256B的數據存儲器RAM(用戶空間+SFR空間);
(c)、 可以外接64K的程序存儲器ROM和 數據存儲器RAM。
從物理結構的角度講,51單片機的存儲系統可以分爲四個存儲空間:既片內ROM,RAM和片外ROM、RAM。

註釋:
①:對於傳統的8051單片機來說,其只有內部低128字節的RAM,後來升級出現了256字節的內部RAM,再後來單片機技術繼續升級,出現了多大1024字節的內部RAM。需要注意的是,這裏升級都是算作內部RAM。不要和外部擴展64K的RAM混淆。

②:這裏有個不太清晰的小問題:對於64K的存儲空間來說,需要16位的地址線,應該會用到P0口和P2口。這樣P0口和P2口還能作爲普通的IO口嗎?我猜測應該是不影響。普通情況下,就算不擴展外部程序存儲器,內部的4K存儲器也需要12根地址線,會用到P0和P2,而我們還在無所畏懼的用着P0和P2當做普通IO口。

  

2、STM32的存儲體系。
  對於STM32 來說,其採用的馮諾依曼體系結構,程序存儲器、數據存儲器、寄存器被組織在4GB的線性地址空間內,以小端格式(little-endian)存放。其存儲器映射的大圖如下:

STM32存儲器映射
再來一張清晰點的表格:
STM32存儲器功能分類

  然後,對於統一編址的存儲器映射來說,每個Block都有其特殊的功能,存儲部分主要是在Block0、Block1和Block2。一般來說,Block0用來設計成內部 FLASH, Block1 用來設計成內部 RAM, Block2 用來設計成片上的外設。
細化點來說,嗯。上幾個表格就行。
Block0
Block1

Blcok2

注意:這上面Blcok中的地址根據不同的STM32產品,略有不同。比如說不同容量的STM32,內部FLash的地址空間就不同。

  
3、S3C2440的存儲體系
  對於S3C2440來說,它也是基於馮諾依曼結構的統一編址。如下圖所示:
存儲器地址空間分佈

  以上只是存儲控制器的地址分佈空間。每個Bank(相當於STM32中的Block)大小爲128M,這裏的bank可以接一些符合接口的存儲器外設,如NandFlash、NorFLash、SDRAM、網卡等等 。(通過這種方式連接上系統的設備都可以直接使用指針來訪問)

寄存器映射  上圖是寄存器映射。地址空間從0x4800000-0x5fffffff。
  和STM32不同的是32位4G的地址空間,除了以上的存儲器地址孔家和特殊寄存器地址空間,剩下的地址空間沒有使用。而STM32的地址空間大都分配了出去。

  
  
寫了這麼多了,剩下的下一次寫吧。

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