S3C6410的DRAM控制器
时间:11-20
来源:互联网
点击:
我们在项目中更换了DRAM,所以需要重新配置S3C6410的DRAM控制器,结果发现S3C6410中的DRAM控制器还是挺复杂的。
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的Chip配置寄存器,用于片选decoding设置
上面介绍了一些寄存器,还有一些寄存器由于没有用到,所以没有去了解。下面给一个DRAM初始化的例子:
WriteReg: 0x7e0010040x4//设置DRAM控制器状态为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//发送NOP命令到DRAM
WriteReg: 0x7e0010080x0//发送Precharge命令到DRAM
WriteReg: 0x7e0010080x40000//发送Autorefresh命令到DRAM
WriteReg: 0x7e0010080x40000//发送Autorefresh命令到DRAM
WriteReg: 0x7e0010080xa0000//设置DRAM的EMRS寄存器
WriteReg: 0x7e0010080x80032 //设置DRAM的MRS寄存器
WriteReg: 0x7e0010040x0//设置DRAM控制器开始运行
关于DRAM控制器的配置要参见所使用的DRAM的Datasheet,了解DRAM的结构和初始化过程,才能正确配置。S3C6410的DRAM控制器比较复杂,有些寄存器也不是很理解,在ARM的PL340的文档中也没做太多解释。
我的建议就是能不换DRAM最好,换了也要尽量和S3C6410板上的DRAM相近。
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的状态。
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命令寄存器,设置DRAM的工作状态。
Name | Bit | Description |
Memc_cmd | [2:0] | 000=Go001=Sleep010=Wakeup011=Pause 100=Configure |
3. Direct Command Register (Address: 0x7E001008)
DRAM命令寄存器,用于发送命令到DRAM和访问DRAM中的MRS和EMRS寄存器。
Name | Bit | Description |
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] |
4. Memory Configuration Register (Address: 0x7E00100C)
DRAM的配置寄存器,这个与需要参照你所使用的DRAM的datasheet。
Name | Bit | Description |
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 |
5. Refresh Period Register (Address: 0x7E001010)
DRAM的刷新频率寄存器,用于配置刷新频率的。
Name | Bit | Description |
Refresh period | [14:0] | 多少个Memory的时钟周期 |
6. CAS Latency Register (Address: 0x7E001014)
DRAM的CAS延时寄存器,一定要配,参考DRAM的datasheet。
Name | Bit | Description |
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。
Name | Bit | Description |
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设置
Name | Bit | Description |
BRC_RBC | [16] | DRAM结构 0=Row-Bank-Column 1=Bank-Row-Column |
Address match | [15:8] | 片选地址比较值 |
Address mask | [7:0] | 片选地址掩码 |
上面介绍了一些寄存器,还有一些寄存器由于没有用到,所以没有去了解。下面给一个DRAM初始化的例子:
WriteReg: 0x7e0010040x4//设置DRAM控制器状态为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//发送NOP命令到DRAM
WriteReg: 0x7e0010080x0//发送Precharge命令到DRAM
WriteReg: 0x7e0010080x40000//发送Autorefresh命令到DRAM
WriteReg: 0x7e0010080x40000//发送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控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)