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:eMMC 引导问题

Guru**** 2543480 points
Other Parts Discussed in Thread: AM4378, AM4372

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/814842/linux-am4378-emmc-boot-issue

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

你(们)好。

我正在尝试基于 AM437x-gp-EVM 平台处理器 SDK 生成定制板。 我能够为我们的应用程序构建内核、u-boot 和根文件系统以及自定义软件。 然后、这一切都写入 SD 卡、该卡的引导效果非常好。 SD 卡位于物理器件 mmc0上、可转换为器件树中的 mmc1、而 eMMC 是物理器件 mmc1、可转换为器件树中的 mmc2、并按照 TRM 中的建议使用数据线连接到的线路 GPMC_ad8至 GPMC_ad11进行准确布线 能够引导。

具体而言、问题在于 eMMC。 最初、从 SD 卡引导后、eMMC 在 Linux 中未显示为器件、在进行某种修整后、由于某种原因、当器件的总线宽度设置为1而不是4时、它在 Linux 中被检测为器件并可用。 即使 TRM 中描述的四条物理数据线也是如此。 然后复制 SD 卡的完全相同的分区(通过 Linux 引导至 eMMC)后、预计将根据 SYSBOOT 引脚的配置使用 eMMC。

真正的问题从这里开始。 将文件从 SD 卡复制到 eMMC 后、系统将关闭、然后 SD 卡将被移除。 如果系统再次通电、则会加载存储在 eMMC 引导分区上的 u-boot、并显示以下内容:

正在尝试从 MMC2
spl 引导:找不到 MMC 设备1。 错误:-19
SPL:无法从所有引导设备进行引导
###错误###请重置主板### 

这很奇怪、因为这个 u-boot 是从它现在找不到的同一器件加载的。 因此、我假设这是 u-boot 的问题。

我执行的下一步是重新插入 SD 卡、并在 u-boot 提示符处停止。 然后、我发出命令'mc list'、该命令返回两个器件、如下所示:

OMAP SD/MMC:0 (SD)
OMAP SD/MMC:1. 

然后、当我尝试使用'mc dev 1'选择 eMMC 时、我会收到以下错误消息:

卡未响应电压选择! 

因此、我再次假设 u-boot 可能会出现问题、并且可能是某种类型的配置不正确。 不完全确定。 我认为我可能只是缺少一些非常简单的东西。

最后、我还想了解是否有人知道、如果总线宽度设置为4 (与硬件的物理线路相对应)、内核为何无法引导、但如果总线宽度设置为1、则引导过程不会出现问题。

提前感谢您的帮助!

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

    您好!

    我想知道您能否分享您正在使用的处理器 SDK。 此外、请附加内核启动日志、其中 eMMC 总线宽度设置为4、并连接有关 AM4378的 eMMC 硬件。

    此致、
    Krunal

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

    您好!

    我将关闭机票、如果您有更多问题、请随时在将来打开机票。

    此致、
    Krunal

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

    很抱歉、我们花了这么长时间才回复。


    所使用的处理器 SDK 是 ti-processor-sdk-linux-AM437X-EVM-04.03.00.05。

    另外、请找到所附的引导日志、其中总线宽度设置为4。

    关于到引脚本身的硬件连接、请参考下图。

     e2e.ti.com/.../boot_5F00_4_5F00_buswidth.log

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

    您好!

    我想知道您是否可以确认 DTS 文件中的引脚复用。 请参阅"表7-11。 TRM 中的 CONTRAL_MODULE Registers"、并在 Uboot 中使用"MD"命令、请转储寄存器值。

    例如、CTRL_CONF_GPMC_AD8寄存器的0-3位指示电路板的当前引脚配置。 请确保所有引脚均已正确配置。 此外、请记住、Uboot dts 文件和 Kernel dts 文件中必须存在引脚多路复用。

    此致、
    Krunal

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

    感谢 Krunal 的帮助。

    实际上、引脚复用在 u-boot 和内核 DTS 文件中都发生。 eMMC 引脚的引脚复用在两个文件中如下:

    eMMC_PINS_DEFAULT:eMMC_PINS_DEFAULT{
    pinctrl-single、pins =<
    AM4372_IOPAD (0x880、PIN_INPUT_PULLUP | MUX_MODE2)/*(B9) GPMC_csn1.mmc1_clk *
    AM4372_IOPAD (0x884、PIN_INPUT_PULLUP | MUX_MODE2)/*(F10) GPMC_csn2.mmc1_cmd *
    AM4372_IOPAD (0x820、PIN_INPUT_PULLUP | MUX_MODE2)/*(B10) GPMC_AD8.mmc1_data0 */
    AM4372_IOPAD (0x824、PIN_INPUT_PULLUP | MUX_MODE2)/*(A10) GPMC_AD9.mmc1_DAT1 */
    AM4372_IOPAD (0x828、PIN_INPUT_PULLUP | MUX_MODE2)/*(F11) GPMC_ad10.mmc1_data2 */
    AM4372_IOPAD (0x82c、PIN_INPUT_PULLUP | MUX_MODE2)/*(D11) GPMC_AD11.mmc1_dat3 */
    AM4372_IOPAD (0x874、PIN_OUTPUT 上拉| MUX_MODE0)/*(B3) GPMC_WPN.GPMC_WPN *
    >;
    };
    
    eMMC_PINS_SLEEP:eMMC_PINS_SLEEP{
    pinctrl-single、pins =<
    AM4372_IOPAD (0x880,PIN_INPUT_PULLUGDOWN | MUX_MODE7)/*(B9) GPMC_csn1.GPIO1_30 */
    AM4372_IOPAD (0x884,PIN_INPUT 下拉| MUX_MODE7)/*(F10) GPMC_csn2.GPIO1_31 */
    AM4372_IOPAD (0x820、PIN_INPUT_PULLUGDOWN | MUX_MODE7)/*(B10) GPMC_AD8.GPIO0_22 */
    AM4372_IOPAD (0x824、PIN_INPUT 下拉| MUX_MODE7)/*(A10) GPMC_ad9.GPIO0_23 * 

    AM4372_IOPAD (0x828、PIN_INPUT 下拉| MUX_MODE7)/*(F11) GPMC_ad10.GPIO0_26 */
    AM4372_IOPAD (0x82c、PIN_INPUT 下拉| MUX_MODE7)/*(D11) GPMC_AD11.GPIO0_27 *
    AM4372_IOPAD (0x874、PIN_INPUT 下拉| MUX_MODE7)/*(B3) GPMC_WPN.GPIO0_31 */
    >;
    }; 

    随附以下器件:

    mmc2{(&M)
    状态="正常";
    VMMC-SUPPLY =<&EVM_v3_3D>;
    总线宽度=<4>;
    pinctrl-names ="default"、"sleep";
    pinctrl-0 =<&eMMC_PINS_DEFAULT>;
    pinctrl-1 =<&eMMC_PINS_SLEEP>;
    
    }; 

    如前所述、问题是如果我构建两个映像、第一个映像的总线宽度设置为4、则无法启动、但是如果我将总线宽度属性设置为1、则可以正常启动。

    另请参阅随附的日志以及 CONTRAL_MODULE 寄存器中请求的相关'd'命令。

    我确实发现寄存器中的多路复用模式显示为7是奇数、即使它们被设置为多路复用模式2的默认值。 我想知道这是否是因为睡眠引脚被定义为多路复用模式7。 此外、即使这些寄存器显示多路复用模式7、也不会影响引导过程、因为系统会以1总线宽度进行引导。

    我们非常感谢您的任何建议或建议。

    此致、

    尤伊恩

    e2e.ti.com/.../0675.u_5F00_boot_5F00_1_5F00_pin.loge2e.ti.com/.../7217.u_5F00_boot_5F00_4_5F00_pin.log

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

    您好 Eujean、

    作为一个实验、我想知道您是否可以从"pinctrl-names"和"pinctrl-1"中删除睡眠参数、并尝试引导。 我不知道为什么引脚复用没有产生任何效果。

    此致、
    Krunal

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

    Krunal、您好、再次感谢您迄今提供的帮助。

    遗憾的是、在两个 DTS 文件中禁用睡眠相关引脚并不会产生任何影响。 然后、我尝试使用'm'命令手动设置这些寄存器、确保寄存器值与写入器件树中的值一致、然后进行引导。 同样、它没有产生任何影响、我无法使用命令'mc dev 1'选择 eMMC 器件。 我收到与最初相同的错误、即卡未响应电压选择。

    我无法理解为什么引脚多路复用器不能按预期对这些寄存器进行操作、也许根据设计、我不确定是否缺少任何内容。

    但是、此时可以保持总线宽度为1、但仍能引导。 而当前只有 u-boot SPL 从 eMMC 加载、但随后无法加载剩余的内容、即无法找到 MMC 器件。 这可能是 u-boot 的配置问题吗? 我是否应该指定映像的位置、即使在正确的分区上找到了 spl?

    如果有任何建议,将不胜感激。

    此致、
    尤伊恩

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

    您好、再说一次、

    快速更新。 我在遇到相当大的问题后能够从 eMMC 引导。 事实证明、器件树并不是完成引脚多路复用的唯一位置。 我不知道也必须修改 boards/ti/am437xx/中的文件 mux.c。 这会导致控制模块使用 MD 命令报告寄存器中的正确值。 但总线宽度仍然为1。 如果我将总线宽度设置为4、则在尝试选择具有"mc dev 1"的器件时、u-boot 会返回超时错误(-110)。 这可能是一个硬件问题、我将进一步研究。

    如果对于我无法从 SD 卡引导的原因有任何其他建议、如果 eMMC 的总线宽度设置为4、这将是非常值得赞赏的。

    此致

    尤伊恩

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

    您好 Eujean、

    我想知道您是否在 DTS 配置中禁用了 GPMC (状态="禁用";)。

    此致、
    Krunal

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

    您好 Krunal、

    我可以确认之前怀疑的四条数据线路中的任何一条都没有硬件问题。 就器件树中涉及的 GPMC 而言、我的 DTS 文件中未明确指定 GPMC、但我确实看到它在 am4372.dtsi 中具有="disabled"的状态

    附件是我们的完整器件树文件。

    此致、

    尤伊恩

    e2e.ti.com/.../5633.am437x_2D00_gp_2D00_evm.txt

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

    您好 Eujean、

    我想知道您是否可以分享您对硬件的验证。 此外、如果可以、请探测时钟并分享示波器图像。 最后、您是否观察到 eMMC 电压轨上的任何压降、并请分享 VCC/VCCQ 电压读数?

    此致、
    Krunal