S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动
用的DRAM的datasheet。
4) 内存配置寄存器(P1MEMCFG)
P1MEMCFG | 位 | 描述 | 初始值 |
保留 | [31:23] | 未定义 | |
启动芯片 | [22] | 使能下面数量的芯片开始执行刷新操作: 00 = 1芯片 01 = 2芯片 10/11 = 保留 | 00 |
QoS master位 | [20:18] | 设置QoS值: 000 = ARID[3:0] 001= ARID[4:1] 010 = ARID[5:2] 011 = ARID[6:3] 100 = ARID[7:4] 101~111 = 保留 | 000 |
内存突发访问 | [17:15] | 在内存读写时,设置突发访问数据的数量: 000 = 突发访问1个数据 001 = 突发访问2个数据 010 = 突发访问4个数据 011 = 突发访问8个数据 100 = 突发访问16个数据 101~111 = 保留 该值必须通过DIRECTORYCMD寄存器,写入到内存的模式寄存器中,并且数据必须匹配 | 010 |
Bank地址 | [17:16] | 当以MRS或EMRS命令访问时,映射到外部存储器的Bank地址位 | |
Stop_mem_clock | [14] | 当停止芯片时钟,不允许访问内存数据时,置位 | 0 |
自动节能 | [13] | 当该位置位时,芯片自动进入节能状态 | 0 |
关闭芯片延迟时间 | [12:7] | 当关闭内存芯片时,延迟的时钟个数 | 000000 |
自动预充电位 | [6] | 内存地址中自动预充电位的位置: 0 = ADDR[10] 1 = ADDR[8] | 0 |
行地址位数 | [5:3] | AXI地址线上的行地址位数: 000 = 11位 001 = 12位 010 = 13位 011 = 14位 100 = 15位 101= 16位 | 100 |
列地址位数 | [2:0] | AXI地址线上的列地址位数: 000 = 8位 001 = 9位 010 = 10位 011 = 11位 100 = 12位 | 000 |
参考DRAM的datasheet。
5) 内存刷新时间寄存器(P1REFRESH)
P1REFRESH | 位 | 描述 | 初始值 |
[31:15] | - | ||
刷新时间 | [14:0] | 内存刷新时钟周期数 | 0xA60 |
6) CAS 延迟寄存器(P1CASLAT)
P1CASLAT | 位 | 描述 | 初始值 |
[31:4] | - | - | |
CAS延迟 | [3:1] | 列地址选通延迟内存时钟周期数 | 0xA60 |
CAS HALF周期 | [0] | 设置CAS延迟数是否为半个内存时钟周期 0 = 以[3:1]设置数为CAS延迟时钟周期 1 = 以[3:1]设置数的一半为CAS延迟时钟周期 | 0 |
参考DRAM的datasheet。
下面13个寄存器用于DRAM操作中所需时间和延时寄存器,具体可以参考PL340文档。
7) T_DQSS寄存器(P1T_DQSS)
P1T_DQSS | 位 | 描述 | 初始值 |
[31:2] | - | - | |
t_DQSS | [1:0] | 写入DQS的时钟周期 | 1 |
8) T_MRD寄存器(P1T_MRD)
P1T_MRD | 位 | 描述 | 初始值 |
[31:7] | - | - | |
t_ MRD | [6:0] | 设置模式寄存器命令时间(内存时钟周期为单位) | 0x02 |
9) T_RAS寄存器(P1T_RAS)
P1T_RAS | 位 | 描述 | 初始值 |
[31:4] | - | - | |
t_RAS | [3:0] | 设置行地址选通到预充电操作延迟时间(内存时钟周期为单位) | 0x7 |
10) T_RC寄存器(P1T_RC)
P1T_RC | 位 | 描述 | 初始值 |
[31:4] | - | - | |
t_RC | [3:0] | 设置激活内存Bank x到激活另外一个Bank x操作的延迟时间(内存时钟周期为单位) | 0xB |
11) T_RCD寄存器(P1T_RCD)
P1T_RCD | 位 | 描述 | 初始值 |
[31:6] | - | - | |
Scheduled_RCD | [5:3] | 设置t_RCD-3 | 011 |
t_RCD | [2:0] | 设置RAS到CAS操作的最小延迟时间(内存时钟周期为单位) | 101 |
12) T_RFC寄存器(P1T_RFC)
P1T_RFC | 位 | 描述 | 初始值 |
[31:10] | - | - | |
Scheduled_RFC | [9:5] | 设置t_RFC-3 | 0x10 |
t_RFC | [4:0] | 设置自动刷新命令操作延迟时间(内存时钟周期为单位) | 0x12 |
13) T_RP寄存器(P1T_RP)
P1T_RP | 位 | 描述 | 初始值 |
[31:6] | - | - | |
Scheduled_RP | [5:3] | 设置t_RP-3 | 011 |
t_RFC | [2:0] | 设置预充电到RAS操作的延迟时间(内存时钟周期为单位) | 101 |
14) T_RRD寄存器(P1T_RRD)
P1T_ RRD | 位 | 描述 | 初始值 |
[31:4] | - | - | |
t_RRD | [3:0] | 设置激活内存Bank x到激活内存Bank y操作的延迟时间(内存时钟周期为单位) | 0x2 |
15) T_WR寄存器(P1T_WR)
P1T_ WR | 位 | 描述 | 初始值 |
[31:3] | - | - | |
t_WR | [2:0] | 设置写入数据到预充电操作的延迟时间(内存时钟周期为单位) | 011 |
16) T_WTR寄存器(P1T_WTR)
P1T_ WTR | 位 | 描述 | 初始值 |
[31:3] | - | - | |
t_WTR | [2:0] | 设置写入数据到读取数据操作的延迟时间(内存时钟周期为单位) | 011 |
17) T_XP寄存器(P1T_XP)
P1T_ XP | 位 | 描述 | 初始值 |
[31:8] | - | - | |
t_XP | [7:0] | 设置退出关闭电源命令的延迟时间(内存时钟周期为单位) | 0x1 |
18) T_XSR寄存器(P1T_XSR)
P1T_ XSR | 位 | 描述 | 初始值 |
[31:8] | - | - | |
t_XSR | [7:0] | 设置退出自刷新命令的延迟时间(内存时钟周期为单位) | 0xA |
19) T_ESR寄存器(P1T_ESR)
P1T_ ESR | 位 | 描述 | 初始值 |
[31:8] | - | - | |
t_ESR | [7:0] | 设置自刷新命令的延迟时间(内存时钟周期为单位) | 0x14 |
内存初始化代码:
(开发环境为ADS1.2)
- MEM_SYS_CFGEQU0x7e00f120
- DMC1_BASEEQU0x7e001000
- INDEX_DMC_MEMC_STATUSEQU0x0
- INDEX_DMC_MEMC_CMDEQU0x4
- INDEX_DMC_DIRECT_CMDEQU0x08
- INDEX_DMC_MEMORY_CFGEQU0x0c
- INDEX_DMC_REFRESH_PRDEQU0x10
- INDEX_DMC_CAS_LATENCYEQU0x14
- INDEX_DMC_T_DQSSEQU0x18
- INDEX_DMC_T_MRDEQU0x1c
- INDEX_DMC_T_RASEQU0x20
- INDEX_DMC_T_RCEQU0x24
- INDEX_DMC_T_RCDEQU0x28
- INDEX_DMC_T_RFCEQU0x2c
- INDEX_DMC_T_RPEQU0x30
- INDEX_DMC_T_RRDEQU0x34
- INDEX_DMC_T_WREQU0x38
- INDEX_DMC_T_WTREQU0x3c
- INDEX_DMC_T_XPEQU0x40
- INDEX_DMC_T_X
S3C6410Tiny6410Mini6410MoblieDDR内存驱 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)