This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2612:AM2612 — 具有 phy 集成的 OSPI-1 PSRAM

Guru**** 2867080 points

Other Parts Discussed in Thread: AM2612

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1620461/am2612-am2612---ospi-1-psram-with-phy-integration

器件型号: AM2612

您好!

我目前正在尝试在带有 TI AM2612 芯片的定制硬件上将 IS66WV032 PSRAM 与 OSP1 外设集成。

主要问题是 PHY 模式和 DQS 信号来正确地对输入数据进行采样。 只要未启用 PHY 模式、我就会获得地址和虚拟所需的 CLK 周期、直到数据被采样。 据我所知、如果禁用 PHY 模式、OSP1 外设是否会在 SCLK 周期内对数据进行采样。 只有启用 PHY 模式时、DQS 信号才用于对数据进行采样。  

phy-disabled-cmd-read.png
如果我启用 PHY 模式、我将只获得一个 SCLK 周期、这个周期当然不足以触发地址、还会得到必要的虚拟周期、直到提供 DQS 信号。

phy-enabled-cmd-read.png
正确配置 PHY 模式需要满足哪些条件?

相关的 PHY 配置(省略地址和虚拟周期的配置,这些周期似乎适用于禁用的 PHY):

/* Select the number of delay element to be inserted between
     * phase detect flip-flops.
     */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_MASTER_CONTROL_REG,
                   OSPI_FLASH_CFG_PHY_MASTER_CONTROL_REG_PHY_MASTER_PHASE_DETECT_SELECTOR_FLD,
                   2U);

    /* Configure PHY in Master operational mode */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_MASTER_CONTROL_REG,
                   OSPI_FLASH_CFG_PHY_MASTER_CONTROL_REG_PHY_MASTER_BYPASS_MODE_FLD,
                   OSPI_FLASH_CFG_PHY_MASTER_CONTROL_REG_PHY_MASTER_MODE);

    /* Set the read delay */
    CSL_REG32_FINS(&ospi1_flash_cfg->RD_DATA_CAPTURE_REG,
                   OSPI_FLASH_CFG_RD_DATA_CAPTURE_REG_DELAY_FLD,
                   5);
    /* Sampled on rising edge of clock */
    CSL_REG32_FINS(&ospi1_flash_cfg->RD_DATA_CAPTURE_REG,
                   OSPI_FLASH_CFG_RD_DATA_CAPTURE_REG_SAMPLE_EDGE_SEL_FLD,
                   CSL_OSPI_FLASH_CFG_RD_DATA_CAPTURE_REG_SAMPLE_EDGE_SEL_FLD_MAX);

    /* Try RX DLL BYPASS ?? */
    // CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG, OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_RX_DLL_BYPASS_FLD, 1);

    /* Set TX DLL delay */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG,
                   OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_TX_DLL_DELAY_FLD,
                   6);
    /* Set RX DLL delay */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG,
                   OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_RX_DLL_DELAY_FLD,
                   6);

    /* phy enable */
    CSL_REG32_FINS(&ospi1_flash_cfg->CONFIG_REG, OSPI_FLASH_CFG_CONFIG_REG_PHY_MODE_ENABLE_FLD, TRUE);

    uint32_t idleFlag = 0;

    /* Wait for Idle */
    while (idleFlag == 0)
    {
        idleFlag = CSL_REG32_FEXT(&ospi1_flash_cfg->CONFIG_REG,
                                  OSPI_FLASH_CFG_CONFIG_REG_IDLE_FLD);
    }

    /* Disable OSPI Controller */
    CSL_REG32_FINS(&ospi1_flash_cfg->CONFIG_REG,
                   OSPI_FLASH_CFG_CONFIG_REG_ENB_SPI_FLD,
                   FALSE);

    /* Clear the delay line resync bit */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG,
                   OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_RESYNC_FLD,
                   0U);

    /* Reset DLL in master mode */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG,
                   OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_RESET_FLD,
                   0U);

    /* Set Initial delay for the master DLL */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_MASTER_CONTROL_REG,
                   OSPI_FLASH_CFG_PHY_MASTER_CONTROL_REG_PHY_MASTER_INITIAL_DELAY_FLD,
                   0x5U);

    /* DLL out of reset */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG,
                   OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_RESET_FLD,
                   1U);

    /* Wait DLL lock done */
    while ((CSL_REG32_FEXT(&ospi1_flash_cfg->DLL_OBSERVABLE_LOWER_REG,
                           OSPI_FLASH_CFG_DLL_OBSERVABLE_LOWER_REG_DLL_OBSERVABLE_LOWER_DLL_LOCK_FLD) == 0U))
    {
        (void)idleFlag;
    }

    /* Wait DLL loopback lock done */
    while ((CSL_REG32_FEXT(&ospi1_flash_cfg->DLL_OBSERVABLE_LOWER_REG,
                           OSPI_FLASH_CFG_DLL_OBSERVABLE_LOWER_REG_DLL_OBSERVABLE_LOWER_LOOPBACK_LOCK_FLD) == 0U))
    {
        (void)idleFlag;
    }

    /* Resync the Slave DLLs */
    CSL_REG32_FINS(&ospi1_flash_cfg->PHY_CONFIGURATION_REG,
                   OSPI_FLASH_CFG_PHY_CONFIGURATION_REG_PHY_CONFIG_RESYNC_FLD,
                   1U);

    /* enable SPI */
    CSL_REG32_FINS(&ospi1_flash_cfg->CONFIG_REG,
                   OSPI_FLASH_CFG_CONFIG_REG_ENB_SPI_FLD,
                   1);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    我已将该线程重新分配给正确的所有者、请让专家有时间返回。

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我们尚未通过 PHY 集成对 PSRAM 进行全面测试。 发行说明中也提到了这一点

    MCUSDK-14636 AM261x:NAND 闪存和 PSRAM 不支持 PHY 调优 OSPI、闪存 10.02.00 起

    dev.ti.com/.../RELEASE_NOTES_11_01_00_PAGE.html

    我的建议是使用非 phy 模式、直到从我们这边开始进行测试

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如您希望在代码中看到的、我不使用 SDK、我可以自行实施用于 PSRAM 集成的驱动程序。 如果能获得更多有关如何使用 OSP1 的 PHY 部分以允许使用 DQS 正确对数据进行采样的信息、我将不胜感激。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    OSPI 0 IP 与 OSPI1 相同。 如果您正在寻找有关 PHY 集成的参考、可以参考 OSPI 0 驱动器。

    github.com/.../v0

    未测试功能与代码无关;它与 OSPPHY 在不同温度 范围下的可靠运行和信号完整性有关

    https://www.ti.com/lit/an/spract2/spract2.pdf

    您可以在上面阅读有关 OSPi phy 调优的更多信息。

    如果您 还有其他问题、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    我不知道这份 PDF。

    我仍然不清楚必须在 PHY_MASTER_CONTROL_REG 中进行配置:

    启动器延迟是什么?

    DLL 的初始延迟值是多少?

    递增/递减指示的数量是多少?

    此外、在启用 DQS 和 DDR 的情况下、DDR_READ_DELAY_FLD 在 PHY 模式下不执行任何操作。 它如何发送到 RD_DATA_CAPTURE_REG 中的 DELAY_FLD?

    我能否影响在启用或不启用 PHY_PUBLIC 模式的情况下直接访问中读取多少个字节?

    在 PHY 模式激活的情况下、我正在尝试所有可能的 RX_DLL_DELAY_FLD 和 DELAY_FLD 组合与来自 PSRAM 的已知数据、但似乎没有获得高于 25MHz 的可靠读取。 我缺少的更重要的调优参数吗?
    希望能提供更多关于登记册的资料。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    目前未为 PSRAM 启用 phy 调优、但我们正在努力启用它。 很抱歉、 延迟的回复。
    此致
    史瓦克  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    感谢您回答详细的问题。 我很高兴能更深入地了解用于 PSRAM 与 AM2612 集成的 OSPI PHY 配置。 如前所述、专用的 PSRAM PHY 调优尚未完全验证、但我们希望提供尽可能多的指导来支持您的工作。

    让我们逐一解决您的问题:

    1.PHY_MASTER_CONTROL_REG — 启动器延迟和初始 DLL 延迟

    • 启动器延迟 (PHY_MASTER_PHASE_DETECT_SELECT_FLD): 该字段选择 PHY 内的相位检测器抽头。 理想值在很大程度上取决于电路板布局布线、布线长度和信号完整性。 首先2、正如您已经尝试过的那样、您需要进行试验。 较高的值会增加延迟检测范围、可能会改善锁定、但如果设置过高、也会引入不稳定。 在调整时、分析示波器上的 DQS 与 DQ 关系至关重要。
    • 初始 DLL 延迟 (PHY_MASTER_Initial_DELAY_FLD): 这将设置 DLL 的初始粗调延迟。 0x5这是一个合理的起点。 该值会将 DLL 偏置到可能正确的延迟、从而加快锁定过程。 过低或过高会阻止 DLL 收敛。

    重要提示: DLL 锁定过程是迭代的。 PHY 检测相位差并连续调整延迟。 这些初始值只是为该过程提供一个起点。

    Rd_DATA_CAPTURE_REG 与 PHY 配置 — DDR_READ_DELAY_FLD 与 DELAY_FLD

    您对此感到困惑! 在启用 DQS 的 PHY 模式下、 DDR_READ_DELAY_FLD实际上会被忽略。 DQS 信号为数据采样提供时序基准、使静态延迟调整DDR_READ_DELAY_FLD无关紧要。 DELAY_FLDINRD_DATA_CAPTURE_REG 是非 PHY 模式的传统设置。 使用 DQS 时、仅关注 PHY 配置寄存器(DLL 延迟,相位检测器选择)。

    3、脉冲长度控制

    否、没有直接机制来修改 PHY 本身内的突发长度。 突发长度由 OSPI 控制器配置(寻址和时序设置)控制。 PHY_PUBLISE 模式不会改变这种情况。 您使用 OSPI 寄存器定义突发长度、PHY 根据定义的突发处理数据传输。

    4. DLL 锁定详细信息

    不幸的是、可见的 DLL 锁定标志 ()DLL_OBSERVABLE_LOWER_REG 相当粗糙。 当前公开的调试寄存器不易访问、更详细。 但是、您可以间接监视 DLL 的行为:

    • 数据眼图分析: 使用示波器检查 DQ 引脚上的数据眼图张开度。 严格、清晰的眼图表示 DLL 锁定正常。 眼图闭合或失真表明 DLL 未正确收敛。
    • DLL 复位/重新同步周期: PHY_CONFIG_RESET_FLDPHY_CONFIG_RESYNC_FLD寄存器进行实验。 反复重置和重新同步 DLL 可能有助于它找到稳定的锁定点、尤其是当它因轻微的初始不平衡而卡住时。

    5. DQS 偏斜

    DQS 偏斜极其重要。 DQS 和 DQ 信号之间的任何显著偏差都会严重影响数据采样。

    • 布局: 最关键的因素是仔细的 PCB 布局。 使 DQS 和 DQ 布线的长度尽可能紧密匹配。 尽量减少过孔和弯曲。
    • 布线阻抗: 确保对所有布线进行一致的阻抗控制。
    • 端接: 正确的端接对于尽可能减少反射和振铃至关重要。 请参阅 PSRAM 数据表以了解建议的端接方案。
    • DQS 校准(高级): 虽然 AM2612 没有自动 DQS 校准功能、但您可能可以实现基于软件的校准例程来微调 DLL 延迟以补偿偏差。 这将涉及使用略有不同的 DLL 设置读回数据并分析错误率。

    其他注意事项:

    • 温度: DLL 性能可能随温度发生漂移。 在工作温度范围内进行全面测试至关重要。
    • 电源噪声: 电源上的噪声会影响 PHY 的稳定性。 确保电源干净、稳定。
    • PSRAM 数据表: 请仔细查看 IS66WV032 数据表、了解具体的时序要求和建议。

    我们很高兴继续这一对话并提供进一步的帮助。 请随时分享您的测试结果以及您捕获的任何特定波形。

    此致、

    Zackary Fleenor