RX Clock Source Features
本节介绍每个RX时钟源的功能
•内部虚拟读选通和内部环回(MCR0.RXCLKSRC == 0)
支持具有零设备输出的传统设备保持时间。
保存一个打击垫(DQS打击垫)。
支持低频时钟以启动使用。
•内部虚拟读取选通和DQS焊盘环回(MCR0.RXCLKSRC == 1)
支持比传统模式“MCR0.RXCLKSRC == 0”更高的频率。
支持设备不提供读取选通
•Flash提供的读选通(MCR0.RXCLKSRC == 3)
支持最高频率。
支持设备提供读取选通。
Input timing for sampling with dummy read strobe
本节介绍使用内部虚拟读选通(MCR0 [RX_CLK_SRC]设置为0x0或0x1)进行采样时的输入时序。
对于内部采用伪读取选通环回和来自焊盘的环回采样,时序非常相似。
但它可以通过从DQS焊盘采用伪读取选通环回来实现更高的读取频率,因为它将补偿SCK输出路径和数据引脚输入路径的延迟。
SDR模式和DDR模式的输入时序不同。
•SDR模式下使用虚拟读选通进行采样的输入时序
对于SDR读/学习指令,FlexSPI采用伪读选通的下降沿对输入数据引脚进行采样。
下图表示在SDR模式下使用虚拟读选通进行采样的输入时序
•在DDR模式下使用虚拟读选通进行采样的输入时序
对于DDR读/学习指令,FlexSPI采样输入数据引脚,具有虚拟读选通的上升沿和下降沿。
下图显示了DDR模式下采用伪读选通的采样输入时序
Input timing for sampling with flash provided read strobe
本节介绍使用闪存提供的读选通采样时的输入时序(MCR0 [RXCLKSRC]设置为0x3)。
SDR模式和DDR模式的输入时序不同。
NOTE
now 没有已知的设备提供读选通和支持SDR模式操作
Flash提供提供两种读取选通方式:
•Flash提供SCK2读取选通
•Flash提供SCK读取选通
1) Flash提供SCK2读取选通
对于某些闪存器件,它为SCK2提供读选通,并使用SCK读数据。
然后读取选通边缘位于效数据窗口中心。 FlexSPI 控制器应直接对读取数据进行读取数据采样(绕过DLL),请参阅DLL配置以获取更多详细信息。
下图显示了在SDR模式和DDR模式下采用闪存读取选通的输入时序:
Input Timing 1 for Flash provided read strobe in SDR mode
•Flash提供SCK读取选通
对于某些闪存设备,它提供读取数据和SCK读选通。
然后,读取选通边沿与读取数据变化对齐。
FlexSPI控制器以串行根时钟为基础(带DLL)迟半个周期 读选通,然后采用具有延迟读选通采样读取数据。
有关详细信息,请参阅DLL配置以获取采样
下图显示了在SDR模式和DDR模式下采用闪存读取选通的输入时序:
DLL configuration for sampling
这四个采样时钟源的输入时序不同。
这是通过根据采样时钟源模式设置寄存器DLLxCR来处理的。
DLL是延迟线链,可以设置为固定数量的延迟单元或自动调整以锁定到参考时钟的某个相位延迟。
1)在下列情况下,DLLxCR应设置为0x00000100(DLL延迟链中的1个固定延迟单元):
•使用内部虚拟读取选通环路采样数据(MCR0 [RXCLKSRC] = 0x0)
•使用从DQS焊盘环回的虚拟读取选通采样数据(MCR0 [RXCLKSRC] = 0x1)
•使用闪存提供的读取选通(MCR0 [RXCLKSRC] = 0x3)采样数据,闪存提供SCK2读取选通
这四个采样时钟源的输入时序不同。
这是通过根据采样时钟源模式设置寄存器DLLxCR来处理的。
DLL是延迟线链,可以设置为固定数量的延迟单元或自动调整以锁定到参考时钟的某个相位延迟。
2)在下列情况下,DLLxCR应设置为0x00000100(DLL延迟链中的1个固定延迟单元):
•使用内部虚拟读取选通环路采样数据(MCR0 [RXCLKSRC] = 0x0)
•使用从DQS焊盘环回的虚拟读取选通采样数据(MCR0 [RXCLKSRC] = 0x1)
•使用闪存提供的读取选通(MCR0 [RXCLKSRC] = 0x3)采样数据,闪存提供SCK2读取选通
•当使用闪存提供的读选通(MCR0 [RXCLKSRC] = 0x3)对闪存进行采样时,闪存提供SCK的读选通,DLL应设置如下以锁定参考时钟的半周期(串行根时钟)
• SLVDLYTARGET=0xF
• DLLEN=0x1
• OVRDEN=0x0
• Other fields in DLLxCR should be kept as reset value (all zero)
NOTE
如果串行根时钟低于100 MHz,则DLL无法锁定串行根时钟的半周期,因为延迟单元数在延迟链中受限制。 然后应将DLL配置如下:
•OVRDEN = 0x1
•OVRDVAL = N; DLL中的每个延迟单元约为75 ps~225 ps。
DLL延迟链的延迟是(N * Delay_cell_delay),N应该基于max设置。
当前项目支持的DDR频率,N = 21,请注意这是一个推荐值。
如果面临失败,可能需要在实际应用中进行调整。
•DLLxCR中的其他字段应保留为重置值(全为零)。
Execute-In-Place Enhance mode
无论外部设备是否提供“原地执行”增强模式,FlexSPI始终支持就地执行。
通过将程序代码放在外部设备上,然后通过AHB读取访问SFM空间直接在外部设备上读取/执行,可以支持Execute-In-Place。
在AHB读取访问外部设备存储器期间不需要配置或状态轮询,AHB RX缓冲器对软件完全透明。
某些设备提供XIP增强模式以改进代码执行(XIP)。
在此模式下,无需为读取序列提供命令代码。
它为命令指令节省了许多周期,并大大提高了代码执行(XIP)。
该XIP增强模式由指定设备的特殊序列进入/退出。
有关更多详细信息,请参阅外部器件数据手册。
通常,按以下顺序输入XIP增强模式:
1.通过IP命令在外部闪存中启用XIP增强模式
2.使用正确的模式位将第一个读取序列发送到外部闪存设备。
此读取序列中需要命令代码。
3.使用正确的模式位将以下读取序列发送到外部闪存设备。
这些读取序列中不需要命令代码。
但应根据指定的Flash发送模式位。
否则,Flash将退出就地执行增强模式。
FlexSPI中的指令JMP_ON_CS应用于支持外部设备XIP增强模式。
该指令仅在AHB读命令中允许,否则如果启用该中断,将产生IPCMDERR或AHBCDMERR错误中断。
如果设备不支持XIP增强模式,则永远不应使用JMP_ON_CS。
要支持XIP增强模式,读序列中的第一条指令应为Command指令,最后一条有效指令应为JMP_ON_CS(带操作数0x1)。
对于第一个AHB读命令触发,FlexSPI将执行序列中指令指针0的指令(即Command指令)。
执行此序列后,FlexSPI将把JMP_ON_CS指令中的operand 保存为内部下一个命令到当前设备的启动指针。
对于以下AHB读命令触发,FlexSPI将从指令指针0x1执行,并且绕过命令指令。