历史上的今天
今天是:2024年12月09日(星期一)
2021年12月09日 | 第八章、Tiny4412 U-BOOT移植八 SDRAM工作时序与原理
2021-12-09 来源:eefocus
DDR出身自SDRAM,严格的说应该叫DDR SDRAM,DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思,所以,有很大一部分,两者是一样的,理解SDRAM,然后再来理解DDR。在SDRAM上的改进,效果应该更好一些,这里要感谢Chinaunix.net的大神--Tekkaman Ninja,我的内存的学习资料都是Tekkaman Ninja的博客中介绍的。以下是我对大神推荐文档的一些个人整理,OK,先上一张SDRAM的结构图,如下图8-1所示。

图8-1、SDRAM 内部结构图
下面上一张简易的SDRAM工作流程图。

图8-2、SDRAM 简易工作流程图
图中用红色标明的就是我们需要找的几个主要时间,现在开始看图说话。
1、芯片初始化
SDRAM 芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时 SDRAM 都要先对这个控制逻辑核心进行初始化。
2、行有效
初始化完成后,要想对一个 L-Bank 中的阵列进行寻址,首先就要确定行(Row),使之处于活动状态(Active),然后再确定列。简单点理解就先传行地址过来。
3、列读写
行地址确定之后,就要对列地址进行寻址了。读写的信号和列地址是同时发过来的,读写的操作取决于WE#引脚,当他使能则为写,否则为读。
在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为 tRCD,即RAS to CAS Delay(RAS 至 CAS 延迟),大家也可以理解为行选通周期,简单点理解就是说,在发完行地址后,再发列地址和读写信号时,需要延迟一下,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。
广义的 tRCD 以时钟周期(tCK,Clock Time)数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100 SDRAM,tRCD=2,代表1000/100 * 2 = 20ns 的延迟,下图是tRCD=3的时序图。

图8-3、SDRAM 时序图 tRCD说明
4、数据输出(读)
在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据 I/O 通道(DQ)输出到内存总线上了。
但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为 CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以 CL 又被称为读取潜伏期(RL,Read Latency),下图是CL=2的示意图。

图8-4、SDRAM 时序图 CL说明
5、数据输入(写)
数据写入的操作也是在 tRCD 之后进行,但此时没有了 CL(记住,CL 只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。 为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR 至少占用一个时钟周期或再多一点(时钟频率越高,tWR 占用周期越多)
6、突发长度--(Burst Lengths)
突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称 BL)。 只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是 tRCD+CL)外,其后每个数据只需一个周期的即可获得。
7、预充电
由于 SDRAM 的寻址具体独占性,所以在进行完读写操作后,如果要对同一个Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。Bank 关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。 在发出预充电命令之后,要经过一段时间才能允许发送 RAS 行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)。和 tRCD、CL 一样,tRP 的单位也是时钟周期数,具体值视时钟频率而定。
8、刷新
之所以称为 DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最重要的操作。刷新操作与预充电中重写的操作一样,都是用 S-AMP 先读再写。 但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank 中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank 预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。比如我有四片,刷新是我依次刷新四片内存中的某个地址,然后再刷下一个;而预充电的工作行地址可以不同。
那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000 秒),也就是说每一行刷新的循环周期是 64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到 4096 RefreshCycles/64ms 或 8192RefreshCycles/64ms 的标识,这里的 4096 与 8192 就代表这个芯片中每个 L-Bank 的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096 行时为 15.625μs(微秒,1/1000 毫秒),8192 行时就为 7.8125μs。
刷新操作分为两种:自动刷新(Auto Refresh,简称 AR)与自刷新(Self Refresh,简称 SR)。
SR 则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是 STR(Suspend to RAM,休眠挂起于内存)。在发出 AR 命令时,将 CKE 置于无效状态,就进入了 SR 模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在 SR 期间除了 CKE 之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使 CKE 有效才能退出自刷新模式并进入正常操作状态。
9、例说
以上就是SDRAM是主要工作步骤,对比一下最上面的简易工作流程图,时间是不是就很清楚了呢?
表8-1、DDR3时序时间参考表

CL=9ns:CAS Latency,CAS 潜伏期,CAS与读取命令发出到第一笔数据输出的时间 ----读操作
tRCD=13.5ns:RAS to CAS Delay(RAS 至 CAS 延迟),行地址发完后,再发列地址的延迟时间 ----行列地址延迟
tRP=13.5ns 关闭现有工作行,准备打开新行,经过一段时间才能允许发送 RAS 行有效命令打开新的工作行的时间 ----预充电时间
OK,至此三个时间全部清清楚楚了。
史海拾趣
|
这是一本关于Intel 80C51 以及广大的51 系列单片机的书这本书介绍给读者一些新的技术使你的8051 工程和开发过程变得简单请注意这本书的目的可不是教你各种 8051 嵌入式系统的解决方法。… 查看全部问答> |
|
一、C语言编写详解 1.工程目录最好放在: CCStudio_v3.3\\MyProjects路径下 2.CSS下和DSP6000编程紧密相关的目录结构: a.CCStudio_v3.3\\C6000\\csl\\include ---DSP6000常用头文件 b.CCStudio_v3.3\\C6000\\csl\\li ...… 查看全部问答> |
|
我用的是msp4302132,只有一个XT,接了16M晶振,我把XT的8分频用作ACLK,把ACLK用于TA产生40K的PWM波形,同时把XT不分频用作MCLK,我把ACLK,MCLK,40K PWM的三个引脚都测量了,40K波形正确,ACLK端口无输出,MCLK端口输出1.1-1.2M的波 ...… 查看全部问答> |
|
使用XP下的DDK做的一个HID识别的程序, XP下一切正常,在WIN7下只能够将鼠标识别出来,请问有什么方法可以解决这个问题?有没有支持WIN7的DDK之类的SDK包?… 查看全部问答> |
|
我在写EEPROM 后 ADC通道会被自动发变(ADC 是采用连续,扫描模式).请问一下可能是什么原因,我都找了两天了 (eeprom 读写都正常) 另外还有一个问题: 我调用内部的asin() 时如果不关中断结果是错的!! 麻烦回复!!!… 查看全部问答> |
|
制作初衷:送女友生日礼物制作材料:AT89C52,74HC138,MBI5020,电容,电阻,16*16 LED,按键实现效果:显示单个汉字,汉字逐列左移,根据点阵设计可实现简单动画效果;可操作按键切换显示模式供电方式:3节5号电池或手机电池… 查看全部问答> |
|
运行测试及典型误差源——《使用2790型数字源表开关系统测试双安全气囊充气机模块》 运行测试 按照“基础编程指南”一节中出现的顺序进行测试是一种可行的双充气泵安全气囊模块测试方案。如前所述,分流条测试往往进行多次,以确保分流条功能正常而且连接正确。示例代码试演示本指南中讨论的所有测量功能,但是这些功能的使用取决 ...… 查看全部问答> |




