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.

[参考译文] AM3358:MT41K256M16TW-107的 DDR3内存问题

Guru**** 2951650 points

Other Parts Discussed in Thread: AM3358

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/671313/am3358-ddr3-memory-issue-with-mt41k256m16tw-107

主题中讨论的其他器件:AM3358

大家好、社区

我有一个带 AM3358的定制板、与 BBB 类似、但没有 HDMI 和 eMMC。 我复制了 DDR3的布局、但使用 的是 MT41K256M16TW-107、而不是 MT41K512M16HA-125。

我已经尝试启动电路板并计算 DDR 值、并将其添加到 DDR_defs.h 中 在文件 ti_am335x_common.h 中输入"#define debug"后、我看到启动在 DDR 处停止。 为了找出错误,我在文件 board/ti/am335x/board.c 中添加了 printf,但它们从未显示在终端中。 因此、我有几个问题:

是否有人提出了一个具有 MT41K256M16TW-107的 AM3358、并且可以共享计算值?

2.我使用这些命令来构建 u-boot:

-使 cross_compile=arm-linux-gnueabihf- distclean
-使 arch=arm cross_compile=arm-linux-gnueabihf- am335x_bonebblack_defconfig
-使 cross_compile=arm-linux-gnueabihf--j4

为什么在启动期间无法看到 board.c 中的 printf? 此文件是否未在 u-boot 中使用?

3.在我看来,文件 ddr_defs.h 不是为 u-boot 设置 DDR 值的正确文件。 有人可以确认吗?

感谢你的帮助。

我将删除 DDR_configuration、DDR_defs.h、board.c 和启动输出

此致

Eric

e2e.ti.com/.../AM335x_5F00_DDR_5F00_register_5F00_calc_5F00_tool_5F00_new.xlse2e.ti.com/.../log_5F00_am335x.txte2e.ti.com/.../1452.ddr_5F00_defs.he2e.ti.com/.../24225.board.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请遵循以下准则:
    processors.wiki.ti.com/.../AM335x_EMIF_Configuration_tips
    processors.wiki.ti.com/.../AM335x_DDR_PHY_register_configuration_for_DDR3_using_Software_Leveling

    您还可以在此处找到分步指导教程:
    processors.wiki.ti.com/.../Sitara_Linux_Training:_Tuning_the_DDR3_Timings_on_BeagleBoneBlack
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Biser、

    感谢您的供应。 我阅读并尝试了您以前建议的链接、但没有成功。 特别是该网站 processors.wiki.ti.com/.../Sitara_Linux_Training:_Tuning_the_DDR3_Timings_on_BeagleBoneBlack 似乎不是最新的。
    此外、我在 SDRAM_init 函数的开头添加了一个 printf、但在启动期间从未看到 printf。 这让我感到、这个函数永远不会被调用?!

    此致
    Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哪个 Linux、RESP。 您使用的是 U-boot 版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    U-BOOT-2017.11
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eric:

    DDR 配置应放置在 ddr_defs.h 中、然后由 board.c 使用 查看您的日志文件、我发现 DDR 实际上已初始化:
    DRAM:initcall:80801f79
    RAM 配置:
    组#0:8000000 512 MIB
    DRAM:512 MiB

    上述控制台线路来自 board_f.c:
    静态 int Announce_DRAM_init (void)
    {
    PUT ("DRAM:");
    返回0;
    }

    最后一行"DRAM_BANK_MMU_setup: Bank: 0"来自 DRAM_BANK_MMU_setup()。

    您可以看到、MLO 已配置 DDR 并加载 u-boot。 因此问题就在这之后。

    [引用]为什么在启动期间看不到 board.c 中的 printf? 此文件是否未在 u-boot 中使用?
    此文件用于 u-boot。 是否可以尝试改用 put()?

    [引述]1. 是否有人使用 MT41K256M16TW-107提出了 AM3358、并且可以共享计算值?[/QUERP]
    我没有这样做、因此我无法共享计算出的 DDR 值。

    [引述]2. 我使用这些命令来构建 u-boot:

    -使 cross_compile=arm-linux-gnueabihf- distclean
    -使 arch=arm cross_compile=arm-linux-gnueabihf- am335x_bonebblack_defconfig
    -使 cross_compile=arm-linux-gnueabihf--j4[/quot]

    对代码进行自定义修改后、您能否尝试使用顶级命令:
    cd ~/ti-processor-sdk-linux-am335x-evm-04.02.00.09/
    进行 u-boot

    我认为您应该使用 AM335x_EVM_CONFIG (即包含/configs/am335x_evm.h 文件)配置 u-boot。

    [引述]3. 在我看来、文件 ddr_defs.h 不是为 u-boot 设置 DDR 值的正确文件。 是否有人可以确认此问题?
    正如我说过的、DDR 配置应放置在 ddr_defs.h 中、然后由 board.c 使用 您所做的是正确的。

    最后一个注释:启用"#define debug"会增加 MLO 和 u-boot 大小。 这可能会导致将 u-boot 重新定位到默认地址时出现问题。 它对于某些调试用途很有用、但您能否在没有#define debug 的情况下进行测试并共享控制台输出?

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

    Yordan、您好!

    感谢你的帮助。

    [引用用户="Yordan Kovachev"]


    此文件用于 u-boot。 是否可以尝试改用 put()?

    [/报价]

    我已经尝试过"放入"、但结果相同。 如果我错了、请纠正我的错误、但这告诉我、永远不会调用该函数、也不会加载 RAM 配置。

    您知道原因是什么吗?

    [引用用户="Yordan Kovachev"]

    对代码进行自定义修改后、您能否尝试使用顶级命令:
    cd ~/ti-processor-sdk-linux-am335x-evm-04.02.00.09/
    进行 u-boot

    我认为您应该使用 AM335x_EVM_CONFIG (即包含/configs/am335x_evm.h 文件)配置 u-boot。

    最后一个注释:启用"#define debug"会增加 MLO 和 u-boot 大小。 这可能会导致将 u-boot 重新定位到默认地址时出现问题。 它对于某些调试用途很有用、但您能否在没有#define debug 的情况下进行测试并共享控制台输出?

    [/报价]

    我已经使用 AM335x_EVM_CONFIG 以及#define DEBUG 进行了测试。

    e2e.ti.com/.../log_5F00_am335x_5F00_evm_5F00_config.txt

    这里是不带调试的输出:

    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
    U-Boot SPL 2017.11 (2018年3月13日- 17:04:21)
    尝试从 MMC1引导
    ***警告- CRC 错误,使用默认环境

    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img


    U-Boot 2017.11 (2018年3月13日- 17:04:21 +0100)

    CPU :AM335X-GP 修订版2.1
    型号:TI AM335x BeagleBone Black
    DRAM: 512 MiB

    然后、它看起来像是在同一位置停止。

    我还 angström 了一个非常旧的 MLO 和 u-boot from and μ m image (2012)。 我可以启动到 μ angström。 由于这一事实、我认为这必须是配置问题?!

    你有其他想法吗?

    此致

    Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以共享 DTS 吗? 它位于 u-boot arch/arm/cpU/DTS 中:
    AM335x-bone-common.dtsi
    AM335x-bonebblack.dts

    您是否对其进行了修改以匹配您的定制板? 例如、在 AM335x-bone-common.dtsi 中、有以下段:
    内存{
    DEVICE_TYPE ="存储器";
    REG =<0x8000000000 0x10000000>;/* 256 MB */
    };

    您使用512MB RAM。

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

    Yordan、您好!

    我没有修改此文件。 为什么有256 MB、BBB 有512MB? 请告诉我应该有哪些值? 我找不到任何信息。

    此致

    Eric

    e2e.ti.com/.../am335x_5F00_bone_5F00_common.zip

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

    让我测试一下我这边的东西、我将进行更新。

    至于 u-boot DTS 中的存储器节点、它似乎从未引用(因此会被忽略)。

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

    您好!

    您是否修改了 include/configs 中的 AM335x_evm.h、ti_AM335x_common.h、ti_armv7_omap.h 和 ti_armv7_common.h?  

    您应该在 include/configs/ti_armv7_common.h 中具有#define CONFIG_NR_DRAM_Banks 1

    正如我说过的、您的 u-boot 似乎正在初始化 RAM、但缺少一些内容。

    我还看到您不使用 TI 处理器 SDK Linux 中的 u-boot。 您能否尝试使用 TI u-boot 2017.01而不是 u-boot 2017.11?

    此致、

    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有修改这些文件中的任何一个。 我将(uboot2017.01)中的这些文件与最后一个 AM335xSDK 中的文件进行了比较、它们在 am335x_evm.h 和 ti_armv7_common.h 中仅有细微差异
    我还检查了文件 ti_armv7_common.h 中的条目#define CONFIG_NR_DRAM_Banks 1、它在第75行中

    #ifndef CONFIG_NR_DRAM_Banks
    #define CONFIG_NR_DRAM_Banks1.
    #endif

    我没有使用 SDK,因为我似乎无法正常使用虚拟机。 我无法正确运行 setup.sh。 但在我看来、它也应该适用于默认的 u-boot 2017.01、但结果相同。
    您知道哪个文件分别调用 board.c 文件和函数 SDRAM_init 吗? 我想知道为什么我不能使用这些文件的任何 printfs/puts。
    感谢你的帮助

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

    [引用]您知道哪个文件分别调用 board.c 文件和函数 SDRAM_init 吗?[/quot]
    SDRAM_init()由 arch/arm/mach-omap2/am33xx/board.c 文件调用:
    #ifdef CONFIG_SPL_Build
    void board_init_f (ulong 虚拟)
    {
    EARLY_SYSTEM_INIT();
    Board_EARLY_INIT_f ();
    debug ("==print from arch/arm/mach-omap2=\n");
    SDRAM_INIT();
    debug ("=print from arch/arm/mach-omap2、after SDRAM_init=\n");
    /* DRAM_init 必须将完整的 ramsize 存储在 gd->ram_size 中*/
    gd->ram_size = get_ram_size (
    (void *) CONFIG_SYS_SDRAM_BASE、
    CONFIG_MAX_RAM_Bank_Size);
    }
    #endif

    printf/puts 不起作用的原因是 u-boot 的这一部分在 SoC 初始化中太早(很可能在初始化串行 UART 之前)。
    您可以尝试通过 JTAG (如果您填充了 JTAG 接头)连接到电路板、并使用 CCS 逐步执行 u-boot 代码、如下所述:
    processors.wiki.ti.com/.../Sitara_Linux_Training:_uboot_linux_debug_with_ccsv5

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

    遗憾的是、我没有 JTAG 接头。

    我在 mach-OMAP2的 board.c 文件中看到有调试输出。 创造自己的机会并尝试找到停止的位置是否有意义、或者这是否不起作用?

    此致

    Eric

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

    很抱歉耽误你的回答。
    是的、您应该尝试启用尽可能多的调试输出。

    此致、
    Yordan