S3C6410的DRAM控制器
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)。
Name | Bit | Description |
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 |
2. DRAM Controller Command Register (Address: 0x7E001004)
DRAM命令寄存器,設(shè)置DRAM的工作狀態(tài)。
Name | Bit | Description |
Memc_cmd | [2:0] | 000=Go001=Sleep010=Wakeup011=Pause 100=Configure |
3. Direct Command Register (Address: 0x7E001008)
DRAM命令寄存器,用于發(fā)送命令到DRAM和訪問DRAM中的MRS和EMRS寄存器。
Name | Bit | Description |
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] |
4. Memory Configuration Register (Address: 0x7E00100C)
DRAM的配置寄存器,這個(gè)與需要參照你所使用的DRAM的datasheet。
Name | Bit | Description |
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 |
5. Refresh Period Register (Address: 0x7E001010)
DRAM的刷新頻率寄存器,用于配置刷新頻率的。
Name | Bit | Description |
Refresh period | [14:0] | 多少個(gè)Memory的時(shí)鐘周期 |
6. CAS Latency Register (Address: 0x7E001014)
DRAM的CAS延時(shí)寄存器,一定要配,參考DRAM的datasheet。
Name | Bit | Description |
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。
Name | Bit | Description |
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è)置
Name | Bit | Description |
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相近。
評(píng)論