command bus training(×16 die)
先提一下FSP:
LPDDR4支持两种工作频率的切换,并且会将这两种训练后的工作频率的模式寄存器的parameter信息全部保存,通过模式寄存器的配置来实现两种工作频率的切换而不会出现未训练传输不可靠的状态。
LPDDR4会提供默认的判决电压Vref(CA)值支持un-terminated、低频率的工作,但是需要训练到支持terminated、高频率工作的判决电压值。
不论LPDDR4从哪一种工作频率进入训练,LPDDR4在训练过程都会自动的切换至另一种工作频率的配置完成训练,从训练中退出之后LPDDR4继续回到进入训练前的工作频率,训练前的状态是被认为一个训练好的工作状态。训练好之后的判决电压不会被保留到训练的工作频率,需要在退出训练后写到寄存器。
训练中引脚各自作用:
DQS[0]为input,捕获DQ[6:0]的值,DQ[6:0]需要去toggle;
DQ[5:0]为input,设置CA判决电压的值,DQ[6]为input,设置CA判决电压的范围,mapping关系如下:
DQ[7]和DMI[0]为input,输入电平可以是有效的也可以是悬空的;
DQ[13:8]为output,返回CA bus的捕获值by CS,下图为mapping关系:
DQS[1] 、DMI[1] 、DQ[15:14]为output,SDRAM可能会驱动为有效值也可能悬空。
如何进入训练模式:首先通过MRW配置MR13 OP[0] = 1, 即command bus training mode enabled,在配完之后,等待tMRD之后,CKE可能会拉低,然后LPDDR4会进入另一个FSP-OP,完成训练模式的进入;等待tCAENT,LPDDR4可以接受CA判决电压值和范围的设定。
command bus training可以从idle和self refresh状态进入,当从self refresh进入CBT时,SDRAM不能是一个power down状态,也就是CKE必须保持为高在进入CBT之前。无论是在哪一种状态进入CBT,在离开CBT时SDRAM还是会回到进入之前的状态。
single-rank CBT sequence:(从默认状态训练高频)
- 设置所有channel的FSP-WR为1(MR13 OP[6]=1)
- 发送MRW命令进入CBT(MR13 OP[0]=1)
- 驱动CKE为低,并且将CK频率改为高频
- 训练(CA判决电压、CS、CA)
- 离开训练,将CK频率改回低频之后,驱动CKE为高,SDRAM会自动恢复训练前状态的寄存器值
- 所有寄存器训练值写入
- 通过MRW去配置FSP-OP为1,并且将CK改变到高频,即进入训练过的、高频的工作状态,在此状态可以进行一些normal操作或者进行其他频点训练。
多rank CBT sequence: (从默认状态训练高频)
- 将所有的channel和rank写寄存器,配置MR13 OP[6]=1
- 读MR0 OP[7],判断哪个rank是terminating的
- 对terminating的rank发送写寄存器命令,进入CBT(MR13 OP[0]=1)
- 将terminating的rank的CKE拉低,将CK改为高频
- 训练(CA判决电压、CS、CA)
- 离开训练,将CK频率改回低频之后,驱动CKE为高,terminating的rank会自动恢复训练前状态的寄存器值
- 对non-terminating的rank发送写寄存器命令,进入CBT(MR13 OP[0]=1)但是要保持CKE为高
- 通过MRW去配置terminating的rank FSP-OP为1,并且将CK改变到高频
- 驱动non-terminating的rank CKE为低
- 训练(CA判决电压、CS、CA)
- 通过MRW去配置terminating的rank FSP-OP为0
- 离开训练,将CK频率改回低频之后,驱动CKE为高,non-terminating的rank会自动恢复训练前状态的寄存器值
- 所有寄存器训练值写入
- 通过MRW去配置FSP-OP为1,并且将CK改变到高频,即进入训练过的、高频的工作状态,在此状态可以进行一些normal操作或者进行其他频点训练。
CBT时序图如下:
根据时序图,在CKE拉低后必须满足tCKELCK之后,clk可以停止或者切换;在片选拉高之前新的时钟频率必须满足tCKPRECS,在此期间保持CS/CA为低,在接收到training pattern之后,即CS拉高之后,频率至少需要保持tCKPSTCS;SDRAM不会以第一个DQS的边沿对DQ[6:0]进行捕获,每个input DQS(DQS[0])需要至少提供两个连续的脉冲才会用来捕获DQ[6:0]。
CA判决电压的更新需要满足tVREFca_Long,在满足一定条件下,只需要满足tVREFca_Short。在CA发送training pattern之后,需要等待tCS_VREF之后才可以设置下一次判决电压的设定。
CBT(×8 die)
两种training模式,由MR12 OP[7]来进行配置:
ODT-CA为了多rank系统,因此对于多rank系统,terminating的rank先进行training。
模式1:
DQ[6:0]仅作为output,DQ作为输入去设置CA判决电压值和范围的过程将被移除。
CA锁存值会通过DQ异步输出,mapping关系如下图:
两个时序:tCAENT之后,SDRAM才可以接受CA训练pattern,训练结束,需要等待tXCBT之后才可以发送MRW命令。
spec中提供了×8 die的CBT steps:
- 配置MR12 OP[7] = 0(进入mode 1)
- 通过MRW命令配置MR13 OP[0] = 1,进CBT
- 等待tMRD,CKE拉低,SDRAM切换FSP-OP
- 等待tCAENT,SDRAM可以接收CA training pattern
- 经过tADR,CA training pattern出现在DQ端
- CKE拉高后,等待tXCBT发送MRW,退出CBT。
时序图如下:
根据时序图,CKE拉低之后等待tCAENT,CA bus开始接收training pattern,经过tADR之后,CA training pattern会出现在DQ[5:0]。接上图:
每个training pattern间隔需要满足tCACD;在CKE重新拉高前,频率必须切回原本的频率,并且需要稳定至少tCKCKEH;CKE拉高至少需要满足tXCBT才可以发送MRW退出CBT mode。
mode 2:
DQ[6:0]的input/output由DQ[7]控制。
- MRW配置MR12 OP[7]=1,配置模式2;
- MRW配置MR13 OP[0]=1,进CBT;
- 等待tMRD,CKE拉低,SDRAM切换FSP-OP:DQS为input,捕获DQ[6:0];在模式2中,DQS的ODT需要使能,DQS的ODT值由MR11 OP[2:0]和FSP-OP指定;DQ[5:0]为input在tDStrain+tDQSICYC+tDHtrain期间设置CA判决电压值;DQ[5:0]为output会返回CA捕获值,并且需要维持tADVW;DQ[6]为input在tDStrain+tDQSICYC+tDHtrain期间设置CA判决电压范围;DQ[6]为output在tADVW期间,其值没意义;DQ[7]在tADVW为output指示有意义的数据输出,除此期间外的属性由厂商决定;DMI的属性由厂商指定
- 等待tCAENT,LPDDR4可以接受判决电压的相关设定,并且需要等待tVREF_LONG之后才可以锁存信息。
时序图同×16 die类似。