同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM)特點(diǎn):
同步:memory工作時(shí)需要同步時(shí)鐘
動(dòng)態(tài):存儲(chǔ)陣列需要不斷刷新
隨機(jī):自由指定地址讀寫(xiě)數(shù)據(jù)
容量大價(jià)格便宜
SDRAM存儲(chǔ)結(jié)構(gòu)
SDRAM支持多BANK,通過(guò)指定BANK號(hào),行地址,列地址找到目標(biāo)存儲(chǔ)單元。
圖1 存儲(chǔ)結(jié)構(gòu)
? ?
SDRAM信號(hào)線
SDRAM內(nèi)部框圖
如下以W9825G6KH內(nèi)部框圖舉例:
圖2 W9825G6KH框圖
1時(shí)鐘控制
2命令控制
3地址控制
4存儲(chǔ)陣列,4個(gè)BANK
5數(shù)據(jù)
SDRAM常用命令表
SDRAM通過(guò)信號(hào)線上的不同狀態(tài)來(lái)產(chǎn)生各種命令。
表1 SDRAM命令表
?
注意:L=Low Level H=High Level X=don't Care A10=H表示Precharge all bank,A10=L表示Precharge選擇的BANK
No-Operation 表示選中當(dāng)前設(shè)備,當(dāng)前沒(méi)有操作。
Bank/Row active 在對(duì)SDRAM進(jìn)行讀寫(xiě)時(shí),需要先激活對(duì)應(yīng)的bank和行,該命令用于選擇一個(gè)bank的一行進(jìn)行激活,以便接下來(lái)進(jìn)行讀寫(xiě)訪問(wèn)。
Read 激活的行有效之后,對(duì)列地址進(jìn)行尋址,讀出數(shù)據(jù)。
Write 激活的行有效之后,對(duì)列地址進(jìn)行尋址,寫(xiě)入數(shù)據(jù)。
Precharge 預(yù)充電命令,在某一行上的讀寫(xiě)完成之后,關(guān)閉現(xiàn)有的行,準(zhǔn)備激活新行。
Refresh 刷新命令,SDRAM需要不斷的刷新操作才能保存數(shù)據(jù),根據(jù)SDRAM設(shè)備參數(shù)按照固定周期進(jìn)行刷新。
Load Mode Register 加載模式寄存器,修改SDRAM設(shè)備的功能參數(shù),burst模式,latency等。
圖3 mode register
? ?
SDRAM Power On Sequence
圖4 SDRAM Power On
AT32 SDRAM控制器
SDRAM控制器主要特點(diǎn)如下:
同時(shí)支持兩個(gè)SDRAM設(shè)備
支持8位/16位數(shù)據(jù)總線寬度
支持13位行地址,11位列地址(最大可以支持4x16Mx16bit=128MB)
支持4個(gè)內(nèi)部Bank
支持word/half word/byte訪問(wèn)
支持Burst Read,有6x32bit讀FIFO緩存
SDRAM時(shí)鐘支持HCLK/2, HCLK/3, HCLK/4
支持低功耗模式(自刷新模式,掉電模式)
地址映射
圖5 SDRAM地址映射
?
SDRAM Device1起始地址:0xC0000000 SDRAM Device2起始地址:0xD0000000
I/O引腳配置
表2 SDRAM IO引腳列表
使用SDRAM IO引腳初始化如下,可根據(jù)具體使用引腳進(jìn)行修改:
SDRAM讀寫(xiě)時(shí)序
寫(xiě)SDRAM時(shí)序
讀SDRAM時(shí)序
? ?
SDRAM配置
通過(guò)配置寄存器SDRAM_CTRLx來(lái)設(shè)置SDRAM設(shè)備的容量,訪問(wèn)方式等,詳細(xì)信息可參考RM。此寄存器包括如下配置:(W9825G6KH作為示例)
行地址/列地址配置
?
行地址和列地址根據(jù)SDRAM設(shè)備地址位數(shù)進(jìn)行配置,如下示例:
數(shù)據(jù)總線寬度
?
根據(jù)SDRAM設(shè)備支持?jǐn)?shù)據(jù)總線寬度進(jìn)行配置,如下示例支持16bit數(shù)據(jù)寬度:
內(nèi)部區(qū)塊個(gè)數(shù)
?
SDRAM設(shè)備支持內(nèi)部bank個(gè)數(shù):
列地址選通延遲(CAS)
?
SDRAM設(shè)備支持延遲:
寫(xiě)保護(hù)配置(WRP)
如果配置了寫(xiě)保護(hù),在寫(xiě)SDRAM設(shè)備時(shí)會(huì)參數(shù)Bus error。
XMC_SDCLK時(shí)鐘分頻(CLKDIV)
BSTR(連續(xù)讀)
RD(讀延時(shí))
配置代碼例程:
? ?
SDRAM時(shí)序參數(shù)配置
要正常使用SDRAM設(shè)備,需要正確配置此部分的實(shí)現(xiàn)參數(shù),此參數(shù)可在SDRAM設(shè)備的datasheet中找到對(duì)應(yīng)值。
配置寄存器SDRAM_TMx:
TMRD(加載模式寄存器到激活延遲)
TXSR(退出自刷新延遲)
TRAS(自刷新周期)
TRC(刷新命令到激活命令延遲)
TWR(寫(xiě)命令到預(yù)充電命令延遲)
TRP(預(yù)充電到激活命令延遲)
TRCD(行激活到列延遲)
例TRCD:最小18ns,SDRAM時(shí)鐘144MHz,一個(gè)SDRAM時(shí)鐘大約為7ns,因此TRCD至少要配置為延遲3個(gè)SDRAM時(shí)鐘周期。 例TWR:SDRAM設(shè)備要求2個(gè)SDRAM時(shí)鐘,因此配置為2
SDRAM設(shè)備對(duì)時(shí)序要求:(W9825G6KH作為示例)
配置代碼例程:
? ?
SDRAM啟動(dòng)序列配置
Clock enable時(shí)鐘使能
預(yù)充電
設(shè)置刷新計(jì)數(shù)器
計(jì)算方法:counter=(SDRAM resfresh period / number of rows)-20;
刷新速率=64ms/8K=7.8125us; counter=7.8125us*144MHz–20=1105;
自動(dòng)刷新
加載模式寄存器
SDRAM例程
SDRAM Basic 此例程配置SDRAM設(shè)備之后,對(duì)SDRAM設(shè)備進(jìn)行讀寫(xiě)操作,并判斷讀寫(xiě)數(shù)據(jù)是否正確,包括如下步驟:
GPIO初始化
SDRAM配置
SDRAM啟動(dòng)序列
SDRAM讀寫(xiě)訪問(wèn)
?
SDRAM DMA
此例程配置SDRAM設(shè)備之后,使用對(duì)SDRAM設(shè)備進(jìn)行讀寫(xiě)操作,并判斷讀寫(xiě)數(shù)據(jù)是否正確,包括如下步驟:
GPIO初始化(同SDRAM Basic)
SDRAM配置(同SDRAM Basic)
SDRAM啟動(dòng)序列(同SDRAM Basic)
SDRAN DMA讀寫(xiě)
? ? ?
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17149瀏覽量
351224 -
控制器
+關(guān)注
關(guān)注
112文章
16367瀏覽量
178114 -
SDRAM
+關(guān)注
關(guān)注
7文章
423瀏覽量
55229 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163853 -
AT32
+關(guān)注
關(guān)注
1文章
113瀏覽量
2102
原文標(biāo)題:AT32講堂039 | AT32 MCU SDRAM控制器的使用
文章出處:【微信號(hào):AT32 MCU 雅特力科技,微信公眾號(hào):AT32 MCU 雅特力科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論