SDRAM工作原理
SDRAM工作原理
SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)也就是通常所說的內存。在我們現在所用的PC機中,所指的內存,其實就是SDRAM,只不過是他的升級版,如DDR內存,DDR2內存,DDR3內存等等,大部分顯卡上的顯存也是SDRAM的。
內存是代碼的執行空間,以PC機為例,程序是以文件的形式保存在硬盤里面的,程序在運行之前先由操作系統裝載入內存中,由于內存是RAM(隨機訪問存儲器),可以通過地址去定位一個字節的數據,CPU在執行程序時將PC的值設置為程序在內存中的開始地址, CPU會依次的從內存里取址,譯碼,執行,在內存沒有被初始化之前,內存好比是未建好的房子,是不能讀取和存儲數據的,因此我們要想讓程序運行在內存里必須進行內存的初始化。
在介紹內存工作原理之前有必要了解下存儲設備的存儲方式:ROM,RAM
ROM(Read-Only Memory):只讀存儲器,是一種只能讀出事先所存數據的固態半導體存儲器。其特性是一旦儲存資料就無法再將之改變或刪除。通常用在不需經常變更資料的電子或電腦系統中,資料并且不會因為電源關閉而消失。如:PC里面的BIOS。
RAM(Random Access Memory) :隨機訪問存儲器,存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。可以理解為,當你給定一個隨機有效的訪問地址,RAM會返回其存儲內容(隨機尋址),它訪問速度與地址的無關。這種存儲器在斷電時將丟失其存儲內容,故主要用于存儲短時間內隨機訪問使用的程序。計算機系統里內存地址是一個四字節對齊的地址(32位機),CPU的取指,執行,存儲都是通過地址進行的,因此它可以用來做內存。
RAM按照硬件設計的不同,隨機存儲器又分為DRAM(Dynamic RAM)動態隨機存儲器和SRAM(Static RAM) 靜態隨機存儲器。
DRAM:它的基本原件是小電容,電容可以在兩個極板上短時間內保留電荷,可以通過兩極之間有無電壓差代表計算機里的0和1,由于電容的物理特性,要定期的為其充電,否則數據會丟失。對電容的充電過程叫做刷新,但是制作工藝較簡單,體積小,便于集成化,經常做為計算機里內存制作原件。比如:PC的內存,SDRAM, DDR, DDR2, DDR3等,缺點:由于要定期刷新存儲介質,存取速度較慢。
SRAM:它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。因此其存取速度快,但是體積較大,功耗大,成本高,常用作存儲容量不高,但存取速度快的場合,比如CPU的L1 cache,L2cache(一級,二級緩存) ,寄存器。
為了滿足開發的需要jz2440在出廠時搭載了三種存儲介質:
(1)NOR FLASH(2M):ROM存儲器,通常用來保存BootLoader,引導系統啟動
(2)NAND FLASH(256M,型號不一樣,Nandflash大小不一樣):保存操作系統映像文件和文件系統
(3)SDRAM(64M):內存,執行程序
NOR FLASH:它的特點是支持XIP芯片內執行(eXecute In Place),這樣應用程序可以直接在Flash閃存內運行,不必再把代碼讀到系統RAM中,也就是說可以隨機尋址。NOR FLASH的成本較高。
NAND FLASH:它能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。其成本較低,不支持XIP??勺銮度胧嚼锏臄祿鎯橘|。如:手機存儲卡,SD卡等。
S3C2440地址空間:
S3C2440對外引出了27根地址線ADDR0 ~ ADDR26,它最多能夠尋址128MB,而S3C2440的尋址空間可以達到1GB,這是由于S3C2440將1GB的地址空間分成了8個BANKS(Bank0 ~ Bank7),其中每一個BANK對應一根片選信號線nGCS0 ~ nGCS7,當訪問BANKx的時候,nGCSx管腳電平拉低,用來選中外接設備, S3C2440通過8根選信號線和27根地址線,就可以訪問1GB。如下圖所示:
SDRAM存儲結構:
先來介紹一下CPU提供的一組用于SDRAM的信號:
SDRAM的時鐘有效信號SCKE;
SDRAM的時鐘信號SCLK0,SCLK1;
數據掩碼信號DQM0,DQM1,DQM2,DQM3;
SDRAM片選信號nSCS0(它與nGCS6是同一引腳的兩個功能);
SDRAM行地址選通脈沖信號nSRAS;
SDRAM列地址選通脈沖信號nSCAS;
寫允許信號nWE(它不是專用于SDRAM的)。
SDRAM的內部是一個存儲陣列,陣列就類似于表格一樣,有行、列之分,這樣我們要訪問(讀、寫)一個單元,就要先指定一個行地址,一個列地址,這樣就找到了該單元,這就是SDRAM的尋址的基本原理。這里的單元我們一般稱為存儲單元,而整個表格稱為邏輯BANK(Logical Bank , L-BANK),一般每個SDRAM都會有4個L-BANK。SDRAM的邏輯結構如下圖所示:
jz2440是選用2片HY57V561620FTP-H組成64MB、32位的內存,每片32MB容量、16位數據總線。原理圖如下:
在圖中可以看到,行地址、列地址共用地址線ADDR2 ~ ADDR14(BANK6位寬為32,ADDR0、1沒有使用),使用nSRAS、nSCAS兩個信號來區分它們。在jz2440開發板中,使用兩根地址線ADDR24、ADDR25作為L-Bank的選擇信號;SDRAM芯片K4S561632的行地址數為13,列地址數為9,所以當nSRAS信號有效時,ADDR2 ~ ADDR14上發出的是行地址信號,它對應32位地址空間的bit[23:11];當nSCAS信號有效時,ADDR2~ADDR10發出的是列地址信號,它對應32位地址空間的bit[10:2]。
重點關注SDRAM芯片K4S561632地址線 A0~A12的說明:
SDRAM工作原理
該芯片每一個Bank有13行(RA0 ~ RA12),9列(CA0 ~ CA8),行尋址時使用A0 ~ A12,列尋址分時復 用,只使用了CA0 ~ CA8。nRAS、nCAS引腳,用于標識當前是行尋址還是列尋址,從而實現地址線的分時復用。
jz2440開發板是由兩塊16位的SDRAM芯片并聯組成32位的位寬,與CPU的32根數據線DATA0 ~ DATA1相連。SDRAM是連接在BANK6上的,起始地址為0x30000000,所以SDRAM的訪問地址為0x30000000 ~ 0x33FFFFFF,大小為64MB。
看了上面那些內容,里面有某些東西令我百思不得其解,可能是自己太笨了,不過最后還是想明白了。
1、為什么兩塊SDRAM芯片并聯起來,容量大小是64MB呢?
原因是這樣的:SDRAM芯片有4個bank,每個bank的行地址數是13、列地址數是9,由兩塊16位的SDRAM芯片并聯組成32位的位寬,與CPU的32根數據線DATA0~DATA1相連。則其存儲空間為(2^13 * 2^9 * 4 * 32bit)/8 = 2^26 * 8bit/ 8 = 2^26 Byte = 64MB
2、為什么SDRAM芯片的A0地址引腳連接的是ARM芯片的A2引腳呢?
根據上一問可知,該SDRAM存儲空間為64MB,S3C2440要尋址64MB需要地址線26根。由原理圖可知SDRAM的數據總線位寬為32位,即一次傳輸4個字節的數據。因此,我們可以這樣理解,即一個地址空間其實對應著4個字節的數據,實際上真正的尋址空間只有16MB而已,只需24根地址線(行地址線13根,列地址線9根,還有L-Bank選擇信號的A24、A25兩根地址線,總共24根)就已經足夠了,這樣S3C2440端并不需要將26根地址線全部連接到SDRAM芯片上,只需要給出高24位地址(A2~A25),相當于數據總線上每傳輸4個字節的數據,地址空間的第三位(A2)才增加1,即A0和A1可以不接。此時的A0和A1應該是低電平。然后,SDRAM芯片即根據S3C2440給的行地址、列地址和L-Bank選擇信號找到對應的地址空間,將該地址空間的4個字節發送到數據總線上。以此類推,數據位寬為8位,就arm芯片的A0接SDRAM的A0,16位就A1接A0,32位就A2接A0。
還有一個細節,即為什么SDRAM芯片的BA0 ~ BA1連接的是S3C2440芯片的LADDR24~LADDR25引腳?
因為,HY57V561620為32MB的SDRAM芯片,我們知道,32MB的存儲空間是需要 25 根地址線尋址的,由于BA0 ~ BA1引腳決定了訪問第幾個Bank,即決定了存儲空間的最高兩位,因此,需要使用S3C2440的25根地址線中的最高兩位來連接 BA0~BA1,這樣就可以滿足尋址的映射要求了。
總結
- 上一篇: phpbb论坛及其安装使用常见问题集
- 下一篇: XiaoHu.ai开发日志(自2018年