新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > S3C6410的DRAM控制器

S3C6410的DRAM控制器

作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
我們在項目中更換了DRAM,所以需要重新配置S3C6410DRAM控制器,結果發(fā)現(xiàn)S3C6410中的DRAM控制器還是挺復雜的。


S3C6410支持兩個DRAM片選,可以分別接最大256MB的內(nèi)存,該處理器用的DRAM控制器是來自ARM的PrimeCell Dynamic Memory Controller(PL340)。只看S3C6410的Datasheet中的DRAM部分介紹是不夠的,你還需要看PL340的技術參考文檔,這個文檔網(wǎng)上搜索一下就有了。想完全了解6410的DRAM控制器,必須兩篇文檔都看。我都看了,雖然沒完全了解,但是比看6410的datasheet要強多了。

我用的是mobile DDR-SDRAM,所以在這里大概介紹一下寄存器及配置流程。先介紹一下寄存器:

1. DRAM Controller Status Register (Address: 0x7E001000)
DRAM狀態(tài)寄存器,這是一個RO寄存器,用于讀取DRAM的狀態(tài)。
NameBitDescription
Memory chips[8:7]01=2 chips
Memory type[6:4]100=MSDR, SDR, MDDR and DDR
Memory width[3:2]00=16-bit01=32-bit
Controller Status[1:0]00=config01=ready10=paused11=low-power
實際上,讀到的有用信息就是Controller Status和Memory width。

2. DRAM Controller Command Register (Address: 0x7E001004)
DRAM命令寄存器,設置DRAM的工作狀態(tài)。
NameBitDescription
Memc_cmd[2:0]000=Go001=Sleep010=Wakeup011=Pause
100=Configure
最開始應該配置為0x4,是處于Configure狀態(tài)。在配置完所有的DRAM之后,將該寄存器設置為0x0,處于運行狀態(tài)。

3. Direct Command Register (Address: 0x7E001008)
DRAM命令寄存器,用于發(fā)送命令到DRAM和訪問DRAM中的MRS和EMRS寄存器。
NameBitDescription
Extended memory command[22]擴展命令,該bit用于連接下面的Memory command[19:18],從而組成DRAM命令
Chip number[21:20]00=chip_001=chip_110=chip_211=chip_3
Memory command[19:18]和Extended Memory command組成DRAM命令字
000=PrechargeAll001=Autorefresh
010=MRS/EMRS訪問011=NOP
100=Deep Power Down
Bank address[17:16]訪問MRS和EMRS的時候,映射為Bank地址位
Address_13_to_0[13:0]訪問MRS和EMRS的時候,映射為memory address[13:0]
通過該寄存器初始化DRAM,先設置為NOP模式,然后設置為PrechargeAll進行充電,然后設置EMRS和MRS寄存器,一般是這么一個流程。具體的要參見你所使用的DRAM的datasheet。

4. Memory Configuration Register (Address: 0x7E00100C)
DRAM的配置寄存器,這個與需要參照你所使用的DRAM的datasheet。
NameBitDescription
Memory burst[17:15]設置Burst大小
000=Burst 1001=Burst 2010=Burst4
011=Burst 8100=Burst 16
Stop_mem_clock沒有訪問時,Memory Clock自動停止
Power_down_prd[21:20]自動掉電所需的時鐘周期
AP bit[19:18]0=Address bit 101=Address bit 8
Row bits[17:16]行地址
000=11 bits001=12 bits010=13bits
011=14 bits100=15bits101=16bits
Column bits[13:0]列地址
000=8 bits001=9 bits010=10 bits
011=11 bits100=12 bits
該寄存器肯定是要配的,看看DRAM的datasheet就知道了。

5. Refresh Period Register (Address: 0x7E001010)
DRAM的刷新頻率寄存器,用于配置刷新頻率的。
NameBitDescription
Refresh period[14:0]多少個Memory的時鐘周期

6. CAS Latency Register (Address: 0x7E001014)
DRAM的CAS延時寄存器,一定要配,參考DRAM的datasheet。
NameBitDescription
CAS Latency[3:1]CAS延時多少個時鐘周期
CAS half cycle[0]0=0周期偏移1=半周期偏移
對于MDDR和SDR只能設置為0

7. t_dqss/t_mrd/t-ras/t_rc/t_rcd/t_rfc/t_rp/t_rrd/t_wr/t_wtr/t_xp/t_xsr/t_esr Registers (Address: 0x7E001018---0x7E001048)
DRAM操作中所需時間和延時寄存器,這里不作過多介紹,具體可以參考PL340文檔。

8. Memory Configuration 2 Register (Address: 0x7E00104C)
DRAM的配置寄存器2。
NameBitDescription
Read delay[12:11]讀延時
00=0 cycle01=1 cycle10,11=2 cycle
Memory type[10:8]DRAM類型
000=SDR001=DDR011=Mobile DDR
Memory width[7:6]00=16 bits01=32 bits
cke_init[3]復位后,設置CKE輸出的值
dqm_init[2]復位后,設置DQM輸出的值
a_gt_m_sync[1]ACLK頻率高于MCLK時,設置為1
Sync[0]ACLK和MCLK同步時,設置為1

9. CHIP_N_CFG Register (Address: 0x7E001200/0x7E001204)
DRAM的Chip配置寄存器,用于片選decoding設置
NameBitDescription
BRC_RBC[16]DRAM結構
0=Row-Bank-Column
1=Bank-Row-Column
Address match[15:8]片選地址比較值
Address mask[7:0]片選地址掩碼


上面介紹了一些寄存器,還有一些寄存器由于沒有用到,所以沒有去了解。下面給一個DRAM初始化的例子:

WriteReg: 0x7e0010040x4//設置DRAM控制器狀態(tài)為Configure
WriteReg: 0x7e0010100x40d//設置DRAM的刷新周期
WriteReg: 0x7e0010140x6//設置CAS延時
WriteReg: 0x7e0010180x3//設置t_DQSS
WriteReg: 0x7e00101c0xf//設置t_MRD
WriteReg: 0x7e0010200xf//設置t_RAS
WriteReg: 0x7e0010240xf//設置t_RC
WriteReg: 0x7e0010280x1f//設置t_RCD
WriteReg: 0x7e00102c0x21f//設置t_RFC
WriteReg: 0x7e0010300xf//設置t_RP
WriteReg: 0x7e0010340xf//設置t_RRD
WriteReg: 0x7e0010380x7//設置t_WR
WriteReg: 0x7e00103c0x7//設置t_WTR
WriteReg: 0x7e0010400xf//設置t_XP
WriteReg: 0x7e0010440x1f//設置t_XSR
WriteReg: 0x7e0010480x1f//設置t_ESR
WriteReg: 0x7e00100c0x10012//設置DRAM的Column, Row等屬性
WriteReg: 0x7e00104c0x0b45//設置DRAM的buswidth,type等屬性
WriteReg: 0x7e0012000x150f8//設置RBC以及片選屬性
WriteReg: 0x7e0013040x0//設置DQS延時
WriteReg: 0x7e0010080xc0000//發(fā)送NOP命令到DRAM
WriteReg: 0x7e0010080x0//發(fā)送Precharge命令到DRAM
WriteReg: 0x7e0010080x40000//發(fā)送Autorefresh命令到DRAM
WriteReg: 0x7e0010080x40000//發(fā)送Autorefresh命令到DRAM
WriteReg: 0x7e0010080xa0000//設置DRAM的EMRS寄存器
WriteReg: 0x7e0010080x80032 //設置DRAM的MRS寄存器
WriteReg: 0x7e0010040x0//設置DRAM控制器開始運行


關于DRAM控制器的配置要參見所使用的DRAM的Datasheet,了解DRAM的結構和初始化過程,才能正確配置。S3C6410的DRAM控制器比較復雜,有些寄存器也不是很理解,在ARM的PL340的文檔中也沒做太多解釋。
我的建議就是能不換DRAM最好,換了也要盡量和S3C6410板上的DRAM相近。


關鍵詞: S3C6410DRAM控制

評論


技術專區(qū)

關閉