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.

[参考译文] Linux/AM4378:SD 引导 MLO 问题

Guru**** 2611705 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656461/linux-am4378-sd-boot-mlo-issue

器件型号:AM4378

工具/软件:Linux

大家好!

我们有一个基于 AM437X-gp-EVM 的定制板。  我们最新的一批原型没有启动。

此版本中的更改与将 PMIC 芯片移至第二条 i2c 总线相关、这会释放另一条总线以执行专用任务。

另一个变化是供应商在我们之前使用的同一存储器的一些更高级 RAM 中交叉参考、 如果有兴趣、您可以 在此处查看...  

如果我反复重新启动电路板、大约5次中的1次、我将在控制台上看到 MLO 闪屏。  然后、它用一些垃圾字符停止。

我们已经确定了 SD 接口的范围、并注意到了一些问题。  在我们之前的板上、较低速握手时间比新板上的时间长约100ms。  两个版本都切换到更快的总线速度、传输的数据看起来是相同的。  我假设这是复制到 SRAM 的 MLO。  但是、我们的较旧板在复制后继续引导。  新电路板暂停。

它们实际上会停止。  我甚至无法通过 JTAG 将 CCS 连接到它们。

我们对电路板进行 X 射线检查、迹线没有差异。  我们被骗了。

如果您对下一步的发展有任何想法或帮助、我们将不胜感激。

提前感谢、

Nathan

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

    当您更改 PMIC 配置时、我建议您首先检查并验证加电序列是否有效。 您可以将引导模式从 SD 卡更改为 UART、如果 UART 终端上具有 CCCC 字符、则加电序列正常、您可以继续调试 SD 卡接口。

    processors.wiki.ti.com/.../AM335x_board_bringup_tips

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

    感谢您的回答。 我将电路板配置为引导 UART0、并在 UART0上看到永无休止的 C 流。 因此、加电序列看起来不错。

    我将查看您提供的链接。 还有其他想法吗?

    谢谢、
    Nathan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    按照提供的指南...
    我可以在 UART0上获取 C
    2.如果我将 BOOT 更改为 MMC0、并插入在该板修订版2上工作的 SD 卡、我将锁定处理器
    3.如果我移除 SD 卡、我可以连接 JTAG、并在 CTRL_STS 寄存器中看到0x0040030C。 检查每个位后、ROM 似乎正确读取 DIP 开关。
    -仅引导至 MMC0
    - 24MHz 时钟
    - CLKOUT1被禁用
    程序计数器位于0x00035A14,不在链接中描述的0x20000-0x2C000范围内,但链接是335x,所以我不确定这是否重要。

    AM437x 处理器是否有与 AM335x-boot.dss 文件等效的文件? AM335x-boot.dss 是否适用于437x?

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

    因为我在 UART0上每次都得到一些 MLO 输出... 我给它20分钟、然后重新启动它、直到我看到控制台输出。

    当我捕获到它时、我可以在它上附加一个 JTAG。  我复制了复位矢量...

    0x40338E40 - 0010009E 00001000 00000010 02001E00

    (笑声) 对这些进行分解我可以看到...

    • 矢量1
      • 已进入主函数
      • 在冷复位后运行
      • 进入主引导例程
      • 找到标头
      • 找到 MMC 配置标题 CHSETTINGS
    • 矢量2
      • 内存引导试用版0
    • 矢量3
      • 存储器引导设备 MMCSD0
    • 矢量4
      • MMC 卡处于就绪状态(CMD1完成)
      • 从 MMC 卡读取的数据
      • 找到主引导记录
      • 找到活动分区
      • 保留位25为高电平

    有人知道保留位25的用途是什么?

    程序计数器位于 0x00035A7E。

    有什么想法?

    谢谢、

    Nathan

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

    [引用用户="Nathan Wright]1. 我可以在 UART0[/QUERP]上获取 C

    ROM 代码运行正常。

    [引用用户="Nathan Wright">2. 如果我将 BOOT 更改为 MMC0、并插入在该板的修订版2上工作的 SD 卡、则我锁定处理器[/报价]

    您能否尝试从另一个源(UART、NAND、以太网、USB)引导、因此我们将确保 MMC0是主要问题。 请参阅以下 wiki、了解如何从各种源启动:

    processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide

    [引用用户="Nathan Wright"]4. 程序计数器位于0x00035A14,不在链接中描述的0x20000-0x2C000范围内,但链接是335x,所以我不确定这是否重要。

    这对于 AM437x 来说是正确的。 AM437x ROM 代码存储器映射为0x30000至0x3FFFC、请参阅 AM437x TRM 第5.2.3.1节"公共 ROM 存储器映射"

    [报价用户="Nathan Wright"> AM437X 处理器是否有与 AM335x-boot.dss 文件等效的文件? AM335x-boot.dss 是否适用于437x?[/quot]

    否、AM335x-boot.dss 不能用于 AM437x 器件。 有关详细信息、请查看以下链接:

    此致、
    帕维尔

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

    [引用用户="Nathan Wright"]

    当我捕获到它时、我可以在它上附加一个 JTAG。  我复制了复位矢量...

    0x40338E40 - 0010009E 00001000 00000010 02001E00

    (笑声) 对这些进行分解我可以看到...

    • 矢量1
      • 已进入主函数
      • 在冷复位后运行
      • 进入主引导例程
      • 找到标头
      • 找到 MMC 配置标题 CHSETTINGS
    • 矢量2
      • 内存引导试用版0
    • 矢量3
      • 存储器引导设备 MMCSD0
    • 矢量4
      • MMC 卡处于就绪状态(CMD1完成)
      • 从 MMC 卡读取的数据
      • 找到主引导记录
      • 找到活动分区
      • 保留位25为高电平

    有人知道保留位25的用途是什么?

    程序计数器位于 0x00035A7E。

    有什么想法?

    [/报价]

    请比较成功的 AM437x MMC0启动板和非启动板之间的跟踪向量、并检查是否存在任何差异。

    您是否使用相同的 SD 卡来引导"良好"和"不良"电路板? 如果没有、可能是您的 SD 卡已损坏、请尝试使用 create-sdcard.sh 脚本格式化并重新创建 SD 卡。

    此致、
    帕维尔

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

    MLO 是否对 PMIC 或 EEPROM 执行任何操作? 我们将这两个器件从 i2c0移到了 i2c1。 我认为答案是否定的、因为我认为我将总线放在了好的电路板上、并确认在启动初期没有发生任何活动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来我错了。

    我们切断了一些布线、并将 PMIC 和 EEPROM 重新移到 i2c0上、然后启动电路板。 我删除了 u-boot.img、因此只有 MLO 存在并且 i2c0上有活动。

    那么、我想这个问题现在变成了、在 spl 源代码中、我需要将其切换以查看 i2c1吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们已确认、只要 PMIC 位于 i2c0上、MLO 将仅引导。 移除 EEPROM 不会停止 MLO 启动。 我是否可以对 MLO 进行更改、让其在 i2c1上查找 PMIC? 或者、我是否需要更改布局和重新制造电路板?

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

    好的,有一些进步:)

    <u-boot./board/ti/am43xx/mux.c 内部

    静态结构 MODULE_PIN_mux i2c0_PIN_mux[]={
    //{offset (i2c0_sda)、(mode (0)| PULLUP_EN | RXACTIVE | SLEWCTRL)}、
    //{offset (i2c0_SCL)、(mode (0)| PULLUP_EN (SLEACTIVE
    
    
    
    )|}、{SLEACTIV0)| AMUCCTRL (0)| AMUTRL (SLEW0)| AMUTRL (SHPULL0)| AMUTRL)| AMUTRL (0)| AMUTRL (SHPLE_0)| AMUTRL (0)| AMUTRL (SHPLE_0)| AMUTRL (SHPLE_0)| AMUTRUTRE (SHUTRL)
    
    static struct module_pin_mux GPIO5_7_pin_mux[]={
    //{offset (spi0_cs0)、(mode (7)| pullup_EN)}、// GPIO5_7 *
    /{offset (SPI4_cs0)、(mode (7)| pullup_EN)}、// GPIO5_7}
    
    、*#def_7
    
    
    

    然后启动。

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

    很高兴看到您已修复它。 如果您有更多问题、请告诉我。

    另请注意、如果需要低功耗模式、I2C0是一个严格的要求。 在原理图检查清单[1]中、我们提到了将 I2C0与软件结合使用。 如果您计划使用 PM 固件支持的 AM437x 的 PM 功能[2]、I2C1将不起作用。

    [1] processors.wiki.ti.com/.../AM437x_Schematic_Checklist

    [2] processors.wiki.ti.com/.../Linux_Core_Power_Management_User's_Guide_(v4.4)

    此致、
    帕维尔