新聞中心

S3C6410的DRAM控制器

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


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

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

1. DRAM Controller Status Register (Address: 0x7E001000)
DRAM狀態(tài)寄存器,這是一個(gè)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
實(shí)際上,讀到的有用信息就是Controller Status和Memory width。

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

3. Direct Command Register (Address: 0x7E001008)
DRAM命令寄存器,用于發(fā)送命令到DRAM和訪問DRAM中的MRS和EMRS寄存器。
NameBitDescription
Extended memory command[22]擴(kuò)展命令,該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的時(shí)候,映射為Bank地址位
Address_13_to_0[13:0]訪問MRS和EMRS的時(shí)候,映射為memory address[13:0]
通過該寄存器初始化DRAM,先設(shè)置為NOP模式,然后設(shè)置為PrechargeAll進(jìn)行充電,然后設(shè)置EMRS和MRS寄存器,一般是這么一個(gè)流程。具體的要參見你所使用的DRAM的datasheet。

4. Memory Configuration Register (Address: 0x7E00100C)
DRAM的配置寄存器,這個(gè)與需要參照你所使用的DRAM的datasheet。
NameBitDescription
Memory burst[17:15]設(shè)置Burst大小
000=Burst 1001=Burst 2010=Burst4
011=Burst 8100=Burst 16
Stop_mem_clock沒有訪問時(shí),Memory Clock自動(dòng)停止
Power_down_prd[21:20]自動(dòng)掉電所需的時(shí)鐘周期
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]多少個(gè)Memory的時(shí)鐘周期

6. CAS Latency Register (Address: 0x7E001014)
DRAM的CAS延時(shí)寄存器,一定要配,參考DRAM的datasheet。
NameBitDescription
CAS Latency[3:1]CAS延時(shí)多少個(gè)時(shí)鐘周期
CAS half cycle[0]0=0周期偏移1=半周期偏移
對(duì)于MDDR和SDR只能設(shè)置為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操作中所需時(shí)間和延時(shí)寄存器,這里不作過多介紹,具體可以參考PL340文檔。

8. Memory Configuration 2 Register (Address: 0x7E00104C)
DRAM的配置寄存器2。
NameBitDescription
Read delay[12:11]讀延時(shí)
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]復(fù)位后,設(shè)置CKE輸出的值
dqm_init[2]復(fù)位后,設(shè)置DQM輸出的值
a_gt_m_sync[1]ACLK頻率高于MCLK時(shí),設(shè)置為1
Sync[0]ACLK和MCLK同步時(shí),設(shè)置為1

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


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

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


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


關(guān)鍵詞: S3C6410DRAM控制

評(píng)論


技術(shù)專區(qū)

關(guān)閉