3、DDR初始化流程:上电时序、复位、时钟稳定、MRS寄存器配置、ZQ校准
DDR初始化,说白了就是给内存条「梳洗打扮」的过程。你想想看,一颗DDR颗粒刚上电时,内部状态完全是乱的,必须按照一套严格的流程把它唤醒。我最早调试DDR3的时候,就因为上电时序差了那么几毫秒,板子死活跑不起来。后来才明白——初始化一步错,后面步步错。
3.1 上电时序:别急着给电
DDR对电源的上电顺序有严格要求。不是说你同时把VDD、VDDQ、VREF都拉起来就完事了。我见过不少新手,上来就把所有电源一起怼上去,结果DDR死活不干活。
正确的顺序是这样的:
- VDD先上——核心电源先稳定
- VDDQ跟上——IO电源随后
- VREF最后——参考电压要等前两个都稳了再上
每个电源之间,至少要留200微秒的间隔。嗯,这里要注意——不是所有控制器都帮你做了这个,有时候你得自己在板级设计上保证。
3.2 复位与时钟稳定:等一等,再等一等
电源稳定之后,接下来是复位和时钟。我个人习惯把这两个放在一起看,因为它们相互依赖。
复位信号(RESET#)要保持至少200微秒的低电平。为什么是200微秒?这是JEDEC标准规定的,DDR内部需要这段时间来完成初始状态复位。
时钟信号(CK/CK#)必须在复位释放前就稳定。我建议的做法是:
- 先让PLL锁定,输出稳定的差分时钟
- 等待至少10个时钟周期
- 再释放复位信号
3.3 MRS寄存器配置:DDR的「性格」设定
MRS(Mode Register Set)说白了就是给DDR设置工作模式。DDR内部有好几个模式寄存器,每个寄存器控制不同的功能。你得通过地址线A[13:0]来写入配置。
配置顺序很重要,我个人习惯按这个顺序来:
| 步骤 | 寄存器 | 配置内容 | 说明 |
|---|---|---|---|
| 1 | MR0 | 突发长度、CAS延迟 | 先设基础参数 |
| 2 | MR1 | 驱动强度、ODT | 再设IO特性 |
| 3 | MR2 | 低功耗模式、写恢复 | 然后设时序 |
| 4 | MR3 | MPR模式等 | 最后设特殊功能 |
每个MRS命令之间,需要等待tMRD时间。DDR3是4个时钟周期,DDR4是8个。你想想看,如果不等够时间就发下一条命令,DDR内部还没处理完,配置就会乱掉。
3.4 ZQ校准:让DDR「认识」你的板子
ZQ校准,说白了就是让DDR自动调整输出驱动强度和ODT电阻值。每颗DDR颗粒的工艺偏差不同,板上的走线阻抗也不同。ZQ校准就是让DDR「自适应」你的硬件环境。
校准过程是这样的:
- DDR通过ZQ引脚外接一个240欧姆的精密电阻(1%精度)
- 内部比较器对比参考电压和实际电压
- 调整驱动管的尺寸,直到匹配
初始化时,必须做一次长校准(ZQCL),耗时约512个时钟周期。之后可以定期做短校准(ZQCS),耗时约64个时钟周期。
3.5 完整的初始化流程
把上面这些串起来,完整的初始化流程是这样的:
1. 上电:VDD → 等待200μs → VDDQ → 等待200μs → VREF
2. 时钟稳定:等待PLL锁定,至少10个时钟周期
3. 复位:保持RESET#低电平至少200μs,然后释放
4. 等待:释放复位后,等待至少500μs
5. CKE拉高:使能时钟使能
6. 等待:至少等待tXPR(DDR3为512个时钟周期)
7. MRS配置:MR0 → MR1 → MR2 → MR3
8. ZQ校准:执行ZQCL命令
9. 等待:等待tZQinit(DDR3为512个时钟周期)
10. 完成:DDR进入就绪状态
这个流程里,每一步的等待时间都不能少。我见过有人为了省时间,把复位后的500μs缩短到200μs,结果DDR初始化成功率直接掉到60%。
3.6 知识体系图
下面这张图,把DDR初始化的核心逻辑串起来了。你可以把它当作调试时的检查清单。
这张图把初始化流程分成了两个阶段:前半段是电源和时钟的「硬件准备」,后半段是MRS和ZQ的「软件配置」。我个人习惯在调试时,先确认前半段没问题,再去看后半段。这样定位问题快很多。
可可精品资料库