4. CA训练流程:初始化序列与训练步骤

CA训练不是上来就一顿操作。你想想看,DDR颗粒刚上电时,内部状态是未知的。必须先走一套标准初始化流程,让颗粒进入“可训练”状态。这一步没走对,后面所有训练都是在跟空气斗智斗勇。

我个人习惯把CA训练拆成两段看:前面是初始化序列,中间才是真正的训练步骤。今天我们就按这个节奏来梳理。

4.1 初始化序列,一个都不能少

CKE(Clock Enable)保持低电平,这是第一步。DDR颗粒在上电复位期间,CKE必须为低。我见过一些新手工程师上来就给CKE拉高,结果颗粒根本没响应,白白浪费半天时间。

CKE保持低的持续时间,JEDEC标准要求至少200μs。我建议你把余量放大一点,比如设到400μs。为什么?实际项目中,电源纹波大的板子,200μs可能不够稳定。我在一个量产项目中吃过这个亏,后来统一改成500μs,再没出过问题。

接着,我们按顺序执行以下动作:

  • Reset_n置高:释放复位信号,颗粒内部的PLL和I/O开始准备
  • Clock稳定后等待tINIT:标准要求时钟稳定后至少等待5个时钟周期
  • 拉高CKE:通知颗粒准备接收命令
  • 发送NOP命令:持续至少200个时钟周期,等待内部PLL锁定
  • 执行ZQ校准(ZQCL):校准输出驱动强度和终端电阻
  • 配置MR寄存器:设置CA训练所需的参数

关键检查点:

  • CKE拉高后,需等待tXP(至少5个时钟)再发送有效命令
  • ZQCL完成后,必须检查ZQ状态寄存器,确保校准完成再进入训练
  • MR配置顺序:先MR3(读写重驱动),再MR1(驱动能力,终端电阻,写级别),最后MR2(CA训练,Vref)

4.2 初始化时序的那些坑

阶段 最小时间 典型项目设置 我踩过的坑
上电到CKE拉低 200μs 400μs 设太短,复位不完整
时钟稳定到CKE拉高 5个tCK 10个tCK 直接设了1μs,结果PLL没锁住
CKE拉高到ZQCL tXP+10个tCK 1μs 跳过等待,训练失败
ZQ校准时间 512个tCK 1μs 读回状态发现超时

4.3 MR配置,决定了CA训练能不能过

MR3:设置CA ODT(片内终端电阻)强度。CA训练需要干净的信号反射,ODT强度根据PCB走线阻抗来选。我一般用60Ω起步,跑不通再换40Ω或120Ω。别想着用RTT_NOM(数据线终端),CA ODT是独立的。

MR1:写级别(Write Leveling)使能。DDR4支持两种写对齐方式:一种是靠CK与DQS的相位关系,另一种就是写级别。CA训练前,必须使能写级别,否则后续训练数据对不齐。

MR2:CA训练使能,以及CA Vref选择。这里有两个关键位:

  • CA Training Enable(位[7])—— 置1
  • CA Vref选择(位[5:6])—— 根据平台选VrefCA2或VrefCA4

这里是容易踩坑的地方:

我曾经在配置MR2时,顺手把CA Vref选成了VrefCA4,但我的颗粒只支持VrefCA2。结果CA训练根本跑不起来。回头查spec才发现,有些颗粒只支持其中一个Vref。所以,MR配置前一定要核实颗粒手册,看看它支持哪一种。

4.4 CA训练步骤,逐一拆解

初始化完成,MR配好,就能开始CA训练了。整个流程我总结为5个步骤:

步骤1:写级别(Write Leveling)

说白了,就是让DQS信号在时序上对齐到CK。DDR4颗粒靠tDQSS(DQS滞后时间)来采样,误差不能超过±0.25tCK。训练方法是:MC发出写级别模式进入命令,然后检测DQ的值,调整DQS的延迟。

实战建议:

写级别训练成功后,MC应把DQS延迟值记录下来。我习惯把这个值写在调试日志里,后面读训练和CA训练都能参考。如果写级别失败了,别急着调延迟,先查ODT和Vref。

步骤2:读训练(Read Training)

读训练调整的是DQS之后的数据眼中心位置。这一步可以通过重试采样点(Read DQS 2X)或数据对齐模式(Data Alignment Mode)完成。

步骤3:CA训练(Command/Address Training)

这是咱们课程的核心。CA训练分为两个子步骤:

  1. CA Vref校准:MC通过MRW(Mode Register Write)修改VrefCA值,检测哪个电压值下CA通道误码率最低。一般从0.6×VDDQ开始步进,步长1%~2%
  2. CA延迟训练:MC发送特定CA模式(比如写级别模式下的CA),调整CK与CA之间的延迟,找到稳定的采样窗口

步骤4:写训练(Write Training)

以CA训练得到的写延迟为基础,调整数据对齐时间。

步骤5:训练结果验证

跑一遍CRC校验或数据回环测试。如果都能通过,恭喜你,CA训练基本稳了。

CA训练完整流程图 上电复位 & CKE低 初始化序列:CKE高 → ZQCL → 配置MR 写级别训练(WL) 读训练(RT) CA训练 Vref校准 + 延迟训练 写训练(WT) 结果验证(CRC/回环)

4.5 避坑指南,我踩过的雷

这些年做CA训练调试,踩过的坑两只手数不过来。挑几个典型的说说:

  • 坑1:写级别过了,CA训练还是失败
    我遇到过一次,写级别返回的延迟值是对的,但CA训练就是过不了。查了两天才发现,颗粒的写级别模式里有个“CA training mode”位需要额外配置,手册里没写清楚。所以说,查手册不能只看CA训练章节,整本都翻一遍。
  • 坑2:ZQCL超时
    有个项目温度变化剧烈,ZQCL校准时间飘到了1.2μs。我设的timeout是1μs,结果训练还没开始就停了。后来我把ZQCL timeout放宽到2μs,加了个超时重试机制。
  • 坑3:MR配置写错
    我们之前有一个项目,MR1里写级别使能位没置1,导致写级别训练返回的数据全是0。这其实不算训练失败,是配置不对。所以每一步都检查MR状态寄存器,比事后追查效率高得多。

最后提醒一下:

CA训练不是一次性通过的。你可能需要反复调整Vref和延迟值。我建议在调试软件里保留一套“回退参数”:如果新参数训练失败,能自动跳回上一组能用的参数。这样至少保证板子能正常启动,不至于卡死在训练阶段。

4.6 本节要点回顾

嗯,这一章内容挺多的。我把它浓缩成几条,方便你后续复习:

  1. 初始化序列必须严格按顺序执行,400μs的CKE低时间别省
  2. MR配置时,写级别使能、CA训练使能、CA Vref选型,一个都不能错
  3. CA训练的分两个子任务:Vref校准确定电压窗口,延迟训练确定采样位置
  4. 写级别训练是CA训练的前置条件,它失败了后面全是白做
  5. 训练结果用CRC或回环验证,不要只看MC返回的“Pass”标志
  6. 建议保留回退参数机制,重训失败时不至于死机