标题:
S3C2440 SDRAM原理到驱动解释完整版(6)
[打印本页]
作者:
look_w
时间:
2017-10-24 20:53
标题:
S3C2440 SDRAM原理到驱动解释完整版(6)
1.1.7
SDRAM
的刷新
SDRAM
之所以成为
DRAM
就是因为它要不断进行刷新(
Refresh
)才能保留住数据,因此它是
SDRAM
最重要的操作。
刷新操作与预充电中重写的操作一样,都是用
S-AMP
先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有
L-Bank
中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些很长时间没经历重写的存储体中的数据。但与所有
L-Bank
预充电不同的是,这里的行是指所有
L-Bank
中地址相同的行,而预充电中各
L-Bank
中的工作行地址并不是一定是相同的。那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是
64ms
(毫秒,
1/1000
秒),也就是说每一行刷新的循环周期是
64ms
。这样刷新时间间隔就是:
64m/
行数
s
。我们在看内存规格时,经常会看到
4096 Refresh Cycles/64ms
或
8192 Refresh Cycles/64ms
的标识,这里的
4096
与
8192
就代表这个芯片中每个
L-Bank
的行数。刷新命令一次对一行有效,刷新间隔也是随总行数而变化,
4096
行时为
15.625
μ
s
(微秒,
1/1000
毫秒),
8192
行时就为
7.8125
μ
s
。刷新操作分为两种:
Auto Refresh
,简称
AR
与
Self Refresh
,简称
SR
。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于
AR
,
SDRAM
内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说
CAS
在
RAS
之前有效。所以,
AR
又称
CBR
(
CAS Before RAS
,列提前于行定位)式刷新。由于刷新涉及到所有
L-Bank
,因此在刷新过程中,所有
L-Bank
都停止工作,而每次刷新所占用的时间为
9
个时钟周期(
PC133
标准),之后就可进入正常的工作状态,也就是说在这
9
个时钟期间内,所有工作指令只能等待而无法执行。
64ms
之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对
SDRAM
的性能造成影响,但这是没办法的事情,也是
DRAM
相对于
SRAM
(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。
SR
则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是
STR
(
Suspend to RAM
,休眠挂起于内存)。在发出
AR
命令时,将
CKE
置于无效状态,就进入了
SR
模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在
SR
期间除了
CKE
之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使
CKE
有效才能退出自刷新模式并进入正常操作状态。
SDRAM
相关寄存器:
(
1
)
BWSCON
寄存器(
BUS WIDTH & WAIT CONTROL REGISTER
)
表
2-17 SDRAM
控制寄存器(
BWSCON
)
表
2-20
刷新频率设置寄存器(
REFRESH
)
SDRAM
的刷新有效,刷新频率设置寄存器(刷新)
l
REFEN
:开启/关闭刷新功能,设置为1,开启刷新
l
TREFMD
:SDRAM刷新模式,0=CBR/AutoRefresh,
1=Self Refresh,设置为0,自动刷新
l
Trp
:行地址选通预充电时间,一般设置为0b00即可
l
Tsrc
:单行刷新时间,设置为0b11即可。
l
Refresh Counter
:内存存储单元刷新数,它通过下面公式计算出:
Refresh Counter = 2^11 + 1 – SDRAM
时钟频率(MHz)* SDRAM刷新周期(uS)
SDRAM
的刷新周期,也就是内存存储单元间隔需要多久进行一次刷新,前面内存工作原理分析可知电容数据保存上限为
64ms
,笔者使用内存芯片每个
L-Bank
共有
8192
行,因此每次刷新最大间隔为:
64ms/8192 = 7.8125uS
,如果内存工作在外部晶振频率
12MHz
下,
Refresh Counter = 1955
,如果内存工作在
100MHz
下,那么
Refresh Counter = 1269
(取大整数)
l
REFRESH
寄存器设置为:
0x8e0000 + 1269 = 0x008e04f5
(HCLK = 100MHz)
0x8e0000 + 1955 = 0x008e07a3
(HCLK = 12MHz)
(
5
)
BANKSIZE
寄存器(
BANKSIZE REGISTER
)
表
2-21 BANKSIZE
寄存器(
BANKSIZE
)
设置内存的突发传输模式,省电模式和内存容量。
l
BURST_EN
:是否开启突发模式,
0 = ARM内核禁止突发传输
1 =
开启突发传输,设置为1,开启突发传输
l
SCKE_EN
:是否使用SCKE信号作为省电模式控制信号,
0 =
不使用SCKE信号作为省电模式控制信号
1 =
使用SCKE信号作为省电模式控制信号,通常设置为1
l
SCLK_EN
: 设置向存储器输入工作频率,0 =
一直输入SCLK频率,即使没有内存操作也会输入,
1 =
仅当进行内存数据操作时才输入SCLK频率,通常设置为1
l
BK76MAP
:设置Bank6/7的内存容量,笔者使用开发板内存为两片32M内存芯片并联成64M,它们全部都外接到Bank6上,因此选择0b001
l
BANKSIZE
寄存器设置为:0xb1
(
6
)
SDRAM
模式设置寄存器
MRSRx (SDRAM MODE REGISTER SET REGISTER)
表
2-22 SDRAM
模式设置寄存器(
MRSRx
)
该寄存器用于设置
CAS
潜伏周期,可以手动设置的位只有
CL[6:4]
位,通过前面内存工作原理可知,笔者使用开发板
CL=3
,即
0b011
l
MRSR6
,MRSR7设置为:0x00000030
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0