DDR(六)DDR2初始化源码分析_2

14-25步的SDRAM有些就让人摸不着头脑了,因为说得不详细(因为详细了可就有的说了涉及的知识非常多,不过做的不好的就是没有提示在哪里可以得到相关资料),而且寄存器的配置说明讲额也不是很清楚

这些步骤主要是对寄存器DirectCmd的操作,贴上这个的寄存器的操作:

cmd_type和cmd_chip 按照相关的命令设置就可以了,而后面的  cmd_bank    cmd_addr  就说的不清不楚了,根本就不知道该如何配置,如:17. Issue an EMRS2 command using the DirectCmd register to program the operating parameters.,表中明明没有与EMSR2的命令啊!!

原来这几个项基本上是为MRS和EMRS这两个命令服务的,这两个命令操作这几个寄存器:模式寄存器(MSR)、扩展模式寄存器(1)(EMRS(1))、扩展模式寄存器(2)(EMRS(2))、扩展模式寄存器(3)(EMRS(3)),所以EMSR2命令其实是表示使用EMSR命令对扩展模式寄存器(2)进行操作,其他操作类似

编程(扩展)模式寄存器
为了增强使用灵活性, 突发长度, 突发类型, /CAS延迟, DLL 复位功能, 写恢复时间(WR) 都是可以定义的变量。通过预先编程模式寄存
此之外, DLL 禁止功能, 驱动电阻, 附加 CAS 延迟, ODT(终结电阻), 单线选通, 和 OCD(片外驱动电阻调整) 同样也是可以定义的变
模式寄存器就可以设定它们. 模式寄存器或者扩展模式寄存器的内容可以通过对他们进行重新设定来改变它们 .如果用户只是想改变寄存
也必须通过MRS或EMRS命令对全部寄存器位进行重新设定。
MRS, EMRS和t DLL 复位这些命令并不会影响存储阵列的内容,这意味着上电后的任意时间执行初始化操作不会改变存储的内容 。(资料上的解释,了解一下)

到这里,应该可以猜测表中cmd_bank    cmd_addr 这两栏的作用了,cmd_bank这栏决定了使用哪一个MRS和EMRS命令,如MRS、EMSR1或EMSR2或EMSR3;cmd_add这一项的每一位则对应了相应的设置,具体使用下面继续介绍。(参考了一份”DDR2 SDRAM操作时序规范“的资料,我才弄明白了这回事,下面有应用资料内容)

DDR2 SDRAM 模式寄存器设定 (MRS)
模式寄存器中的数据控制着 DDR2 SDRAM的操作模式.它控制着 CAS 延迟, 突发长度, 突发顺序, 测试模式, DLL复位, WR等各种选项,支持着 DDR2
SDRAM 的各种应用. 模式寄存器的默认值没有被定义, 所以上电之后必须按规定的时序规范来设定模式寄存器的值. 通过将  CS, RAS, CAS, WE, BA0 ,
BA1置低来发布模式寄存器设定命令, 操作数通过地址脚 A0 ~ A15同步送出. DDR2 SDRAM 在写模式寄存器之前,应该通过拉高CKE而完成了所有簇的裕充
电。模式寄存器设定命令的命令周期  (tMRD)必须满足完成对模式寄存器的写操作。在进行正常操作时,只要所有的簇都已经处于预充电完成状态,模式寄存
器都可以使用同一命令重新设定. 模式寄存器不同的位表示不同的功能. A0 ~ A2 设定突发长度是4还是8。 突发长度的译码规则与DDR SDRAM相同. A3定义
了突发地址顺序。A4 ~ A6定义了CAS延迟。. DDR2不支持半时钟延迟。 A7 设定测试模式. A8设定 DLL 复位。 对通常的 MRS操作,A7必须设定为低。
A9 ~ A11定义了写恢复时间WR. 详细情况见下面的示意图:

从上面的表格就很清楚了,BA2、BA1、BA0对应的是cmd_bank 栏,A15-A0则对应了cmd_addr ;

DDR2 SDRAM 扩展模式寄存器设定
EMRS(1)
扩展模式寄存器(1) 存储着激活或禁止DLL的控制信息, 输出驱动强度, ODT 值的选择 和附加延迟等信息. 扩展寄存器(1)的默认值没有被定义, 因此,
上电之后,扩展模式寄存器(1)的值必须按正确的步骤来设定。 写扩展模式寄存器(1)是通过拉低CS, RAS, CAS, WE ,置袄 BA0, 同时控制地址线
A0 ~ A13的状态。 在写扩展模式寄存器(1)之前,DDR2 SDRAM 应该通过将 CKE拉高完成所有簇的预充电。扩展模式寄存器(1)设定命令的命令周
期  (tMRD)必须满足完成对扩展模式寄存器(1)的写操作。在进行正常操作时,只要所有的簇都已经处于预充电完成状态,扩展模式寄存器(1)都可以使
用同一命令重新设定.. A0控制着DLL 激活或禁止。 A1被用于激活数据输出驱动能力为一半。A3~A5 决定着附加延迟, A2和 A6 用语 ODT 值的选定,
A7~A9 用于控制 OCD, A10 被用于禁止  DQS#, A11 被用于 RDQS 的激活。
DLL 激活/禁止
对通常的操作, DLL必须被激活。在上电初始化过程中,必须激活  DLL, 在开始正常操作时,要先关闭DLL。在进入自我刷新操作时,DLL会被自动禁止,
当结束自我刷新时,DLL会被自动激活。一旦 DLL被激活(随之将复位),为了使外部时钟和内部始终达到同步,在发布读命令之前必须至少要过200个
时钟周期。没有等待同步可能会导致tAC 或 tDQSCK参数错误。
EMRS(2)
扩展模式寄存器r(2)控制着刷新和相关的特性。扩展模式寄存器(2)的默认值没有被定义, 因此在上电后,必须按规定的时序对扩展模式寄存器 (2) 进行设定。通
过拉低S, RAS, CAS, WE,置高 BA1 拉低 BA0来发布扩展模式寄存器(2)的设定命令。同时控制地址线A0 ~ A15的状态. 在写扩展模式寄存器(2)之前,
DDR2 SDRAM 应该通过将 CKE拉高完成所有簇的预充电。扩展模式寄存器(2)设定命令的命令周期  (tMRD)必须满足完成对扩展模式寄存器(2)的写
操作。在进行正常操作时,只要所有的簇都已经处于预充电完成状态,扩展模式寄存器(2)都可以使用同一命令重新设定.

上图有些位没有使用,是保留位

有了上面的知识提示,应该就可以比较没有障碍得对SDRAM进行初始化,资料中的SDRAM的初始化过程与DATASHEET里面的步骤基本相同,贴上来:

上电和初始化时序
1. 对于上电和初始化来说,下列时序是必须的。(应该说的是DATASHEET里面的第1步)
供电且保持CKE 低于 0.2*VDDQ , ODT*1 要处于低电平状态 (所有的其余脚可以都没有定义.) 电源上升沿不可以有任何翻转,上升沿时间不能大于 200mS;
并且要求在电压上升沿过程中满足, VDD>VDDL>VDDQ且 VDD-VDDQ<0.3 volts.
- VDD
*2, VDDL
*2 和 VDDQ必须由同一个电源芯片供电, 并且
- VTT 最大只能到 0.95 V, 并且
- Vref 要时刻等于 VDDQ/2.,紧跟VDDQ变化。
或者
-在给 VDDL上电的同时或之前就给VDD
*2
.上电
-在给  VDDQ上电的同时或之前就给VDDL
*2
上电
-在给VTT & VREF上电的同时或之前就给VDDQ上电.
上面的两个条件至少要满足一个。
2. 开始时钟信号并保持信号稳定.
3.在稳定电源和时钟(CK, /CK)之后至少200s, 然后发布 NOP 或者取消选定命令  &拉高CKE.
4. 等待至少 400ns然后发布预充电所有簇命令.在等待的400ns过程中要发布NOP或者取消选定命令.
5. 发布 EMRS(2)命令. (EMRS(2) 命令, 需要将 BA0拉低, 将 BA1拉高.)
6. 发布 EMRS(3) 命令. (为了发布EMRS(3)命令,将 BA0和 BA1拉高.)
7.发布 EMRS命令以激活 DLL. (为了发布"DLL激活" 命令,将 A0拉低, BA0拉高 并且将 BA1-2和 A13-A15置低.)
8. 发布MRS命令实现  “DLL复位”
*2.
(为了发布DLL 复位命令, 需要将 A8拉高 并使 BA0-1为低)
9. 发布预充电所有簇命令。
10. 至少发布两次自动刷新命令.
11. 将 A8拉低,发布模式寄存器设定命令(MRS)对芯片进行初始化操作. (也就是不对 DLL复位,编程芯片的操作参数)
12.在第8步之后至少过200个时钟周期,执行OCD 校准 ( 片外驱动电阻调校 ).
如果不使用OCD校准, EMRS OCD 校准模式结束命令 (A9=A8=A7=0) 必须在EMRS OCD默认命令 (A9=A8= A7=1)之后发布,用来设定EMRS的其它操
作参数。
13. 现在, DDR2 SDRAM 就准备好可以进行普通的操作了。.
*1) 为了保证 ODT关闭, VREF必须有效 并且 ODT脚必须拉低.
*2) 如果 VDDL或VDD 的电平值在正常操作过程中人为改变, (例如e, 为了 VDD 相交测试, 或者节省功率)
则必须执行“DLL 复位”.

猜你喜欢

转载自blog.csdn.net/JerryGou/article/details/83831323