S3C6410的DRAM控制器

本文介绍了S3C6410 DRAM控制器的配置方法,包括关键寄存器的功能说明及其配置流程。针对mobile DDR-SDRAM提供了详细的寄存器配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S3C6410的DRAM控制器

9/27/2009 11:44:06 PM
 S3C6410的DRAM控制器 收藏
作者:ARM-WinCE

我们在项目中更换了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的状态。
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-bit   01=32-bit
 
Controller Status
 [1:0]
 00=config   01=ready   10=paused   11=low-power
 
实际上,读到的有用信息就是Controller Status和Memory width。
 
2. DRAM Controller Command Register (Address: 0x7E001004)
DRAM命令寄存器,设置DRAM的工作状态。
Name
 Bit
 Description
 
Memc_cmd
 [2:0]
 000=Go   001=Sleep   010=Wakeup   011=Pause
100=Configure
 
最开始应该配置为0x4,是处于Configure状态。在配置完所有的DRAM之后,将该寄存器设置为0x0,处于运行状态。
 
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_0   01=chip_1    10=chip_2    11=chip_3  
 
Memory command
 [19:18]
 和Extended Memory command组成DRAM命令字
000=PrechargeAll   001=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。
Name
 Bit
 Description
 
Memory burst
 [17:15]
 设置Burst大小
000=Burst 1   001=Burst 2   010=Burst4
011=Burst 8   100=Burst 16
 
Stop_mem_clock
 
 没有访问时,Memory Clock自动停止
 
Power_down_prd
 [21:20]
 自动掉电所需的时钟周期
 
AP bit
 [19:18]
 0=Address bit 10          1=Address bit 8
 
Row bits
 [17:16]
 行地址
000=11 bits   001=12 bits   010=13bits
011=14 bits   100=15bits    101=16bits
 
Column bits
 [13:0]
 列地址
000=8 bits   001=9 bits   010=10 bits
011=11 bits   100=12 bits
 
该寄存器肯定是要配的,看看DRAM的datasheet就知道了。
 
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 cycle   01=1 cycle    10,11=2 cycle
 
Memory type
 [10:8]
 DRAM类型
000=SDR   001=DDR   011=Mobile DDR
 
Memory width
 [7:6]
 00=16 bits    01=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: 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控制器开始运行
 

关于DRAM控制器的配置要参见所使用的DRAM的Datasheet,了解DRAM的结构和初始化过程,才能正确配置。S3C6410的DRAM控制器比较复杂,有些寄存器也不是很理解,在ARM的PL340的文档中也没做太多解释。
我的建议就是能不换DRAM最好,换了也要尽量和S3C6410板上的DRAM相近。
 
本文来自优快云博客,转载请标明出处: http://blog.youkuaiyun.com/nanjianhui/archive/2009/06/12/4264302.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值