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.

[参考译文] AM6548:DDR 模式寄存器读取/写入

Guru**** 2562120 points
Other Parts Discussed in Thread: AM6548, SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1047126/am6548-ddr-mode-register-read-write

器件型号:AM6548
Thread 中讨论的其他器件: SYSBIOS

大家好、

我对我们在基于 AM6548的定制电路板上使用的 LPDDR4存储器的读取模式寄存器内容有疑问。
目的是读取包含制造商 ID 信息的 MR5寄存器。
因此、我们可以使用多家制造商(例如 Micron、ISSI 等)提供的各种 DDR 模块(但具有相同特性)、并在需要时为其提供不同的 DDR 控制器配置。

我的配置为:
CCS 版本:9.2.0.00013
PDK - pdk_am65xx_1_0_7 (processor_sdk_rtos_am65xx_6_03_00_106)
SYSBIOS - 6.76.3.01

我想通过向 LPDDR4模块发出模式寄存器读取命令来执行 MR5模式寄存器的读取。
为此、我在 PDK 的\packages/ti\board\src\cbsKeystone3\board_DDR.c 文件中使用了对 DDRCTL_MRCTRL0、DDRCTL_MRCTRL1和 DDRCTL_MRSTAT 寄存器的写入/读取。
具体而言、我 在调用 Board_DDRInit (void)函数内的 DDR_Controller_PHY_Config ()后输入了以下行:

while(HW_RD_REG32(CSL_DDRSS0_CTL_CFG_BASE + CSL_EMIF_CTLCFG_MRSTAT) & 0x01) {}
HW_WR_REG32(CSL_DDRSS0_SS_CFG_BASE + CSL_EMIF_CTLCFG_MRCTRL0,0x00000011);
boardDDRDelay();
while(HW_RD_REG32(CSL_DDRSS0_CTL_CFG_BASE + CSL_EMIF_CTLCFG_MRSTAT) & 0x01) {}
HW_WR_REG32(CSL_DDRSS0_SS_CFG_BASE + CSL_EMIF_CTLCFG_MRCTRL1,0x00000500);
boardDDRDelay();
while(HW_RD_REG32(CSL_DDRSS0_CTL_CFG_BASE + CSL_EMIF_CTLCFG_MRSTAT) & 0x01) {}
HW_WR_REG32(CSL_DDRSS0_SS_CFG_BASE + CSL_EMIF_CTLCFG_MRCTRL0,0x80000011);
boardDDRDelay();
while(HW_RD_REG32(CSL_DDRSS0_CTL_CFG_BASE + CSL_EMIF_CTLCFG_MRSTAT) & 0x01) {}
s32DdrId = HW_RD_REG32(CSL_DDRSS0_CTL_CFG_BASE + CSL_EMIF_CTLCFG_MRCTRL1) & 0xFF;

在这里、我首先等待之前的模式寄存器读取命令完成、然后在命令被设定为 MRR 且列为零的情况下配置 MRCTRL0寄存器。

地址(0x5)被载入  MRCTRL1 (位[15:8])、然后我发出模式寄存器读取命令并从 MRCTRL1 寄存器读取结果。
在 Board_DDRInit (void)中成功完成 DDR 培训后、我还尝试插入了相同的行。
但是、我始终从 CSL_EMIF_CTLCFG_MRCTRL1寄存器中获取零值、读取数据位中的零值([7:0])。

我们当前使用的 Micron LPDDR4已正确配置、我们已成功执行内存测试、并且正在从 DDR 运行代码、不会出现任何问题。
有人能不能给我一个提示、我在这里做错了什么?

此致、
米兰

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

    米兰

    您能否为您正在使用的存储器提供器件型号?  如果"几何"(行、列、组等)相同、则应可以使用与两个存储器兼容的单一配置。

    此致、

    Kyle

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

    您好、Kyle、

    感谢您的回复。 我们希望用于 LPDD4的替代器件包括:

    • ISSI IS46LQ32128A-062BLA2
    • Winbond W66CL2NQUAFJ

    我的同事正在完成在 TI EMIF 工具中输入参数的工作、因此我应该很快就能获得这些模块的配置。

    但是否可以按照我尝试的方式访问 LPDDR4 MRx 寄存器?
    如果配置有一些显著差异、这将对我们大有帮助。

    此致、
    米兰

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

    您好、Kyle、

    很抱歉、我忘记说我们现在使用的默认内存模块是 Micron  MT53E128M32D2DS-046模块。
    上述消息中列出了备选方案。

    此致、
    米兰

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

    米兰

    不清楚模式寄存器读取为什么不起作用。  尽管如此、 我们确实检查了您的存储器器件型号、看起来所有3个存储器的基本配置(即行/组/列/通道)都是相同的。  应该可以使用与所有3个内存器件型号兼容的配置。

    此致、

    Kyle

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

    您好、Kyle、

    感谢您提供有关此内容的信息。
    我们将进行通用的 DDR 配置并进行试用。
    目前、这似乎是可能的、但我将确认这一点、并在我们进行测试时立即告知您。
    我们是否应该保持此主题的开放 状态、或者如果遇到一些问题、是否应该关闭此主题并发布另一篇帖子?

    此致、
    米兰

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

    米兰

    我们可以将其保持打开状态。  我可以将其标记为"等待客户" 、以便我们的主持人不会因此而感到困扰。

    谢谢、

    Kyle

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

    您好、Kyle、

    我们在使用 ISSI LPDDR4存储器而不是 Micron 存储器的电路板上遇到了很大的问题。
    这里、我们使用 ISSI IS46LQ32128A-062BLA2、而不是 Micron MT53E128M32D2DS-046。
    我的一侧有两块板、带有 ISSI 存储器、无法通过写入矫正培训步骤。
    首先、我尝试将修改后的电路板库/SBL 用于 TI-RTOS、但随后通过 GEL 文件切换到仿真器初始化、以避免缓慢的构建过程。
    通过使用 TI EMIF 工具2.02、我创建了应在 Micron 和 ISSI 存储器上使用的配置(请参阅随附的 AM65x_DRA80xM_LPDDR4_1333MTs_EMIFToolConfig_ISSI.txt)
    这在具有 Micron 存储器的电路板上工作、但在具有 ISSI 的电路板上不工作。
    写入水平调整训练失败、并显示以下消息:


    通过 R5连接未初始化 DDR。

    转至"Scripts"->"DDR_Initialization"菜单以初始化 DDR。

    ===

    MCU_Pulsar_Cortex_R5_0:GEL 输出:基址= 0x43000000
    MCU_Pulsar_Cortex_R5_0:GEL 输出:偏移= 0x0001C040
    MCU_Pulsar_Cortex_R5_0:GEL 输出:分区= 0x00000007
    MCU_Pulsar_Cortex_R5_0:GEL 输出:分区已成功解锁!
    MCU_Pulsar_Cortex_R5_0:GEL 输出:分区已成功锁定!
    MCU_Pulsar_Cortex_R5_0:GEL 输出:VTT 稳压器已启用
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    PHY 初始化完成
    MCU_Pulsar_Cortex_R5_0:GEL 输出:DDRSS_DDRPHY_PGSR0 = 0x8000000F
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    正在等待 DRAM 初始化完成...
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    DRAM 初始化完成
    MCU_Pulsar_Cortex_R5_0:GEL 输出:DDRSS_DDRPHY_PGSR0 = 0x8000001F
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    正在等待写入矫正完成
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    写入水平调整完成
    MCU_Pulsar_Cortex_R5_0:GEL 输出:DDRSS_DDRPHY_PGSR0 = 0x8020003F
    MCU_Pulsar_Cortex_R5_0:GEL 输出:写水平中的四个错误****
    MCU_Pulsar_Cortex_R5_0:GEL 输出:正在检查每字节的写入调平状态...
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    DDRSS_DDRPHY_DX0GSR0 = 0x00D334E0
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    DDRSS_DDRPHY_DX1GSR0 = 0x00CE33E0
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    DDRSS_DDRPHY_DX2GSR0 = 0x00D33360
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    DDRSS_DDRPHY_DX3GSR0 = 0x00D434E0
    MCU_Pulsar_Cortex_R5_0:GEL 输出:
    DDRSS_DDRPHY_DX4GSR0 = 0x00010000
    MCU_Pulsar_Cortex_R5_0:GEL 输出:CTRLMMR_WKUP_PID = 0x61800211
    MCU_Pulsar_Cortex_R5_0:GEL 输出:

    ===

    LPDDR4初始化失败!!!
    DDR 配置为666MHz 工作频率
    ===

    从这里的寄存器输出中可以看到、某些 DATA8有一个 PLL 锁定、但写入调平总是失败。

    然后、我尝试将阻抗设置更改为 TI 默认的60/40欧姆、但这也不起作用。
    之后、我尝试更改一些与写入水平相关联的时序值(WLMRD = 60tck、tWLWPRE = 30tCK、也是 tWLO=40ns)、但这也不起作用。
    此外、我尝试使用较慢的边沿、但这并不能帮助:
    转换率:Addr/Ctrl/Clk Medium 快速模式
    压摆率:DATA/Strobe Medium_Fast_Mode

    我始终会遇到与上述寄存器输出非常相似的写入矫正故障。

    所有这些配置都可与 Micron 存储器一起在板上工作(至少它可以顺利通过培训步骤)。

    根据我们可以知、Sitara 和 LPDDR4存储器已正确组装好、并具有 ISSI 存储器的两个电路板上的所有无源组件(功率电容器、上拉/下拉电阻器)。 电源电压也存在且值正确。

    我是否在 EMIF 工具设置中犯了会导致这种情况的严重错误?

    在写入矫正阶段之前、是否与 LPDDR4存储器有任何交互?
    在执行此步骤之前、我可以看到只有 DDR 控制器在 Sitara 上初始化(DDR_Controller_PHY_Config ()、PHY_Init()、SDRAM_Init(0x7))。

    由于模式寄存器读/写不起作用、是否有方法(通过设置/读取某些 DDR 控制器寄存器)可以检查存储器是否在 CA 总线上接收命令?

    是也很重要的一点是、Sitara 可以从 MSMC 内部存储器运行应用程序、而不会出现任何问题。

    此致、
    米兰

    e2e.ti.com/.../AM65x_5F00_DRA80xM_5F00_LPDDR4_5F00_1333MTs_5F00_EMIFToolConfig_5F00_ISSI.txt

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

    您好 Kyle、

    我使用 ISSI 存储器在533和600 MHz 的低时钟设置上进行了测试。
    为此、我必须修改\packages/ti\drv\sciclient\examples\sciclient_ccs_init\sciclient_ccs_init_main.c、以将 PLL3时钟设置为266/300 MHz。
    然后、我在用于 ISSI 存储器的 TI EMIF 工具中尝试了多种配置:

    533MHz

    • AM65x_DRA80xM_EMIF_Tool_2.02_ISSI_od_600.xlsm -转换为533MHz 时钟的 ISSI 原始设置
    • Micron AM65x_DRA80xM_EMIF_Tool_2.02_mod_od1_533.xlsm -转换为533MHz 时钟的 Micron 原始设置

    600MHz

    • AM65x_DRA80xM_EMIF_Tool_2.02_ISSI_od_600.xlsm -为600Mhz 时钟转换的 ISSI 原始设置
    • Micron AM65x_DRA80xM_EMIF_Tool_2.02_mod_od1_600.xlsm -转换为600Mhz 时钟的微米原始设置

    在这两种情况下、ISSI 写入水平调整失败、如 ISSI_Micron_test.txt 所示。
    在这里、我必须保留寄存器 DDRSS_DDRCTL_INIT4和 DDRSS_DDRPHY_MR3的设置、因为这些设置在 EMIF 工具中未针对53/600MHz 频率正确初始化

    我还尝试了 Micron 存储器的设置:

    533MHz

    • Micron AM65x_DRA80xM_EMIF_Tool_2.02_mod_od1_533.xlsm -转换为533MHz 时钟的 Micron 原始设置

    600MHz

    • Micron AM65x_DRA80xM_EMIF_Tool_2.02_mod_od1_600.xlsm -转换为600Mhz 时钟的微米原始设置

    在这两种情况下、Micron Memory 的培训均已成功完成。

    您也可以在 ISSI_Micron_test.txt 中为每个测试找到 DDR init 的 GEL 文件输出。

    此致、
    米兰

    e2e.ti.com/.../ISSI_5F00_Micron_5F00_test.txte2e.ti.com/.../AM65x_5F00_DRA80xM_5F00_EMIF_5F00_Tool_5F00_2.02_5F00_ISSI_5F00_od_5F00_533.xlsme2e.ti.com/.../AM65x_5F00_DRA80xM_5F00_EMIF_5F00_Tool_5F00_2.02_5F00_ISSI_5F00_od_5F00_600.xlsme2e.ti.com/.../Micron_5F00_AM65x_5F00_DRA80xM_5F00_EMIF_5F00_Tool_5F00_2.02_5F00_mod_5F00_od1_5F00_533.xlsme2e.ti.com/.../Micron_5F00_AM65x_5F00_DRA80xM_5F00_EMIF_5F00_Tool_5F00_2.02_5F00_mod_5F00_od1_5F00_600.xlsm

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

    在与 ISSI 和 TI 及其宝贵建议协商后、针对 DDR PLL 和 DDR 控制器配置的电路板库中引入了多项更改。

    首先、必须修改 PLL3设置以获得666MHz 存储器时钟(333MHz PLL3时钟)的理想配置。 设置包括:
    M=400、N=9、M2=3、SigmaDelta=4 (Sel_freq_DCO 自动设置为2)。
    其他存储器频率设置为:
    对于600MHz - M=720、N=9、M2=6、SigmaDelta =8 (Sel_freq_DCO 自动设置为4)
    对于533MHz - M=640、N=9、M2=6、SigmaDelta =7 (Sel_freq_DCO 自动设置为4)

    必须对电路板库(对于 PDK 1.0.7)进行多项修改、以便可以直接设置 PLL3寄存器:

    • 在文件\packages\ti\board\src\cbsKeystone3\board_PLL.c Board_call to PLLConfig (&pllcConfigs[CSL_DDR_PLL])中;应添加到函数 Board_PLLInitAll (void)的末尾
    • 此外、在文件\packages/ti\board\src\am65xx_ccs\am65xx_ccs_pll.c PLL3寄存器中、应在 pllcConfigs[]中设置适当的值(上面给出的值)
    • file \packages/ti\board\src\cbsKeystone3\include\board_ddr_config.h 通过对 MR22进行一次修改、从 TI EMIF 工具反射了666MHz 存储器时钟设置(请参阅下文)。

    其次、在 TI EMIF 工具中、所有阻抗(Step1系统详细信息- DDR 控制器和存储器)应反映 PCB 线路阻抗值(在我们的案例中、所有阻抗均为48 Ω)。
    这些更改是根据 Micron_AM65x_DRA80xM_EMIF_Tool_2.02_mod_od1.xlsm 进行的

    第三、对于参数 tODTon (min)(ODT 打开/关闭延迟(最小值))、Micron_AM65x_DRA80xM_EMIF_Tool_2.02_mod_od1.xlsm 中存在错误。
    应将其设置为- 0tCK、1.5ns、而不是6tCK、1.5ns (这在 Micron 存储器的情况下很可能会导致偶尔的读取错误)。

    第四、如果设置 DDR MR22寄存器值、TI EMIF 工具会将寄存器 DDRSS_DDRPHY_MR22设置为0、从而设置控制器 ODT
    设置为禁用的 VOH 校准值。 这会导致内存校准错误。
    由于某种原因、Micron 存储器没有此问题、但这是 ISSI 存储器的问题。 必须根据控制器 ODT 设置的值来设置该值。
    在本例中、这是 Rzq/5–48 Ω、因此 DDRSS_DDRPHY_MR22=0x00000005。

    上述更改解决了 ISSI 在初始化期间未通过培训以及 Micron 存储器偶尔出现的读取错误的问题。

    e2e.ti.com/.../Micron_5F00_AM65x_5F00_DRA80xM_5F00_EMIF_5F00_Tool_5F00_2.02_5F00_mod_5F00_od1.xlsm