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.

[参考译文] AM6421挂起 SPL

Guru**** 1774980 points
Other Parts Discussed in Thread: AM6421, SYSCONFIG, SK-AM64B, TMDS64EVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1343840/am6421-hung-in-spl

器件型号:AM6421
主题中讨论的其他器件: SysConfigSK-AM64BTMDS64EVM

我正尝试推出一款 利用512MB LPDDR4内存的定制 AM6421设计。  

我使用的是09.02.00.08发行版、其机器=am64xx-EVM。

该器件似乎在 SPL 中遇到了硬故障、我怀疑这与具有2GB RAM、我的板只有512MB 的 SK-AM64有关。

我进行了以下更改、但仍然有问题。  

diff --git a/arch/arm/dts/k3-am642-evm.dts b/arch/arm/dts/k3-am642-evm.dts
索引 dcd8f7ba4cf497bceb7f3e7ece5ec65711cadba8..b53c7b89bc51c57105ce6e09e34b30c699bcbdf4 100644
--a/arch/arm/dts/k3-am642-evm.dts
++ b/arch/arm/dts/k3-am642-evm.dts
@@-23、8 + 23、8 @@

内存@8000000{
device_type ="存储器";
-/* 2G RAM */
- reg =<0x00000000 0x80000000 0x00000000 0x80000000>;
+/* 512MB RAM */
+ reg =<0x00000000 0x80000000 0x00000000 0x20000000>;

};

diff --git a/arch/arm/dts/k3-am642-r5-evm.dts b/arch/arm/dts/k3-am642-r5-evm.dts
Index 57d78e449c3a33b720a2d9309d18955326699a24..cd1983057a4681ee3a95e3cbdb0ab8a37c9b7808 100644
--a/arch/arm/dts/k3-am642-r5-evm.dts
++ b/arch/arm/dts/k3-am642-r5-evm.dts
@@-23、8 + 23、8 @@

内存@8000000{
device_type ="存储器";
-/* 2G RAM */
- reg =<0x00000000 0x80000000 0x00000000 0x80000000>;
+/* 512MB RAM */
+ reg =<0x00000000 0x80000000 0x00000000 0x20000000>;

bootph-pre-ram;
};

我将使用 JTAG 进行调试、并已确定哪个线路导致了硬故障。  

当 memcpy 在第1004行执行时、没有复制到 new_gd 中。 处理器在1006行挂起。

我想其他一些东西还需要更新以适应我正在使用的更小 RAM 吗? 非常感谢任何帮助。  

谢谢。

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

    一些其他详细信息。

    我们 在定制硬件上使用的是 MT53E256M16D1FW;这是 SK-am64开发板上使用的512MB LPDDR4。 该定制实际适用于终端客户的发行版的旧版本、该版本采用了 u-boot 2021。

    我已经使用 SysConfig 基于512MB 大小生成了更新的 DDR 配置文件。

    diff --git a/arch/arm/dts/k3-am64-sk-lp4-1600MTs.dtsi b/arch/arm/dts/k3-am64-sk-lp4-1600MTs.dtsi
    索引 f225c1f0674..e8c8ee3605d 100644
    --a/arch/arm/dts/k3-am64-sk-lp4-1600mts.dtsi
    ++ b/arch/arm/dts/k3-am64-sk-lp4-1600MTs.dtsi
    @@-12、6 +@@、7 μ A
     #define DDRSS_PLL_FHS_CNT 6
     #define DDRSS_PLL_FREQUENCY_1 400000000
     #define DDRSS_PLL_FREQUENCY_2 400000000
    +#define DDRSS_SDRAM_IDX 13
     
     #define DDRSS_CTL_0_DATA 0x00000B00
     #define DDRSS_CTL_1_DATA 0x00000000
    @@-330、8 +331、8 @@
     #define DDRSS_CTL_314_DATA 0x00280028
     #define DDRSS_CTL_315_DATA 0x00000100
     #define DDRSS_CTL_316_DATA 0x01010000
    -#定义 DDRSS_CTL_317_DATA 0x00000000
    -#定义 DDRSS_CTL_318_data 0x3FFF0000
    +#define DDRSS_CTL_317_DATA 0x00000202
    +#define DDRSS_CTL_318_DATA 0x0FFF0000
     #define DDRSS_CTL_319_DATA 0x000FFF00
     #define DDRSS_CTL_320_DATA 0xFFFFFFFF
     #define DDRSS_CTL_321_DATA 0x000FFF00
    @@-513,7+514,7 @@
     #define DDRSS_PI_74_DATA 0x00000000
     #define DDRSS_PI_75_DATA 0x00000000
     #define DDRSS_PI_76_DATA 0x01000000
    -#定义 DDRSS_PI_77_DATA 0x08000100
    +#define DDRSS_PI_77_DATA 0x08020100
     #define DDRSS_PI_78_DATA 0x00020000
     #define DDRSS_PI_79_DATA 0x00010002
     #define DDRSS_PI_80_DATA 0x00000001
    --
    我还切换到了使用 SK DTS 文件、而不是 EVM。 我不知道为什么 EVM defconfig 和 DTS 文件可以在 SK-am64板上工作。  
    diff --git a/configs/am64x_evm_a53_defconfig b/configs/am64x_evm_a53_defconfig
    索引 bb1c7f7a7a7a..9465c768bb 100644
    -- a/configs/am64x_evm_a53_defconfig
    ++ b/configs/am64x_evm_a53_defconfig
    @@-16、7 + 16、7 @@ CONFIG_ENV_SIZE=0x20000
     CONFIG_SYS_SPI_U_BOOT_OFFSE=0x300000
     CONFIG_DM_GPIO=y
     CONFIG_SPL_DM_SPI=y
    -config_default_device_tree="k3-am642-evm"
    +CONFIG_DEFAULT_DEVICE_TRE="k3-am642-sk"
     CONFIG_SPL_TEXT_BASE=0x80080000
     CONFIG_DM_RESET=y
     CONFIG_SPL_MMC=y
    diff --git a/configs/am64x_evm_r5_defconfig b/configs/am64x_evm_r5_defconfig
    索引4b845c3f6d..b1e3a06c9f 100644
    -- a/configs/am64x_evm_r5_defconfig
    ++ b/configs/am64x_evm_r5_defconfig
    @@-15、7 + 15、7 @@ CONFIG_ENV_SIZE=0x20000
     CONFIG_ENV_OFFSET=0x680000
     CONFIG_DM_GPIO=y
     CONFIG_SPL_DM_SPI=y
    -config_default_device_tree="k3-am642-R5-EVM"
    +CONFIG_DEFAULT_DEVICE_TRE="k3-am642-R5-SK"
     CONFIG_SPL_TEXT_BASE=0x70000000
     CONFIG_DM_RESET=y
     CONFIG_SPL_MMC=y
    --

     

    最后、我将根据512MB RAM 来设置 SK DTS 文件。  

    diff --git a/arch/arm/dts/k3-am642-r5-sk.dts b/arch/arm/dts/k3-am642-r5-sk.dts
    索引6701e754bba..14f4a5938 100644
    --a/arch/arm/dts/k3-am642-r5-sk.dts
    ++ b/arch/arm/dts/k3-am642-r5-sk.dts
    @@-25、8 + 25、8 μ@@
     
      内存@8000000{
        device_type ="存储器";
    -   /* 2G RAM */
    -   reg =<0x00000000 0x80000000 0x00000000 0x80000000>;
    +   /* 512MB RAM */
    +   reg =<0x00000000 0x80000000 0x00000000 0x20000000>;
        bootph-pre-ram;
      };
     
    diff --git a/arch/arm/dts/k3-am642-sk.dts b/arch/arm/dts/k3-am642-sk.dts
    索引 cbb10a49642..05f923c7259 100644
    --a/arch/arm/dts/k3-am642-sk.dts
    ++ b/arch/arm/dts/k3-am642-sk.dts
    @@-23、8 + 23、8 @@
     
      内存@8000000{
        device_type ="存储器";
    -   /* 2G RAM */
    -   reg =<0x00000000 0x80000000 0x00000000 0x80000000>;
    +   /* 512MB RAM */
    +   reg =<0x00000000 0x80000000 0x00000000 0x20000000>;
     
      };
     
    --
    我参考了 am64 uboot 移植协会。 不知道我缺少什么。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您分享到目前为止所做的更改的相关信息。
    在 R5 SPL (tiboot3.bin)之后、  代码会将栈和堆重定位到 DDR。
    因此、如果引导卡在 R5 SPL 级、则表示可能存在 DDR 配置不匹配。

      在设计板的 ts 部分时、您是否遵循了 www.ti.com/.../spracu1a.pdf 中的指导?

    如果您可以共享显示确切故障点的错误日志、将会有所帮助。

    此致、
    阿帕拉纳

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

    尊敬的 Aparna:

    感谢您的答复。  

    我们已遵循了 LPDDR4应用手册中的指导。 我们还请 TI 工程师检查原理图和布局。  

    请注意、我们的一位工程师具有基于 TI 发行版08.06.00.42的较旧发行版、在定制硬件上运行。 我注意到 08.06.00.42中使用的 k3-am64-sk-lp4-1333MTs.dtsi 文件与 09.02.01.08中使用的 k3-am64-sk-lp4-1600MTs.dtsi 文件存在许多差异。 我已经  从我们的早期发行版中将 k3-am64-sk-lp4-1333mts.dtsi 文件复制到了我当前正在尝试工作的新发行版09.02.01.08,并且我在同一个地方收到错误,如上面的月表。  

    您指的是什么错误日志? 我已经向许多源文件添加了#define debug、但没有在控制台中打印其他调试信息。 这是我看到的。  

    我将通过 JTAG 继续进行调试、以查看是否可以收集更多信息。  

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

    您好!

    感谢您的意见!
    我已将该主题分配给我们的 DDR 专家来查看。
    如果不存在与 DDR 配置相关的问题、我们可以继续进行调试。

    此致、
    阿帕拉纳

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

    Dan、您好!

    看起来您已完成必要的更改。  让我们确保您已完成 DDR 初始化。

    您是否可以从 SysConfig DDR 寄存器配置工具发送.syscfg 文件?  这将帮助我查看您对定制电路板所做的更改。

    如果您添加

    #define debug 1

    在 k3_ddrss.c 的最顶端、它应该会在控制台中提供更多一些调试线路、用于查看 DDR 初始化的进度。   

    在调试器中、在您尝试引导至失败后、您能否打开一个存储器窗口进入 DDR 存储器空间(0x80000000)并尝试读取/写入值?  这是什么行为?

    此致、

    詹姆斯

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

    James:  

    感谢您的答复。

    我在 k3_ddrss.c 调试语句被启用后包含了.syconfig 和日志数据的下载链接。  

    这里是 SysConfig。

    https://drive.google.com/file/d/1fK3mdYVrtfNXplGAjozOErXXwsVf7L-_/view?usp=sharing

    这里是日志

    https://drive.google.com/file/d/1NosTmIc_hMBm5fdNKgb64HFD0mRJcchI/view?usp=sharing

    这是我在查看0x80000000时看到的内容。 尝试手动向该地址空间添加数据时没有任何变化。  

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

    Dan、您链接的.dtsi 文件可能是来自 SDK 的原始文件以及您在上述差异中显示的一些更改的组合。   例如、行4仍然显示 v0.08.40。  网络上的最新版本是 v0.10.01  https://dev.ti.com/sysconfig/?product=Processor_DDR_Config&device=AM64x

    尝试使用工具输出的完整.dtsi、否则会混合来自不同版本的元素。

    通过工具向我发送.dtsi 和.syscfg、这将为我提供您所使用的配置的全貌。

    此外、当您尝试使用调试器时、似乎您连接到了错误的内核。   连接到 A53或 R5内核。

    日志显示您陷入了 DDR 初始化。

    此致、

    詹姆斯

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

    James:

    我对 SysConfig 的缺点;我刚刚更改了.dtsi 文件中的#define 值、当我从16GB 更改为4Gb 时、SysConfig diff 中应该存在的值。 我现在使用了整个文件。  

    关于到内核的连接、我一直连接到 R5内核。 我在源代码中添加了易失性变量和 while 循环。 然后、我手动更改该变量并单步执行 am642_init.c 源代码。  

    我仍然看到相同的错误、并且无法手动写入 RAM。 日志文件看起来是一样的、但现在我在 RAM 地址空间中看到了 FFs。  

    日志

    https://drive.google.com/file/d/1CTkMdvPtiuNz6mdtMifC1jSJlxJfOl_3/view?usp=sharing

    SysConfig

    无标题 SysConfig

    https://drive.google.com/file/d/110ahC5jAEHxdnxCDWGzOvsQb4ReK0crG/view?usp=sharing

    settings.sysconfig

    https://drive.google.com/file/d/1Us13NyKsOOlOX4mnSUwAQR-2UGeiZXf7/view?usp=sharing

    .dtsi 文件

    https://drive.google.com/file/d/1ry66K5Fx7_bA6z6yM_978OWP-FXZZuYe/view?usp=sharing

    另一个问题:我可以根据终端客户的 tiboot3.bin 文件创建此定制硬件、该文件基于 TI 版本之一08.xx.xx。 我认为我可以使用该 DDR config .dtsi 文件并在最新的 TI 发行版中使用、并且应该可以正常工作。 当然,这不是事实。 DDR 配置文件为何基于特定版本的发行版? 08.xx.xx.xx 发布了之前使用的是 uboot 2021、最近的是2023。 我认为这不会影响所使用的 DDR 配置文件。 很明显、我对一切如何协同工作缺乏了解。  

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

    Dan、您好!  

    您是否能够从可正常工作的 tiboot3.bin 发送.dtsi 文件?

    另外、请向我发送2个寄存器转储:

    -一个有工作的 tiboot3.bin

    -一个与您的失败 tiboot3.bin

    在调试器中时,可以使用 GEL Scripts->AM64x_DDRSS Memory debug->AM64x_DDRSS_CTL_PI_PHY_RegDump()生成 DDR 寄存器的寄存器转储

    这样、我就可以比较这两者。  跨 SDK 版本的 DDR 配置不应有任何限制。   

    此致、

    詹姆斯

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

    James:  

    这里是转储,我包括了下面的比较片段。  

    DDRSS-REGS-BSP - 09.xx.xx.xx

    https://drive.google.com/file/d/1r9RmNiVwwzgWE9lH7qGYUZqpdzwxN8mv/view?usp=sharing

    DDRSS-REGS-CUSTOMER-DISTRO-WORKING

    https://drive.google.com/file/d/1310WoF2sJVXVToNxaiyYnRNNvnn0pHou/view?usp=sharing

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

    Dan、请检查您运行的脚本。  我正在寻找  Scripts->AM64x_DDRSS 内存调试->AM64x_DDRSS_CTL_PI_PHY_RegDump()

    似乎你运行了 AM64_DDRSS_RegDump()

    此致、

    詹姆斯   

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

    James:

    我的错。 我们再试一次。  

    DDRSS-PHY-REGS-BSP - 09.xx.xx.xx

    https://drive.google.com/file/d/1MM92PXoCakJNsQRQY3zAu82pheA_u9C6/view?usp=sharing

    DDRSS-PHY-REGS-CUSTOMER-DISTRO-WORKING

    https://drive.google.com/file/d/1-k-30oUBLrgWZhSudcIlMW0_LFvaByGr/view?usp=sharing

    但两者之间存在很多差异。

    请仔细检查打印的地址。 它们看起来是否正确? 我之前尝试过一次、发现脚本中使用了错误的基址。  

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

    Dan、您好!

    因此、马上有一些不正常的现象。   DDRSS-PHY-REGS-BSP-09.xx.xx.xx 文件在第一行显示:

    MAIN_Cortex_R5_0_0:GEL 输出:0x0F308000 0x10460A01 //DDRSS_CTL_0_DATA  

    但您之前共享的.dtsi 文件  

    #define DDRSS_CTL_0_DATA 0x00000B00

    0xA 与0xB 很重要、因为这会告知控制器它使用的是 DDR4还是 LPDDR4。  因此、您提供的寄存器转储与您说使用的.dtsi 文件不匹配。  需要整理一下、否则差异将毫无意义

     K3-am642-R5-SK.dts 中有一条#include 语句、该语句指向内置的 DDR 配置文件(.dtsi)。  确保这是您通过 DDR 配置工具创建的文件。

    此致、

    詹姆斯

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

    好的、我不太熟悉 Yocto 构建过程。  简单介绍一下、我们有2个适用于 AM64x 的不同 EVM、其中一个是 基于 DDR4的通用 EVM (产品页面上的 TMDS64EVM)。  另一个是基于 LPDDR4的入门套件(SK-AM64B)。  似乎您的构建仍然选择 DDR4配置 (k3-am64-evm-DDR4-1600MTs.dtsi)、并且不使用任何与 SK 关联的文件。  从您使用的 LPDDR4配置中复制所有值后、便会开始工作。

    我必须向我们的软件人员咨询如何构建 Yocto 以使用 LPDDR4配置。

    因此、我相信根据您的说法、您至少已经过去了 DDR 问题。  就 GEL 而言、是的、您是正确的。  还有另外一个 DDR_Init()函数需要运行,以便设置基地址。  看起来您使用#define 实现了这一点、因此这是使其正常工作的替代步骤。  

    此致、

    詹姆斯

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

    James:

    我知道这两个 EVM。 我从来没有清楚,虽然一个发行版如何适应这两种情况。 我怀疑它与 I2C EEPROM 有关。 也许会基于 EEPROM 报告的内容进行某些 DDR 或 LPDDR 配置。 当然、我使用的定制 SOM 目前在 EEPROM 中没有任何信息。 我将深入研究这一点;我怀疑我需要修改一些与配置逻辑相关的源、配置逻辑由 EEPROM 所说的硬件驱动。  

    请向软件人员核实。  

    是的,我们已经过去的 DDR 问题,这更像操作错误问题, LOL。 感谢你的帮助。 我在和您一起工作时学到了一些很好的调试信息。  

    丹  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我必须咨询我们的软件人员以了解如何使用 LPDDR4配置来构建 Yocto。

    有几种方法可以做到这一点,具有不同的"复杂"水平。

    1. 在您自己的 Yocto 层(如果您进行了认真的定制、应该拥有此层)中、附加 U-Boot 方法以包含一个补丁、该补丁会按照您需要的方式更改与 DDR 相关的 U-Boot 源文件。 这篇文章在这里有所有的细节: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1303384/sk-am62-using-custom-kernel-in-local-workspace-for-yocto-ti-sdk/4953153#4953153   

      如果需要、可使用 Yocto 'devtool'进行修改/创建补丁、请参阅 https://docs.yoctoproject.org/4.0.17/ref-manual/devtool-reference.html?highlight=devtool#updating-a-recipe

    2. 与选项1类似、只是通过使用 DDR 配置添加补丁来直接更新 SDK 提供的原始配方。 此外、在这里、您还可以使用 Yocto 的"工具"来简化工作流程。 这比选项1要快、但稍后将代码更新为新的 SDK 基准将需要更多的努力、因为您会直接修改 SDK 提供的方法。

    3. 使用基于 相应 TI SDK 基础树的您自己(自托管) U-Boot 树、并根据需要进行所有修改、例如自定义 DDR 配置。 然后附加(或更新) U-Boot 方法以按原样使用该树、而不是 ti-u-boot-xxxx.xx 树。 无需额外贴片。 这样做的优点是、您可以在完全不使用 Yocto 的情况下轻松地手动使用/构建完全相同的 U-Boot。

    此致、Andreas