S3C6410支持两个DRAM片选,可以分别接最大256MB的内存,该处理器用的DRAM控制器是来自ARM的PrimeCell Dynamic Memory Controller(PL340)。只看S3C6410的Datasheet中的DRAM部分介绍是不够的,你还需要看PL340的技术参考文档,这个文档网上搜索一下就有了。想完全了解6410的DRAM控制器,必须两篇文档都看。我都看了,虽然没完全了解,但是比看6410的datasheet要强多了。
我用的是mobile DDR-SDRAM,所以在这里大概介绍一下寄存器及配置流程。先介绍一下寄存器:
1. DRAM Controller Status Register (Address: 0x7E001000)
DRAM状态寄存器,这是一个RO寄存器,用于读取DRAM的状态。
实际上,读到的有用信息就是Controller Status和Memory width。
2. DRAM Controller Command Register (Address: 0x7E001004)
DRAM命令寄存器,设置DRAM的工作状态。
最开始应该配置为0x4,是处于Configure状态。在配置完所有的DRAM之后,将该寄存器设置为0x0,处于运行状态。
3. Direct Command Register (Address: 0x7E001008)
DRAM命令寄存器,用于发送命令到DRAM和访问DRAM中的MRS和EMRS寄存器。
通过该寄存器初始化DRAM,先设置为NOP模式,然后设置为PrechargeAll进行充电,然后设置EMRS和MRS寄存器,一般是这么一个流程。具体的要参见你所使用的DRAM的datasheet。
4. Memory Configuration Register (Address: 0x7E00100C)
DRAM的配置寄存器,这个与需要参照你所使用的DRAM的datasheet。
该寄存器肯定是要配的,看看DRAM的datasheet就知道了。
5. Refresh Period Register (Address: 0x7E001010)
DRAM的刷新频率寄存器,用于配置刷新频率的。
6. CAS Latency Register (Address: 0x7E001014)
DRAM的CAS延时寄存器,一定要配,参考DRAM的datasheet。
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。
9. CHIP_N_CFG Register (Address: 0x7E001200/0x7E001204)
上面介绍了一些寄存器,还有一些寄存器由于没有用到,所以没有去了解。下面给一个DRAM初始化的例子:
WriteReg: 0x7e001004 0x4 //设置DRAM控制器状态为Configure
WriteReg: 0x7e001010 0x40d //设置DRAM的刷新周期
WriteReg: 0x7e001014 0x6 //设置CAS延时
WriteReg: 0x7e001018 0x3 //设置t_DQSS
WriteReg: 0x7e00101c 0xf //设置t_MRD
WriteReg: 0x7e001020 0xf //设置t_RAS
WriteReg: 0x7e001024 0xf //设置t_RC
WriteReg: 0x7e001028 0x1f //设置t_RCD
WriteReg: 0x7e00102c 0x21f //设置t_RFC
WriteReg: 0x7e001030 0xf //设置t_RP
WriteReg: 0x7e001034 0xf //设置t_RRD
WriteReg: 0x7e001038 0x7 //设置t_WR
WriteReg: 0x7e00103c 0x7 //设置t_WTR
WriteReg: 0x7e001040 0xf //设置t_XP
WriteReg: 0x7e001044 0x1f //设置t_XSR
WriteReg: 0x7e001048 0x1f //设置t_ESR
WriteReg: 0x7e00100c 0x10012 //设置DRAM的Column, Row等属性
WriteReg: 0x7e00104c 0x0b45 //设置DRAM的buswidth,type等属性
WriteReg: 0x7e001200 0x150f8 //设置RBC以及片选属性
WriteReg: 0x7e001304 0x0 //设置DQS延时
WriteReg: 0x7e001008 0xc0000 //发送NOP命令到DRAM
WriteReg: 0x7e001008 0x0 //发送Precharge命令到DRAM
WriteReg: 0x7e001008 0x40000 //发送Autorefresh命令到DRAM
WriteReg: 0x7e001008 0x40000 //发送Autorefresh命令到DRAM
WriteReg: 0x7e001008 0xa0000 //设置DRAM的EMRS寄存器
WriteReg: 0x7e001008 0x80032 //设置DRAM的MRS寄存器
WriteReg: 0x7e001004 0x0 //设置DRAM控制器开始运行
我用的是mobile DDR-SDRAM,所以在这里大概介绍一下寄存器及配置流程。先介绍一下寄存器:
1. DRAM Controller Status Register (Address: 0x7E001000)
DRAM状态寄存器,这是一个RO寄存器,用于读取DRAM的状态。
实际上,读到的有用信息就是Controller Status和Memory width。
2. DRAM Controller Command Register (Address: 0x7E001004)
DRAM命令寄存器,设置DRAM的工作状态。
最开始应该配置为0x4,是处于Configure状态。在配置完所有的DRAM之后,将该寄存器设置为0x0,处于运行状态。
3. Direct Command Register (Address: 0x7E001008)
DRAM命令寄存器,用于发送命令到DRAM和访问DRAM中的MRS和EMRS寄存器。
通过该寄存器初始化DRAM,先设置为NOP模式,然后设置为PrechargeAll进行充电,然后设置EMRS和MRS寄存器,一般是这么一个流程。具体的要参见你所使用的DRAM的datasheet。
4. Memory Configuration Register (Address: 0x7E00100C)
DRAM的配置寄存器,这个与需要参照你所使用的DRAM的datasheet。
该寄存器肯定是要配的,看看DRAM的datasheet就知道了。
5. Refresh Period Register (Address: 0x7E001010)
DRAM的刷新频率寄存器,用于配置刷新频率的。
6. CAS Latency Register (Address: 0x7E001014)
DRAM的CAS延时寄存器,一定要配,参考DRAM的datasheet。
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。
9. CHIP_N_CFG Register (Address: 0x7E001200/0x7E001204)
上面介绍了一些寄存器,还有一些寄存器由于没有用到,所以没有去了解。下面给一个DRAM初始化的例子:
WriteReg: 0x7e001004 0x4 //设置DRAM控制器状态为Configure
WriteReg: 0x7e001010 0x40d //设置DRAM的刷新周期
WriteReg: 0x7e001014 0x6 //设置CAS延时
WriteReg: 0x7e001018 0x3 //设置t_DQSS
WriteReg: 0x7e00101c 0xf //设置t_MRD
WriteReg: 0x7e001020 0xf //设置t_RAS
WriteReg: 0x7e001024 0xf //设置t_RC
WriteReg: 0x7e001028 0x1f //设置t_RCD
WriteReg: 0x7e00102c 0x21f //设置t_RFC
WriteReg: 0x7e001030 0xf //设置t_RP
WriteReg: 0x7e001034 0xf //设置t_RRD
WriteReg: 0x7e001038 0x7 //设置t_WR
WriteReg: 0x7e00103c 0x7 //设置t_WTR
WriteReg: 0x7e001040 0xf //设置t_XP
WriteReg: 0x7e001044 0x1f //设置t_XSR
WriteReg: 0x7e001048 0x1f //设置t_ESR
WriteReg: 0x7e00100c 0x10012 //设置DRAM的Column, Row等属性
WriteReg: 0x7e00104c 0x0b45 //设置DRAM的buswidth,type等属性
WriteReg: 0x7e001200 0x150f8 //设置RBC以及片选属性
WriteReg: 0x7e001304 0x0 //设置DQS延时
WriteReg: 0x7e001008 0xc0000 //发送NOP命令到DRAM
WriteReg: 0x7e001008 0x0 //发送Precharge命令到DRAM
WriteReg: 0x7e001008 0x40000 //发送Autorefresh命令到DRAM
WriteReg: 0x7e001008 0x40000 //发送Autorefresh命令到DRAM
WriteReg: 0x7e001008 0xa0000 //设置DRAM的EMRS寄存器
WriteReg: 0x7e001008 0x80032 //设置DRAM的MRS寄存器
WriteReg: 0x7e001004 0x0 //设置DRAM控制器开始运行