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.

[参考译文] 66AK2H06:构建 u-boot 以使用片上存储器(OCM)代替 DDR

Guru**** 2589265 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/590855/66ak2h06-build-u-boot-to-use-on-chip-memory-ocm-instead-of-ddr

器件型号:66AK2H06

如何构建 u-boot 以从片上存储器而不是 DDR 运行? 以下是动机

我们拥有基于 Keystone 2的生产板。 (这些电路板没有仿真器连接。) 有时、当 SPL 尝试在 DDR 中将控制传输到 u-boot 时(根据消息确定)、我们会得到一个电路板、其中的启动失败。 我们希望使用 u-boot 来检查寄存器、并在调试中使用此类 t help、但由于 DDR 损坏、它不会运行。  

谢谢、

兰斯

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

    spl (MLO)从片上存储器运行。 U-boot 加载到 DDR 中并从此处执行。 我将介绍这一点、但根据我的经验、您不应能够从内部存储器执行 u-boot。

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

    感谢您的快速响应。 感谢您对此进行深入研究。

    我不需要 u-boot 提供太多功能、我当然不打算使用它启动任何内容。 但是、检查/修改寄存器/存储器的功能可能会证明对诊断问题很有价值。

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

    如果您在电路板上运行 Linux、我认为我还有另一个选择。
    您可以使用 u-boot 故障模式、这会跳过 u-boot 器件并直接加载内核、因此您的引导顺序将是:
    ROM 代码-> BMC->MLO -> Kernel,而不是 ROM 代码-> BMC->MLO -> U-boot -> Kernel

    有关如何在故障模式下构建和使用 u-boot 的信息、请查看以下链接:
    e2e.ti.com/.../1999092
    e2e.ti.com/.../1893477
    www.denx.de/.../2013-ELCE-U-Boot-Falcon-Boot.pdf

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、忽略上述内容。 如果只需要 u-boot 即可进行调试、则不会对您有用。
    我将看到其他解决方案。

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

    u-boot 从 MSMC @ 0x0c00 0000的片上存储器运行。 DDR3由 u-boot 初始化和配置、因此 u-boot 在配置前无法从 DDR3运行。 您没有说使用了什么 SDK。 起始地址已在 MCSDK 和 ProcSDK 之间从0x0c001000移动到0x0c00 0000。

    我不确定如何调试这一点、因为控制台也是在 u-boot 中初始化的。 如果 SPL 跳转至 u-boot 时失败、则打印也不起作用。

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

    Rex、

    我使用的是 MCSDK。 我认为 u-boot-spl 也会初始化控制台、因为我从控制台获取消息、最后一个是它正在清除 DDR。 我猜不久之后、SPL 将跳至完全 u-boot in (损坏) DDR、所有这些都是分开的。  

    我希望我可以构建完整的 u-boot 以使用 OCM 而不是 DDR、或者将一些交互例程(例如寄存器/存储器访问)添加到 u-boot-spl 中。 一种不太吸引人的替代方法是在编辑/制作/加载过程中向 SPL 添加调试代码----乏味,但比什么都好,特别是因为 UART 启动只需不到一分钟。

    这种情况都不是正常的永久代码、因为它只需测试偶尔出现的坏板即可。 BGA 封装中的所有组件以及在带埋孔的内层上进行布线、因此很难探测任何物体。 但 DDR 控制器寄存器中可能有一些线索、有助于缩小搜索范围。

    我无法找到 DDR 中 u-boot 的目标地址的定义位置或执行从 SPL 到完全 u-boot 的最终转换的位置、尽管我只查看了几个小时。 任何线索都是有用的。 此外,如果你认为整个计划是一个坏主意,我也会感到冒犯。

    谢谢、

    兰斯

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

    示例:哎呀... 我想说"我不会冒犯..." 这会改变其含义。

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

    您好、Lance、

    不用担心。 我知道这是一个拼写错误。

    KS2使用2级引导。 引导加载程序首先将一小段代码 spl 加载到 MSMC 以启动、然后 spl 仍将 uboot 加载到 MSMC 以运行。 因此、U-boot、而不仅仅是 SPL、位于 MSMC 上。 直到 u-boot 初始化 DDR3、然后它将自身重新定位到 DDR3。 您可以参阅 doc/README.arm-relocation 以了解更多详细信息、或查看 u-boot 源代码中 arch/arm/lib/board.c 中的 board_init_f()。

    我想您在 ProcSDK 上、只是对您的配置感到好奇。 您是否想共享或更正我的条目?

    MCSDK 版本:3.1.4.7

    引导模式:ARM SPI

    DDR3A:(供应商) 2GB 1600 MT/s

    用于 ARM 的 SYSCLK

              对于 DDR3A:

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

    啊、现在我理解您之前的评论。 难怪我找不到 DDR 的转换--我在 SPL 中看到的是 u-boot-full,它实际上设置了它。 我应该已经知道这一点、因为我们通常使用 u-boot 的 UART 引导板、而不使用 spl。

    因此、在转换到 DDR 之前、调试代码实际上应置于 u-boot 满状态。

    我们使用的是 MCSDK 3.01.01.04。 以下是初始开机消息:

    DRAM:2GiB CPU 版本:1.
    U-Boot SPL 2013.01脏污(2015年10月31日- 06:50:55)
    SPI_setup_slave bus=0 cs=0 regs=21000400 frq=30000000
    SF:检测到 N25Q512A、页面大小为64 KiB、总共64 MIB

    U-Boot 2013.01脏(2015年10月31日- 06:50:55)

    I2C:就绪
    无法读取 DIMM 参数
    检测到 SO-DIMM []

    将整个 DDR3内存重置为0...
    DRAM:2GiB
    NAND:256 MIB
    SPI_setup_slave bus=0 cs=0 regs=21000400 frq=30000000
    SF:检测到 N25Q512A、页面大小为64 KiB、总共64 MIB
    净额:K2HK_EMAC0、K2HK_EMAC1
    按任意键停止自动引导:0