1 FMC
STM32F429以外的控制器中,只有FSMC(可變靜態存儲控制器),不能驅動SDRAM這樣的動態存儲器,因為驅動SDRAM時需要定時刷新。STM32F429的FMC才支持該功能,且只支持普通的SDRAM,不支持DDR類型的SDRAM。
FMC可以用於驅動SRAM、SDRAM、NOR FLASH以及NAND FLASH類型的存儲器。
1.1 通信引腳
SDRAM引腳 | FMC引腳 | 說明 |
CLK | FMC_SDCLK | 同步時鍾信號 |
CKE | FMC_SDCKE1 | 時鍾使能信號 |
CS | FMC_SDNE1 | 片選信號 |
CAS | FMC_NCAS | 列地址選通 |
RAS | FMC_NRAS | 行地址選通 |
WE | FMC_SDNWE | 寫使能 |
DQM[0:1] | FMC_NBL[0:1] | 數據輸入/輸出掩碼信號 |
BA[0:1] | FMC_A[14:15] | SDRAM芯片內部Bank地址輸入 |
A[0:11] | FMC_A[0:11] | 地址輸入 |
DQ[0:15] | FMC_D[0:15] | 數據輸入/輸出 |
CKE和CS作用:
FMC_SDCKE0,FMC_SDCLK0:FMC映射的SDRAM的存儲區域Bank1
FMC_SDCKE1,FMC_SDCLK1:FMC映射的SDRAM的存儲區域Bank2
1.2 地址映射
FMC_SDCKE0,FMC_SDCLK0:FMC映射的SDRAM的存儲區域Bank1(0xC000 0000~0xCFFF FFFF)
FMC_SDCKE1,FMC_SDCLK1:FMC映射的SDRAM的存儲區域Bank2(0xD000 0000~0xDFFF FFFF)
注意:這里的Bank和上面所講的SDRAM芯片內部存儲區域Bank1~4是不一樣的概念。
2 SDRAM控制原理
2.1 SDRAM信號線
2.2 SDRAM地址線
SDRAM包含有“A”以及“BA”兩類地址線:
A:行(Row)與列(Column)共用的地址線
BA:獨立的用於指定SDRAM芯片內部存儲陣列號(Bank)
通訊時,當RAS=0,則“行地址選通器”被選通,地址線A[11:0]表示的地址會被輸入到“行地址譯碼器”中,行地址被選中;同時地址線BA[1:0]表示的Bank也被鎖存,選中要操作的Bank號;接着CAS=0,則“列地址選通器”被選通,地址線A[11:0]表示的地址會被輸入到“列地址譯碼及鎖存器”中作為列地址,完成尋址過程。
2.3 SDRAM數據線
IS45s16400J存儲陣列的“數據寬度”是16位,但在實際應用中也可能會以8位寬度存取數據,這時我們只需要DQ[7:0]表示數據,而DQ[15:8]數據線表示的數據必須忽略。所以數據輸入輸出時,還會使用DQM[1:0]來配合,每根DQM線對應8位數據。如DQM0=0,DQM1=1時,數據線DQ[7:0]表示數據有效,而DQ[15:8]表示數據無效。
2.4 SDRAM容量計算
已知IS45s16400J芯片行地址12根線,列地址8根,4個Bank,位寬16bit。
可以計算出:
SDRAM的總單元數 =(2^行地址選擇線)*(2^列地址選擇線)*Bank選擇線=2^(12+8)*4=2^10*4=1M bits*4
SDRAM總容量 = 單元數*位寬=1M bits*4*16=64M bits = 8MB(Bytes)
2.5 SDRAM的命令
(1)命令禁止
(2)空操作
(3)行有效
(4)列讀寫
(5)預充電
(6)刷新
(7)加載模式寄存器
2.6 SDRAM初始化流程
(1)給SDRAM上電,並提供穩定的時鍾,至少100us
(2)發送“空操作”(NOP)命令
(3)發送“預充電”(PRECHARGE)命令,控制所有Bank進行預充電,並等待tPR時間
(4)發送至少2個“自動刷新”(AUTO REFRESH)命令,每個命令后等待tRFC時間
(5)發送“加載模式寄存器”(LOAD MODE REGISTER)命令,配置SDRAM工作參數,並等待tMRD時間
(6)初始化完成,開始讀寫數據。
2.7 SDRAM的讀寫流程